Freigeben über


EVT_ACX_STREAM_FREE_RTPACKETS Rückruffunktion (acxstreams.h)

Das EvtAcxStreamFreeRtPackets Ereignis teilt dem Treiber mit, die RtPackets freizuweisen, die in einem vorherigen Aufruf von EvtAcxStreamAllocateRtPackets zugeordnet wurden. Die gleichen Pakete aus diesem Anruf 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 von einem Schaltkreis erstellten Audiodatenstrom dar. Der Datenstrom besteht aus einer Liste von Elementen, die basierend auf den Elementen des übergeordneten Schaltkreises erstellt wurden. Weitere Informationen finden Sie unter ACX – Zusammenfassung von ACX Objects.

Packets

Ein Zeiger auf ein Array von ACX_RTPACKET Strukturen, das den Speicherort und die Größe der zu freigebenden Pakete beschreibt.

PacketCount

Gibt die Anzahl der Pakete an, die freigegeben werden sollen. Gültige Werte sind 1 oder 2.

Rückgabewert

Nichts

Bemerkungen

Wenn die Arbeit mit dem Datenstrom abgeschlossen ist, wird EvtAcxStreamFreeRtPackets nach EvtAcxStreamReleaseHardwareaufgerufen. Dadurch kann die Releasehardwarephase die Zuordnung von Bandbreite beenden, DMA-Ressourcen und alle anderen zugehörigen Bereinigungen freigeben, bevor die zugeordneten RT-Puffer freigegeben werden.

Beispiel

Die Beispielverwendung wird unten gezeigt.

    // 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

Mindestens ACX-Version: 1.0

Weitere Informationen zu ACX-Versionen finden Sie unter ACX-Versionsübersicht.

Anforderungen

Anforderung Wert
Header- acxstreams.h
IRQL- PASSIVE_LEVEL

Siehe auch