EVT_ACX_STREAM_FREE_RTPACKETS fungsi panggilan balik (acxstreams.h)
Peristiwa EvtAcxStreamFreeRtPackets memberi tahu driver untuk membebaskan RtPackets yang dialokasikan dalam panggilan sebelumnya ke EvtAcxStreamAllocateRtPackets. Paket yang sama dari panggilan tersebut disertakan.
Sintaks
EVT_ACX_STREAM_FREE_RTPACKETS EvtAcxStreamFreeRtpackets;
void EvtAcxStreamFreeRtpackets(
ACXSTREAM Stream,
PACX_RTPACKET Packets,
ULONG PacketCount
)
{...}
Parameter
Stream
Objek ACXSTREAM mewakili aliran audio yang dibuat oleh sirkuit. Aliran terdiri dari daftar elemen yang dibuat berdasarkan elemen sirkuit induk. Untuk informasi selengkapnya, lihat ACX - Ringkasan Objek ACX.
Packets
Penunjuk ke array struktur ACX_RTPACKET yang menjelaskan lokasi dan ukuran paket yang akan dibebaskan.
PacketCount
Menentukan jumlah paket yang akan dibebaskan. Nilai yang valid adalah 1 atau 2.
Nilai kembali
Tidak ada
Keterangan
Ketika pekerjaan dengan aliran selesai, EvtAcxStreamFreeRtPackets dipanggil setelah EvtAcxStreamReleaseHardware. Ini memungkinkan fase perangkat keras rilis untuk menyelesaikan pembatalan alokasi bandwidth, membebaskan sumber daya DMA dan pembersihan terkait lainnya, terjadi sebelum buffer RT yang dialokasikan kemudian dibebaskan.
Contoh
Contoh penggunaan ditunjukkan di bawah ini.
// 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;
}
Persyaratan ACX
Versi ACX minimum: 1.0
Untuk informasi selengkapnya tentang versi ACX, lihat Gambaran umum versi ACX.
Persyaratan
Persyaratan | Nilai |
---|---|
Header | acxstreams.h |
IRQL | PASSIVE_LEVEL |
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk