EVT_ACX_STREAM_FREE_RTPACKETS función de devolución de llamada (acxstreams.h)

El evento EvtAcxStreamFreeRtPackets indica al controlador que libere los RtPackets asignados en una llamada anterior a EvtAcxStreamAllocateRtPackets. Se incluyen los mismos paquetes de esa llamada.

Sintaxis

EVT_ACX_STREAM_FREE_RTPACKETS EvtAcxStreamFreeRtpackets;

void EvtAcxStreamFreeRtpackets(
  ACXSTREAM Stream,
  PACX_RTPACKET Packets,
  ULONG PacketCount
)
{...}

Parámetros

Stream

Un objeto ACXSTREAM representa una secuencia de audio creada por un circuito. La secuencia se compone de una lista de elementos creados en función de los elementos del circuito primario. Para obtener más información, vea ACX : resumen de objetos ACX.

Packets

Puntero a una matriz de estructuras de ACX_RTPACKET que describe la ubicación y el tamaño de los paquetes que se van a liberar.

PacketCount

Especifica el número de paquetes que se van a liberar. Los valores válidos son 1 o 2.

Valor devuelto

None

Observaciones

Cuando se completa el trabajo con la secuencia, se llama a EvtAcxStreamFreeRtPackets después de EvtAcxStreamReleaseHardware. Esto permite que la fase de hardware de versión termine de desasignar el ancho de banda, liberar recursos DMA y cualquier otra limpieza asociada, antes de liberar los búferes RT asignados.

Ejemplo

A continuación se muestra el uso de ejemplo.

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

Requisitos de ACX

Versión mínima de ACX: 1.0

Para obtener más información sobre las versiones de ACX, consulte Introducción a la versión de ACX.

Requisitos

Requisito Valor
Header acxstreams.h
IRQL PASSIVE_LEVEL

Consulte también