在媒体会话暂停时绘制帧

时间:2014-12-23 16:06:20

标签: direct3d ms-media-foundation

我正在使用Media Foundation框架处理自定义视频播放器。 目前,我可以使用IMFMediaSession播放,暂停,停止或更改播放速率。 我也可以使用IMFSourceReader检索单个帧。

我目前能够将帧(IMFSample)渲染到窗口区域(HWND),但仅限于媒体会话停止时。 我的目标是能够在媒体会话暂停时呈现框架。 (=使用源阅读器而不是媒体会话进行帧步进)

我使用GetDC,CreateBitmap,SelectObject和BitBlt来渲染我的帧。 我尝试使用directd3d接口用纯色填充它(我对direct3d很新,所以遵循基本教程)但它没有用。 这就是我所做的:使用MR_VIDEO_ACCELERATION_SERVICE检索IDirect3DDeviceManager9,执行OpenDeviceHandle,LockDevice,Clear,Begin / EndScene和Present。

这些调用都没有失败,但我怀疑EVR仍在绘制最后一帧。 基本上,我希望EVR在我想要时停止重新绘制它的框架,当然,我需要重新启用它的绘制过程。

知道怎么做吗? 感谢

1 个答案:

答案 0 :(得分:0)

我终于开始工作了。 如果您有兴趣,请执行以下操作:

  • 使用MFGetService从媒体会话中检索IMFVideoDisplayControl和IMFVideoMixerBitmap
  • 设置MFVideoAlphaBitmap结构并将其提供给IMFVideoMixerBitmap :: SetAlphaBitmap(在专用的MSDN页面上有一个工作示例)
  • 调用IMFVideoDisplayControl :: RepaintVideo来更新输出

要隐藏以前的内容,请不要设置alpha以使其不透明。 调用IMFVideoMixerBitmap :: ClearAlphaBitmap以获取以前的内容。

瞧!