EVT_ACX_STREAM_FREE_RTPACKETS funzione di callback (acxstreams.h)
L'evento EvtAcxStreamFreeRtPackets indica al driver di liberare rtPackets allocati in una chiamata precedente a EvtAcxStreamAllocateRtPackets. Sono inclusi gli stessi pacchetti di tale chiamata.
Sintassi
EVT_ACX_STREAM_FREE_RTPACKETS EvtAcxStreamFreeRtpackets;
void EvtAcxStreamFreeRtpackets(
ACXSTREAM Stream,
PACX_RTPACKET Packets,
ULONG PacketCount
)
{...}
Parametri
Stream
Un oggetto ACXSTREAM rappresenta un flusso audio creato da un circuito. Il flusso è costituito da un elenco di elementi creati in base agli elementi del circuito padre. Per altre informazioni, vedere ACX - Riepilogo degli oggetti ACX.
Packets
Puntatore a una matrice di strutture ACX_RTPACKET che descrive la posizione e le dimensioni dei pacchetti da liberare.
PacketCount
Specifica il numero di pacchetti da liberare. I valori validi sono 1 o 2.
Valore restituito
nessuno
Osservazioni
Al termine del flusso, EvtAcxStreamFreeRtPackets viene chiamato dopo EvtAcxStreamReleaseHardware. Ciò consente alla fase hardware di rilascio di completare la deallocazione della larghezza di banda, liberando risorse DMA e qualsiasi altra pulizia associata, di verificarsi prima che vengano liberati i buffer RT allocati.
Esempio
Di seguito è riportato l'esempio di utilizzo.
// 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;
}
Requisiti ACX
Versione minima DI ACX: 1.0
Per altre informazioni sulle versioni ACX, vedere Panoramica della versione di ACX.
Requisiti
Requisito | Valore |
---|---|
Intestazione | acxstreams.h |
IRQL | PASSIVE_LEVEL |