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을 만든 후 드라이버는 스트림에 하나 이상의 ACX 요소를 추가할 수 있습니다. 기본적으로 ACX 요소는 동일한 어셈블리 순서로 연결됩니다. ACXSTREAM은 ACXCIRCUIT 하나만 연결됩니다. ACX는 비 스트리밍 회로에서 사용하는 기본 ACX 스트림 개체와 스트리밍 회로에서 사용하는 ACX RealTime(RT) 스트림 개체의 두 가지 스트림 유형을 지원합니다.

AcxRtStreamCreate에서 만든 ACXSTREAM을 사용하면 드라이버가 스트림과 연결된 제어 신호 및 상태 변경을 수신할 수 있습니다. ACXSTREAM은 OS로 또는 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 버전 개요를 참조하세요.

요구 사항

요구 사항
헤더 acxstreams.h
IRQL PASSIVE_LEVEL

추가 정보