Freigeben über


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

Weitere Informationen