Condividi tramite


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

Vedi anche