функция обратного вызова 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.
Возвращаемое значение
None
Remarks
Когда работа с потоком завершена, 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 |