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 オブジェクト (「フレームワーク オブジェクトの概要」で説明)。

Circuit

このストリームが関連付けられる ACXCIRCUIT。

Attributes

さまざまなオブジェクトの値を設定するために使用される WDF_OBJECT_ATTRIBUTES を使用して定義された追加の属性: コールバックのクリーンアップと破棄、コンテキストの種類、および親オブジェクトの指定。

Config

ストリームの初期化パラメーターを定義するACXSTREAM_INIT構造体。 ACX オブジェクトの詳細については、「 ACX - ACX オブジェクトの概要」を参照してください。

Stream

新しい ACXSTREAM オブジェクトへのハンドルを受け取る場所へのポインター。

ACXSTREAM オブジェクトは、回線によって作成されたオーディオ ストリームを表します。 詳細については、「 ACX - ACX オブジェクトの概要」を参照してください。

戻り値

STATUS_SUCCESS呼び出しが成功した場合は を返します。 それ以外の場合は、適切なエラー コードを返します。 詳細については、「 NTSTATUS 値の使用」を参照してください。

注釈

ACXSTREAM が作成されると、ドライバーは 1 つ以上の ACX 要素をストリームに追加できます。 既定では、ACX 要素はアセンブリの同じ順序で接続されます。 ACXSTREAM は、1 つの ACXCIRCUIT にのみ関連付けられます。 ACX では、非ストリーミング回線で使用される基本的な ACX ストリーム オブジェクトと、ストリーミング回線で使用される ACX RealTime (RT) ストリーム オブジェクトの 2 種類のストリームがサポートされています。

AcxRtStreamCreate によって作成された ACXSTREAM を使用すると、ドライバーはストリームに関連付けられているコントロール シグナルと状態の変更を受信できます。 ACXSTREAM は、OS 間でのオーディオ データのストリーミングもサポートします。 オーディオ データのストリーミングをサポートするドライバーでは、AcxRtStreamCreate を使用して、ストリーミングをサポートする ACXSTREAM を作成する必要があります。

複数のドライバー間で複数の ACXCIRCUIT から作成されたエンドポイントの場合、ストリーミング ピンをホストする ACXCIRCUIT は ACX RT Streamを作成し、エンドポイント内の他の 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 バージョンの概要」を参照してください。

要件

要件
Header acxstreams.h
IRQL PASSIVE_LEVEL

こちらもご覧ください