Поделиться через


Функция 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

См. также раздел