EVT_ACX_STREAM_GET_CAPTURE_PACKET回调函数 (acxstreams.h)
EvtAcxStreamGetCapturePacket 告知驱动程序指示最近完全填充了哪个数据包 (从 0 开始的) ,包括驱动程序开始填充数据包时的 QPC 值。
语法
EVT_ACX_STREAM_GET_CAPTURE_PACKET EvtAcxStreamGetCapturePacket;
NTSTATUS EvtAcxStreamGetCapturePacket(
ACXSTREAM Stream,
PULONG LastCapturePacket,
PULONGLONG QPCPacketStart,
PBOOLEAN MoreData
)
{...}
参数
Stream
ACXSTREAM 对象表示线路创建的音频流。 该流由基于父线路的元素创建的元素列表组成。 有关详细信息,请参阅 ACX - ACX 对象的摘要。
LastCapturePacket
一个 值,该值指示上次捕获的数据包的位置。 这是一个从 0 开始的索引,指示已捕获的完整数据包数。
QPCPacketStart
一个 值,该值指示上次捕获的数据包的开始时间。
MoreData
如果有更多数据立即准备就绪,则返回 TRUE。 操作系统可以选择在处理数据包后立即再次调用此例程,以获取下一个数据包信息。 如果驱动程序返回 FALSE,则捕获将实时运行。
返回值
STATUS_SUCCESS
如果调用成功,则返回 。 否则,它将返回相应的错误代码。 有关详细信息,请参阅 使用 NTSTATUS 值。
注解
在从音频缓冲区读取捕获的音频数据之前,OS 会调用此例程来获取有关可用数据的信息。
数据包编号标识流中的数据包。 当为流调用 EVT_ACX_STREAM_RELEASEHARDWARE 时,这会重置为零。 该数字随着每个捕获的缓冲区而增加。 OS 可以从数据包号派生音频缓冲区中的数据包位置,也可以派生数据包相对于流开始的流位置。
OS 可能随时调用此例程。 在正常操作中,操作系统在驱动程序调用 AcxRtStreamNotifyPacketComplete 后或之前调用为 MoreData 返回 true 后调用此例程。 当 OS 调用此例程时,驱动程序可能假定 OS 已完成读取以前的所有数据包。 如果硬件捕获了足够的数据,驱动程序可能会立即将下一个完整数据包突发到音频缓冲区,并再次调用 AcxRtStreamNotifyPacketComplete。 在捕获溢出 (当操作系统读取数据的速度不够快时,) 音频驱动程序可能会删除或覆盖某些音频数据。 音频驱动程序首先删除或覆盖最早的数据。 音频驱动程序可以继续推进其内部数据包计数器,即使 OS 可能尚未读取数据。
示例
示例用法如下所示。
#pragma code_seg("PAGE")
NTSTATUS
CodecC_EvtStreamGetCapturePacket(
_In_ ACXSTREAM Stream,
_Out_ ULONG * LastCapturePacket,
_Out_ ULONGLONG * QPCPacketStart,
_Out_ BOOLEAN * MoreData
)
{
PCODEC_STREAM_CONTEXT ctx;
CCaptureStreamEngine* streamEngine = nullptr;
ULONG currentPacket;
LONGLONG qpcPacketStart;
PAGED_CODE();
ctx = GetCodecStreamContext(Stream);
// Retrieve the current packet that is being written to by the audio hardware
currentPacket = (ULONG)InterlockedCompareExchange((LONG*)&ctx->CurrentPacket, -1, -1);
qpcPacketStart = InterlockedCompareExchange64(&ctx->LastPacketStart.QuadPart, -1, -1);
// The Last capture packet is the packet before the current packet.
*LastCapturePacket = currentPacket - 1;
*QPCPacketStart = (ULONGLONG)qpcPacketStart;
*MoreData = FALSE;
return STATUS_SUCCESS;
}
ACX 要求
最低 ACX 版本: 1.0
有关 ACX 版本的详细信息,请参阅 ACX 版本概述。
要求
要求 | 值 |
---|---|
Header | acxstreams.h |
IRQL | PASSIVE_LEVEL |