COutputQueue 类
[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayer、 IMFMediaEngine 和 媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
类 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 | 指定对象从队列中删除样本时发出信号的事件。 |
要求
要求 | 值 |
---|---|
标头 |
|
库 |
|