AcxRtStreamCreate 函数 (acxstreams.h)

AcxRtStreamCreate 创建 OS 用于流式传输音频数据的 ACX RTStream 音频流。

语法

NTSTATUS AcxRtStreamCreate(
  WDFDEVICE              Device,
  ACXCIRCUIT             Circuit,
  PWDF_OBJECT_ATTRIBUTES Attributes,
  PACXSTREAM_INIT        *Config,
  ACXSTREAM              *Stream
);

参数

Device

与指定的 ACXCIRCUIT 及其流关联的 WDFDEVICE 对象(Framework 对象摘要中所述)。

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) 流对象。

AcxRtStreamCreate 创建的 ACXSTREAM 将允许驱动程序接收与流关联的控制信号和状态更改。 ACXSTREAM 还支持向/从 OS 流式传输音频数据。 支持流式传输音频数据的驱动程序应使用 AcxRtStreamCreate 创建支持流式处理的 ACXSTREAM。

对于跨多个驱动程序从多个 ACXCIRCUIT 创建的终结点,承载流式传输引脚的 ACXCIRCUIT 将创建 ACX RT 流,而终结点中的其他 ACXCIRCUIT 将创建非 RT ACX 流。

下面显示了 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

另请参阅