EVT_ACX_STREAM_FREE_RTPACKETS 콜백 함수(acxstreams.h)

EvtAcxStreamFreeRtPackets 이벤트는 EvtAcxStreamAllocateRtPackets에 대한 이전 호출에서 할당된 RtPackets를 해제하도록 드라이버에 지시합니다. 해당 호출의 동일한 패킷이 포함됩니다.

구문

EVT_ACX_STREAM_FREE_RTPACKETS EvtAcxStreamFreeRtpackets;

void EvtAcxStreamFreeRtpackets(
  ACXSTREAM Stream,
  PACX_RTPACKET Packets,
  ULONG PacketCount
)
{...}

매개 변수

Stream

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

Packets

해제할 패킷의 위치와 크기를 설명하는 ACX_RTPACKET 구조 체 배열에 대한 포인터입니다.

PacketCount

해제할 패킷 수를 지정합니다. 유효한 값은 1 또는 2입니다.

반환 값

없음

설명

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

예제

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

    // Init RT streaming callbacks.
    //
    ACX_RT_STREAM_CALLBACKS rtCallbacks;
    ACX_RT_STREAM_CALLBACKS_INIT(&rtCallbacks);
    rtCallbacks.EvtAcxStreamFreeRtPackets               = Dsp_EvtStreamFreeRtPackets;

    RETURN_NTSTATUS_IF_FAILED(AcxStreamInitAssignAcxRtStreamCallbacks(StreamInit, &rtCallbacks));

// Later in the code need to free the packets...
#pragma code_seg("PAGE")
VOID
Codec_EvtStreamFreeRtPackets(
    _In_ ACXSTREAM Stream,
    _In_ PACX_RTPACKET Packets,
    _In_ ULONG PacketCount
    )
{
    PCODEC_STREAM_CONTEXT ctx;
    ULONG i;
    PVOID buffer;

    PAGED_CODE();

    ctx = GetCodecStreamContext(Stream);

    for (i = 0; i < PacketCount; ++i)
    {
        if (Packets[i].RtPacketBuffer.u.MdlType.Mdl)
        {
            buffer = MmGetMdlVirtualAddress(Packets[i].RtPacketBuffer.u.MdlType.Mdl);
            IoFreeMdl(Packets[i].RtPacketBuffer.u.MdlType.Mdl);
            ExFreePool(buffer);
        }
    }

    ExFreePool(Packets);

    ctx->PacketsCount = 0;
    ctx->PacketSize = 0;
    ctx->FirstPacketOffset = 0;
}

ACX 요구 사항

최소 ACX 버전: 1.0

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

요구 사항

요구 사항
헤더 acxstreams.h
IRQL PASSIVE_LEVEL

추가 정보