EVT_ACX_STREAM_RELEASE_HARDWARE 콜백 함수(acxstreams.h)

EvtAcxStreamReleaseHardware 이벤트는 드라이버에 스트림에 할당된 하드웨어를 해제하고 스트림을 중지 상태로 전환하도록 지시합니다.

구문

EVT_ACX_STREAM_RELEASE_HARDWARE EvtAcxStreamReleaseHardware;

NTSTATUS EvtAcxStreamReleaseHardware(
  ACXSTREAM Stream
)
{...}

매개 변수

Stream

ACXSTREAM 개체는 회로에서 만든 오디오 스트림을 나타냅니다. 스트림은 부모 회로의 요소를 기반으로 만든 요소 목록으로 구성됩니다. 자세한 내용은 ACX - ACX 개체 요약을 참조하세요.

반환 값

호출이 성공하면 를 반환합니다 STATUS_SUCCESS . 그렇지 않으면 적절한 오류 코드를 반환합니다. 자세한 내용은 NTSTATUS 값 사용을 참조하세요.

설명

AcxStream은 다양한 상태를 지원합니다. 이러한 상태는 오디오가 흐르는 경우(실행 상태), 오디오가 흐르지 않지만 오디오 하드웨어가 준비됨(PAUSE 상태) 또는 오디오가 흐르지 않고 오디오 하드웨어가 준비되지 않음(STOP 상태)을 나타냅니다.

EvtAcxStreamReleaseHardware 이벤트는 스트림 상태를 일시 중지 상태에서 중지 상태로 전환합니다. 드라이버는 이 이벤트에서 스트리밍에 할당된 하드웨어 리소스(예: DMA 엔진)를 해제해야 합니다. 스트림이 중지 상태가 되면 드라이버는 EvtAcxStreamPrepareHardware 이벤트를 수신하여 Pause 상태로 전환하거나 ACXSTREAM 개체가 제거될 수 있습니다.

ACX 이벤트는 이 표에 설명된 대로 KS 상태와 유사합니다.

시작 상태 끝 상태 호출된 ACX 드라이버 이벤트 참고
STOP 취득 PrepareHardware 드라이버가 하드웨어 할당 및 준비를 수행합니다.
취득 일시 중지 (통화 없음)
일시 중지 실행 실행
실행 일시 중지 일시 중지
일시 중지 취득 (통화 없음)
취득 STOP ReleaseHardware 드라이버가 하드웨어 할당을 해제합니다.

스트림 작업이 완료되면 EvtAcxStreamFreeRtPackets 가 EvtAcxStreamReleaseHardware 다음에 호출됩니다. 이렇게 하면 릴리스 하드웨어 단계가 할당된 RT 버퍼를 해제하기 전에 대역폭 할당 취소를 완료하고 DMA 리소스 및 기타 관련 정리를 해제할 수 있습니다.

메모리 정리

스트림 리소스의 삭제는 드라이버의 스트림 컨텍스트 정리(삭제 안 됨)에서 수행할 수 있습니다. 개체의 컨텍스트에서 공유되는 모든 항목의 삭제는 콜백을 삭제하지 않습니다. 이 지침은 모든 ACX 개체에 적용됩니다.

삭제 콜백은 알 수 없는 마지막 참조가 사라진 후에 호출됩니다.

스트림의 정리 콜백은 핸들이 닫혀 있을 때 호출됩니다. 이에 대한 한 가지 예외는 드라이버가 콜백에서 스트림을 만든 경우입니다. ACX가 스트림 만들기 작업에서 반환하기 직전에 스트림 브리지에 이 스트림을 추가하지 못한 경우 스트림은 비동기적으로 취소되고 현재 스레드는 create-stream 클라이언트에 오류를 반환합니다. 스트림에는 이 시점에서 할당된 mem 할당이 없어야 합니다.

예제

사용 예제는 다음과 같습니다.

    ACX_STREAM_CALLBACKS streamCallbacks;
    ACX_STREAM_CALLBACKS_INIT(&streamCallbacks);
    streamCallbacks.EvtAcxStreamReleaseHardware = EvtStreamReleaseHardware;
    ...
    status = AcxStreamInitAssignAcxStreamCallbacks(StreamInit, &streamCallbacks);
PAGED_CODE_SEG
NTSTATUS
EvtStreamReleaseHardware(
    _In_ ACXSTREAM Stream
    )
{
    PSTREAM_CONTEXT ctx;
    NTSTATUS        status;

    PAGED_CODE();

    ctx = GetStreamContext(Stream);

    status = ReleaseStreamHardware(Stream);

    ctx->StreamState = AcxStreamStateStop;

    return status;
}

ACX 요구 사항

최소 ACX 버전: 1.0

ACX 버전에 대한 자세한 내용은 ACX 버전 개요를 참조하세요.

요구 사항

요구 사항
헤더 acxstreams.h
IRQL PASSIVE_LEVEL

추가 정보