Функция AcxRtStreamCreate (acxstreams.h)
AcxRtStreamCreate создает аудиопоток ACX RTStream, который используется ОС для потоковой передачи звуковых данных.
Синтаксис
NTSTATUS AcxRtStreamCreate(
WDFDEVICE Device,
ACXCIRCUIT Circuit,
PWDF_OBJECT_ATTRIBUTES Attributes,
PACXSTREAM_INIT *Config,
ACXSTREAM *Stream
);
Параметры
Device
Объект WDFDEVICE (описан в разделе Сводка по объектам платформы), связанный с указанным объектом ACXCIRCUIT и его потоком.
Circuit
ОБЪЕКТ ACXCIRCUIT, с которым будет связан этот поток.
Attributes
Дополнительные атрибуты, определенные с помощью WDF_OBJECT_ATTRIBUTES , которые используются для задания значений различных объектов: очистки и уничтожения обратных вызовов, типа контекста и указания его родительского объекта.
Config
Структура ACXSTREAM_INIT, которая определяет параметры инициализации потока. Дополнительные сведения об объектах ACX см. в разделе ACX — сводка по объектам ACX.
Stream
Указатель на расположение, которое получает дескриптор нового объекта ACXSTREAM.
Объект ACXSTREAM представляет аудиопоток, созданный каналом. Дополнительные сведения см. в разделе ACX — сводка по объектам ACX.
Возвращаемое значение
Возвращает значение STATUS_SUCCESS
, если вызов был выполнен успешно. В противном случае возвращается соответствующий код ошибки. Дополнительные сведения см. в разделе Использование значений NTSTATUS.
Комментарии
После создания ACXSTREAM драйвер может добавить один или несколько элементов ACX в поток. По умолчанию элементы ACX соединены в том же порядке сборки. ACXSTREAM связан только с одним ACXCIRCUIT. ACX поддерживает два типа потоков: базовые объекты потока ACX, используемые каналами без потоковой передачи, и объекты потока ACX RealTime (RT), используемые каналами потоковой передачи.
ACXSTREAM, созданный AcxRtStreamCreate, позволит драйверу получать управляющие сигналы и изменения состояния, связанные с потоком. ACXSTREAM также поддерживает потоковую передачу звуковых данных в ос или из нее. Драйвер, поддерживающий потоковую передачу звуковых данных, должен использовать AcxRtStreamCreate для создания ACXSTREAM с поддержкой потоковой передачи.
Для конечной точки, состоящей из нескольких объектов ACXCIRCUIT в нескольких драйверах, ACXCIRCUIT, на котором размещается контакт потоковой передачи, создаст Stream ACX RT, в то время как другие ACXCIRCUITs в конечной точке будут создавать потоки ACX, отличные от RT.
Пример
Ниже приведен пример создания потока RT.
//
// Init streaming callbacks.
//
ACX_STREAM_CALLBACKS streamCallbacks;
ACX_STREAM_CALLBACKS_INIT(&streamCallbacks);
streamCallbacks.EvtAcxStreamPrepareHardware = EvtStreamPrepareHardware;
streamCallbacks.EvtAcxStreamReleaseHardware = EvtStreamReleaseHardware;
streamCallbacks.EvtAcxStreamRun = EvtStreamRun;
streamCallbacks.EvtAcxStreamPause = EvtStreamPause;
streamCallbacks.EvtAcxStreamAssignDrmContentId = EvtStreamAssignDrmContentId;
status = AcxStreamInitAssignAcxStreamCallbacks(StreamInit, &streamCallbacks);
//
// Init RT Streaming callbacks.
//
ACX_RT_STREAM_CALLBACKS rtCallbacks;
ACX_RT_STREAM_CALLBACKS_INIT(&rtCallbacks);
rtCallbacks.EvtAcxStreamGetHwLatency = EvtStreamGetHwLatency;
rtCallbacks.EvtAcxStreamAllocateRtPackets = EvtStreamAllocateRtPackets;
rtCallbacks.EvtAcxStreamFreeRtPackets = EvtStreamFreeRtPackets;
rtCallbacks.EvtAcxStreamSetRenderPacket = EvtStreamSetRenderPacket;
rtCallbacks.EvtAcxStreamGetCurrentPacket = EvtStreamGetCurrentPacket;
rtCallbacks.EvtAcxStreamGetPresentationPosition = EvtStreamGetPresentationPosition;
status = AcxStreamInitAssignAcxRtStreamCallbacks(StreamInit, &rtCallbacks);
//
// Create the stream.
//
WDF_OBJECT_ATTRIBUTES attributes;
ACXSTREAM stream;
WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&attributes, STREAM_CONTEXT);
attributes.EvtCleanupCallback = EvtStreamContextCleanup;
attributes.EvtDestroyCallback = EvtStreamDestroy;
status = AcxRtStreamCreate(Device, Circuit, &attributes, &StreamInit, &stream);
Требования к ACX
Минимальная версия ACX: 1.0
Дополнительные сведения о версиях ACX см. в статье Обзор версий ACX.
Требования
Требование | Значение |
---|---|
Заголовок | acxstreams.h |
IRQL | PASSIVE_LEVEL |