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 |