CBaseRenderer 类
[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayer、 IMFMediaEngine 和 音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
类 CBaseRenderer
是用于实现呈现器筛选器的基类。 它支持一个由 CRendererInputPin 类实现的输入引脚。 若要使用此类,请声明继承 的 CBaseRenderer
派生类。 派生类至少必须实现以下方法,这些方法在基类中声明为纯虚拟:
- CBaseRenderer::CheckMediaType:接受或拒绝建议的媒体类型。 筛选器在引脚连接过程中调用此方法。
- CBaseRenderer::D oRenderSample:呈现示例。 筛选器针对它在运行时接收的每个示例调用此方法。
基类处理状态更改和同步问题。 它还计划用于呈现的示例,尽管它不实现任何质量控制措施。 基类还声明了多个“处理程序”方法。 这些是筛选器在流式处理过程中的特定点调用的方法。 它们在基类中不执行任何操作,但派生类可以重写它们。 在下表中,它们列在“公共方法:处理程序”标题下。
CBaseRenderer::OnReceiveFirstSample 处理程序应具有特殊的提及。 如果在筛选器暂停时收到示例,筛选器将调用此方法。 如果图形从“已停止”切换到“已暂停”,或者在暂停时查找图形,则可能会发生这种情况。 视频呈现器通常使用示例来显示静止帧。 当筛选器从暂停切换到正在运行时,它会将相同的示例发送到 CBaseRenderer::D oRenderSample 方法,作为流中的第一个示例。
类CBaseRenderer
通过 CRendererPosPassThru 对象公开 IMediaSeeking 和 IMediaPosition 接口。 它将所有搜寻请求传递到下一个筛选器上游。
计划
当上游筛选器调用输入引脚的 IMemInputPin::Receive 方法来传递示例时,引脚会将此调用传递给筛选器的 CBaseRenderer::Receive 方法。 筛选器会删除示例,立即呈现它,或者计划它进行呈现。
如果示例没有时间戳,或者没有可用的参考时钟,筛选器将立即呈现示例。 否则,筛选器会调用 CBaseRenderer::ShouldDrawSampleNow 方法来确定要执行的操作。 默认情况下,根据示例的时间戳来计划该示例。 派生类可以替代 ShouldDrawSampleNow 以支持质量控制。
为了计划示例,筛选器调用 IReferenceClock::AdviseTime 方法,该方法创建建议请求。 然后 ,Receive 方法会阻止,直到计划的时间或筛选器更改状态。 阻止会阻止上游筛选器在呈现当前样本之前传递更多样本。
当上游筛选器调用 IPin::EndOfStream 方法以向流结束发出信号时,筛选器会将EC_COMPLETE事件发送到筛选器图管理器。 筛选器在发送事件之前等待当前样本的停止时间。
受保护的成员变量 | 说明 |
---|---|
m_bAbort | 指示是否停止呈现并拒绝进一步示例的标志。 |
m_bEOS | 指示是否已到达流结束的标志。 |
m_bEOSDelivered | 指示筛选器是否已发布EC_COMPLETE事件的标志。 |
m_bInReceive | 指示筛选器是否正在处理 接收 调用的标志。 |
m_bRepaintStatus | 启用或禁用重绘事件的标志。 |
m_bStreaming | 指示筛选器是否为流数据的标志。 |
m_dwAdvise | 计划呈现的计时器事件的标识符。 |
m_EndOfStreamTimer | 计时器事件标识符,用于计划EC_COMPLETE通知。 |
m_evComplete | 状态转换完成时发出信号的事件。 |
m_InterfaceLock | 筛选器状态锁。 |
m_ObjectCreationLock | 锁定以保护在筛选器内创建对象。 |
m_pInputPin | 指向筛选器的输入引脚的指针。 |
m_pMediaSample | 指向当前媒体示例的指针。 |
m_pPosition | 帮助程序对象,用于上游传递 seek 命令。 |
m_pQSink | 指向接收质量控制消息的 对象的指针。 |
m_RendererLock | 流式处理锁。 |
m_RenderEvent | 用于计划呈现的事件。 |
m_SignalTime | 当前样本的停止时间。 |
m_ThreadSignal | 用于释放流式处理线程的事件。 |
公共方法 | 说明 |
CancelNotification | 取消计划呈现的计时器事件。 虚拟。 |
CBaseRenderer | 构造函数方法。 |
~CBaseRenderer | 析构函数方法。 |
GetMediaPositionInterface | 检索筛选器的 IMediaPosition 和 IMediaSeeking 接口指针。 虚拟。 |
GetPin | 检索图钉。 虚拟。 |
GetPinCount | 检索引脚数。 虚拟。 |
GetSampleTimes | 从样本中检索时间戳。 虚拟。 |
OnDisplayChange | 将 EC_DISPLAY_CHANGED 事件发布到筛选器图管理器。 |
PrepareReceive | 准备呈现示例。 虚拟。 |
接收 | 接收流中的下一个媒体示例。 虚拟。 |
呈现 | 呈现示例。 虚拟。 |
ScheduleSample | 计划用于呈现的示例。 虚拟。 |
SendNotifyWindow | 通知视频窗口句柄的上游筛选器。 |
SendRepaint | 将重绘事件发送到筛选器关系图管理器。 |
SetMediaType | 在设置引脚的媒体类型时调用。 虚拟。 |
SignalTimerFired | 清除用于计划呈现的计时器标识符。 |
SourceThreadCanWait | 保留或释放流式处理线程。 虚拟。 |
WaitForReceiveToComplete | 等待 CBaseRenderer::Receive 方法完成。 |
WaitForRenderTime | 等待当前示例的演示时间。 虚拟。 |
公共方法:访问器方法 | 说明 |
ClearPendingSample | 释放当前示例。 虚拟。 |
GetCurrentSample | 检索当前示例。 虚拟。 |
GetRealState | 检索筛选器状态。 |
GetRenderEvent | 检索计划呈现的事件。 |
HaveCurrentSample | 确定筛选器是否具有样本。 虚拟。 |
IsEndOfStream | 查询是否已收到流结束通知。 |
IsEndOfStreamDelivered | 查询EC_COMPLETE事件是否已传递到筛选器图管理器。 |
IsStreaming | 查询筛选器是否为流式处理数据。 |
SetAbortSignal | 设置一个标志,该标志指示是否停止呈现并拒绝进一步的样本。 |
SetRepaintStatus | 启用或禁用重绘事件。 |
公共方法:State-Change方法 | 说明 |
活动 | 当状态切换为已暂停或正在运行时调用。 虚拟。 |
BeginFlush | 开始刷新操作。 虚拟。 |
BreakConnect | 从连接释放输入引脚。 虚拟。 |
CheckReady | 查询状态转换是否已完成。 |
CompleteConnect | 完成输入引脚与另一个引脚的连接。 虚拟。 |
CompleteStateChange | 确定到暂停状态的转换是否完成。 虚拟。 |
EndFlush | 结束刷新操作。 虚拟。 |
非活动 | 在状态切换为停止时调用。 虚拟。 |
NotReady | 指示状态转换尚未完成。 |
准备 | 指示状态转换已完成。 |
StartStreaming | 当筛选器切换到运行状态时启动流式处理。 虚拟。 |
停止流式处理 | 当筛选器退出运行状态时停止流式处理。 虚拟。 |
公共方法:流结束方法 | 说明 |
EndOfStream | 通知筛选器输入引脚收到了流结束通知。 虚拟。 |
NotifyEndOfStream | 将 EC_COMPLETE 事件发布到筛选器关系图管理器。 |
ResetEndOfStream | 重置流结束标志。 |
ResetEndOfStreamTimer | 取消计划EC_COMPLETE通知的计时器。 虚拟。 |
SendEndOfStream | 如果已到达流结束,则为筛选器图管理器计划EC_COMPLETE事件。 虚拟。 |
TimerCallback | 流结束计时器事件的回调方法。 |
公共方法:处理程序 | 说明 |
OnReceiveFirstSample | 当筛选器在暂停时收到样本时调用。 虚拟。 |
OnRenderEnd | 在呈现示例后调用。 虚拟。 |
OnRenderStart | 在呈现即将开始时调用。 虚拟。 |
OnStartStreaming | 在筛选器开始流式处理时调用。 虚拟。 |
OnStopStreaming | 在筛选器停止流式处理时调用。 虚拟。 |
OnWaitEnd | 在筛选器完成等待示例的呈现时间时调用。 虚拟。 |
OnWaitStart | 当筛选器开始等待示例的呈现时间时调用。 虚拟。 |
PrepareRender | 在筛选器呈现示例之前调用。 虚拟。 |
ShouldDrawSampleNow | 确定如何计划示例进行呈现。 虚拟。 |
纯虚拟方法 | 说明 |
CheckMediaType | 确定筛选器是否接受特定媒体类型。 |
DoRenderSample | 呈现示例。 |
IMediaFilter 方法 | 说明 |
GetState | 检索筛选器的状态 (运行、停止或暂停) 。 |
暂停 | 暂停筛选器。 |
运行 | 运行筛选器。 |
停止 | 停止筛选器。 |
IBaseFilter 方法 | 说明 |
FindPin | 检索具有指定标识符的引脚。 |
要求
要求 | 值 |
---|---|
标头 |
|
库 |
|