функция обратного вызова EVT_ACX_STREAM_RELEASE_HARDWARE (acxstreams.h)
Событие EvtAcxStreamReleaseHardware сообщает драйверу освободить все оборудование, выделенное для потока, и переключить поток в состояние Остановки.
Синтаксис
EVT_ACX_STREAM_RELEASE_HARDWARE EvtAcxStreamReleaseHardware;
NTSTATUS EvtAcxStreamReleaseHardware(
ACXSTREAM Stream
)
{...}
Параметры
Stream
Объект ACXSTREAM представляет аудиопоток, созданный каналом. Поток состоит из списка элементов, созданных на основе элементов родительского канала. Дополнительные сведения см. в разделе ACX — сводка по объектам ACX.
Возвращаемое значение
Возвращает значение STATUS_SUCCESS
, если вызов был выполнен успешно. В противном случае возвращается соответствующий код ошибки. Дополнительные сведения см. в разделе Использование значений NTSTATUS.
Комментарии
AcxStream поддерживает различные состояния. Эти состояния указывают, когда поток звука (состояние RUN), звук не течет, но звуковое оборудование подготовлено (состояние PAUSE) или звук не течет и звуковое оборудование не подготовлено (состояние STOP).
Событие EvtAcxStreamReleaseHardware переключит состояние потока из состояния Пауза в состояние Stop. Драйвер должен освободить все аппаратные ресурсы, выделенные для потоковой передачи в этом случае, например подсистемы DMA. Когда поток перейдет в состояние Stop, драйвер может получить событие EvtAcxStreamPrepareHardware для перехода в состояние Приостановка или объект ACXSTREAM может быть уничтожен.
События ACX аналогичны состояниям KS, как описано в этой таблице.
Состояние запуска | Конечное состояние | Вызывается событие драйвера ACX | Примечания |
---|---|---|---|
STOP | ПРИОБРЕСТИ | PrepareHardware | Драйвер выполняет выделение оборудования и подготовку |
ПРИОБРЕСТИ | PAUSE | (Без вызова) | |
PAUSE | ВЫПОЛНИТЬ | Выполнить | |
ВЫПОЛНИТЬ | PAUSE | Пауза | |
PAUSE | ПРИОБРЕСТИ | (Без вызова) | |
ПРИОБРЕСТИ | STOP | ReleaseHardware | Драйвер освобождает выделение оборудования |
Когда работа с потоком завершена, evtAcxStreamFreeRtPackets вызывается после EvtAcxStreamReleaseHardware. Это позволяет завершить этап выпуска оборудования, чтобы освободить пропускную способность, освободить ресурсы DMA и любую другую связанную очистку, прежде чем затем будут освобождены выделенные буферы RT.
Очистка памяти
Удаление ресурсов потока можно выполнить при очистке контекста потока драйвера (а не уничтожении). Никогда не помещайте удаление всего, что совместно используется в контексте объекта, чтобы уничтожить обратный вызов. Это руководство относится ко всем объектам ACX.
Обратный вызов destroy вызывается после того, как последняя ссылка исчезает, когда она неизвестна.
Обратный вызов очистки потока вызывается при закрытии дескриптора. Одним из исключений из этого является создание потока драйвером в обратном вызове. Если ACX не удалось добавить этот поток в его stream-bridge непосредственно перед возвратом из операции stream-create, поток отменяется асинхронный, а текущий поток возвращает ошибку клиенту create-stream. На этом этапе поток не должен иметь выделенных выделений mem.
Пример
Ниже приведен пример использования.
ACX_STREAM_CALLBACKS streamCallbacks;
ACX_STREAM_CALLBACKS_INIT(&streamCallbacks);
streamCallbacks.EvtAcxStreamReleaseHardware = EvtStreamReleaseHardware;
...
status = AcxStreamInitAssignAcxStreamCallbacks(StreamInit, &streamCallbacks);
PAGED_CODE_SEG
NTSTATUS
EvtStreamReleaseHardware(
_In_ ACXSTREAM Stream
)
{
PSTREAM_CONTEXT ctx;
NTSTATUS status;
PAGED_CODE();
ctx = GetStreamContext(Stream);
status = ReleaseStreamHardware(Stream);
ctx->StreamState = AcxStreamStateStop;
return status;
}
Требования к ACX
Минимальная версия ACX: 1.0
Дополнительные сведения о версиях ACX см. в статье Обзор версий ACX.
Требования
Требование | Значение |
---|---|
Заголовок | acxstreams.h |
IRQL | PASSIVE_LEVEL |