EVT_ACX_STREAM_FREE_RTPACKETS função de retorno de chamada (acxstreams.h)
O evento EvtAcxStreamFreeRtPackets instrui o driver a liberar os RtPackets alocados em uma chamada anterior para EvtAcxStreamAllocateRtPackets. Os mesmos pacotes dessa chamada estão incluídos.
Sintaxe
EVT_ACX_STREAM_FREE_RTPACKETS EvtAcxStreamFreeRtpackets;
void EvtAcxStreamFreeRtpackets(
ACXSTREAM Stream,
PACX_RTPACKET Packets,
ULONG PacketCount
)
{...}
Parâmetros
Stream
Um objeto ACXSTREAM representa um fluxo de áudio criado por um circuito. O fluxo é composto por uma lista de elementos criados com base nos elementos do circuito pai. Para obter mais informações, consulte ACX – Resumo de objetos ACX.
Packets
Um ponteiro para uma matriz de estruturas de ACX_RTPACKET que descreve o local e o tamanho dos pacotes a serem liberados.
PacketCount
Especifica o número de pacotes a serem liberados. Os valores válidos são 1 ou 2.
Retornar valor
Nenhum
Comentários
Quando o trabalho com o fluxo é concluído, EvtAcxStreamFreeRtPackets é chamado após EvtAcxStreamReleaseHardware. Isso permite que a fase de hardware de lançamento conclua a desalocação da largura de banda, liberando recursos de DMA e qualquer outra limpeza associada, para ocorrer antes que os buffers RT alocados sejam liberados.
Exemplo
O uso de exemplo é mostrado abaixo.
// 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 do ACX
Versão mínima do ACX: 1.0
Para obter mais informações sobre as versões do ACX, consulte Visão geral da versão do ACX.
Requisitos
Requisito | Valor |
---|---|
Cabeçalho | acxstreams.h |
IRQL | PASSIVE_LEVEL |