функция обратного вызова EVT_ACX_STREAM_FREE_RTPACKETS (acxstreams.h)
Событие EvtAcxStreamFreeRtPackets сообщает драйверу освободить RtPackets, которые были выделены в предыдущем вызове EvtAcxStreamAllocateRtPackets. Те же пакеты из этого вызова включены.
Синтаксис
EVT_ACX_STREAM_FREE_RTPACKETS EvtAcxStreamFreeRtpackets;
void EvtAcxStreamFreeRtpackets(
ACXSTREAM Stream,
PACX_RTPACKET Packets,
ULONG PacketCount
)
{...}
Параметры
Stream
Объект ACXSTREAM представляет звуковой поток, созданный каналом. Поток состоит из списка элементов, созданных на основе элементов родительского канала. Дополнительные сведения см. в разделе ACX — сводка по объектам ACX.
Packets
Указатель на массив структур ACX_RTPACKET, описывающий расположение и размер пакетов, которые необходимо освободить.
PacketCount
Указывает количество пакетов, которые необходимо освободить. Допустимые значения: 1 или 2.
Возвращаемое значение
Никакой
Замечания
После завершения работы с потоком evtAcxStreamFreeRtPackets вызывается после EvtAcxStreamReleaseHardware. Это позволяет этапу оборудования выпуска завершить очистку пропускной способности, освободить ресурсы DMA и любую другую связанную очистку, прежде чем затем освобождаются выделенные буферы RT.
Пример
Ниже показан пример использования.
// 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
минимальная версия ACX: 1.0
Дополнительные сведения о версиях ACX см. в обзоре версий ACX.
Требования
Требование | Ценность |
---|---|
заголовка | acxstreams.h |
IRQL | PASSIVE_LEVEL |