COutputQueue 类

[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayerIMFMediaEngine媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

coutputqueue

COutputQueue 实现队列来传送媒体示例。

此类使输出引脚能够以异步方式传送示例。 样本放置在队列中,工作线程将它们传送到输入引脚。 队列还可以保存指示新段、流结束通知或刷新操作的控制消息。

若要使用此类,请为筛选器上的每个输出引脚创建 一个 COutputQueue 对象。 在构造函数方法中,指定连接到该输出引脚的输入引脚。 使用此类时,输出引脚不会直接在输入引脚上调用方法。 相反,它会在 中 COutputQueue调用相应的方法,如下表所示。

Pin 方法 COutputQueue 方法
IPin::BeginFlush BeginFlush
IPin::EndFlush EndFlush
IPin::EndOfStream EOS
IPin::NewSegment NewSegment
IMemInputPin::Receive 接收
IMemInputPin::ReceiveMultiple ReceiveMultiple

(可选)可以将 对象配置为 COutputQueue 同步传送示例,而无需工作线程。 对象还可以在运行时根据输入引脚的特征决定是否使用工作线程。 有关详细信息,请参阅 COutputQueue::COutputQueue

受保护的成员变量 说明
m_pPin 指向输入引脚的 IPin 接口的指针。
m_pInputPin 指向输入引脚的 IMemInputPin 接口的指针。
m_bBatchExact 指定对象是否按确切批次提供样本的标志。
m_lBatchSize 批大小。
m_List 媒体示例队列。
m_hSem 信号灯的句柄,由线程用来等待样本。
m_evFlushComplete 刷新操作完成时发出信号的事件。
m_hThread 工作线程的句柄。
m_ppSamples 大小 为 COutputQueue::m_lBatchSize 的样本数组。
m_nBatched 当前批处理和等待处理的样本数。
m_lWaiting 当线程等待样本时具有非零值的标志。
m_bFlushing 指定对象是否正在执行刷新操作的标志。
m_bTerminate 指定线程是否应终止的标志。
m_bSendAnyway 用于替代批处理的标志。
m_hr 指示对象是否接受样本的 HRESULT 值。
m_hEventPop 每当对象从队列中删除样本时发出信号的事件。
受保护的方法 说明
InitialThreadProc 创建线程时调用 COutputQueue::ThreadProc 方法。
ThreadProc 从队列中检索样本并将其传送到输入引脚。
IsQueued 确定对象是否使用工作线程传送样本。
QueueSample 将媒体示例或控制消息排队。
IsSpecialSample 确定排队的数据是否为控制消息。
FreeSamples 释放所有挂起的样本。
NotifyThread 通知线程队列包含数据。
公共方法 说明
COutputQueue 构造函数方法。
~COutputQueue 析构函数方法。
BeginFlush 开始刷新操作。
EndFlush 结束刷新操作。
EOS 向输入引脚提供流结束调用。
SendAnyway 提供任何挂起的示例。
NewSegment 将新段传送到输入引脚。
接收 将媒体示例传送到输入引脚。
ReceiveMultiple 将一批媒体样本传送到输入引脚。
重 置 重置 对象,以便它可以接收更多数据。
IsIdle 确定对象是否正在等待数据。
SetPopEvent 指定对象从队列中删除样本时发出信号的事件。

要求

要求
标头
Outputq.h (包括 Streams.h)

Strmbase.lib (零售版本) ;
Strmbasd.lib (调试生成)