EVT_ACX_STREAM_FREE_RTPACKETS Rückruffunktion (acxstreams.h)
Das EvtAcxStreamFreeRtPackets-Ereignis weist den Treiber an, die RtPackets freizusetzen, die bei einem vorherigen Aufruf von EvtAcxStreamAllocateRtPackets zugeordnet wurden. Die gleichen Pakete aus diesem Aufruf sind enthalten.
Syntax
EVT_ACX_STREAM_FREE_RTPACKETS EvtAcxStreamFreeRtpackets;
void EvtAcxStreamFreeRtpackets(
ACXSTREAM Stream,
PACX_RTPACKET Packets,
ULONG PacketCount
)
{...}
Parameter
Stream
Ein ACXSTREAM-Objekt stellt einen audiostream dar, der von einer Verbindung erstellt wird. Der Stream besteht aus einer Liste von Elementen, die basierend auf den Elementen der übergeordneten Verbindung erstellt wurden. Weitere Informationen finden Sie unter ACX – Zusammenfassung von ACX-Objekten.
Packets
Ein Zeiger auf ein Array von ACX_RTPACKET Strukturen , das den Speicherort und die Größe der frei zu gebenden Pakete beschreibt.
PacketCount
Gibt die Anzahl der pakete an, die freigegeben werden sollen. Gültige Werte sind 1 oder 2.
Rückgabewert
Keine
Bemerkungen
Wenn die Arbeit mit dem Stream abgeschlossen ist, wird EvtAcxStreamFreeRtPackets nach EvtAcxStreamReleaseHardware aufgerufen. Dies ermöglicht es der Releasehardwarephase, die Freigabe der Bandbreite zu beenden, DMA-Ressourcen und alle anderen zugehörigen Bereinigungen freizugeben, bevor zugewiesene RT-Puffer freigegeben werden.
Beispiel
Das Beispiel für die Verwendung ist unten dargestellt.
// 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-Anforderungen
ACX-Mindestversion: 1.0
Weitere Informationen zu ACX-Versionen finden Sie unter ACX-Versionsübersicht.
Anforderungen
Anforderung | Wert |
---|---|
Header | acxstreams.h |
IRQL | PASSIVE_LEVEL |