DirectShow下的视频显示窗体

本文详细介绍了DirectShow下显示视频的三种过滤器:Video Renderer、VMR-7和VMR-9,重点讲解了VMR-9的高性能特性。讨论了窗体模式和非窗体模式的视频显示,以及如何设置视频窗口,特别是在非窗体模式下配置VMR的步骤。同时,文章提到了处理窗体消息的方法,如WM_PAINT、WM_DISPLAYCHANGE和WM_SIZE,以确保视频显示的正确性。
摘要由CSDN通过智能技术生成
用Google搜索更多信息
Google


显示视频

DirectShow 提供了如下过滤器来显示视频:

l         Video Renderer 过滤器. 该过滤器可用于所有的支持DirectX的平台,它对平台没有其它特殊的要求。可以是它,或GDI来显示视频。它是在WindowsXP之前操作系统的默认视频显示过滤器。

l         Video Mixing Renderer Filter 7 (VMR-7). VMR-7可用于WindowsXP操作系统,并且是该系统下的默认视频显示过滤器。与老的视频显示过滤器相比,它具有一些更强大的性能,包括采用插件模式来控制DirectShow显示。

l         Video Mixing Renderer Filter 9 (VMR-9). VMR-9是一个更新的视频混合显示过滤器,它采用了Direct3D来显示。它可用于所有的支持DirectX的平台。它不是默认的显示过滤器,因为它与其它的显示过滤器相比,对系统要求更高。

 

一般来说,在视频显示应用上,VMR-9是首选。因为,它使用了最新的图像API,并且提供了最好的性能。

 

窗体模式和非窗体模式

DirectShow视频显示可以选择在窗体模式或者非窗体模式下进行。

l         在窗体模式下,视频将创建一个它自己的窗体来显示。

l         在非窗体模式下,视频可以自己在你程序的一个窗口上显示,而不让视频自己区创建窗体来显示。

 Video Renderer过滤器只支持窗体模式,VMR-7VMR-9支持这两种模式。它们默认状态是窗体模式。

设置视频窗口

   在窗体模式下,视频将创建一个窗口,然后在该窗口上显示视频。大多数情况下,你可能想要把该窗口绑定到你的应用程序中。通过使用IVideoWindow接口,可以设置视频窗口的类型和位置。

       在开始播放前,在过滤器图表管理器中去查找IVideoWindow接口:

IVideoWindow *pVidWin = NULL;

pGraph->QueryInterface(IID_IVideoWindow, (void **)&g_pVidWin);

调用IVideoWindow::put_Owner方法去处理你应用程序的窗体。该方法提供了一个OAHWND类型的变量,所以要把句柄转换为该类型:

pVidWin->put_Owner((OAHWND)hwnd);

调用IVideoWindow::Put_WindowStyle来改变视频窗体的类型:

pVidWin->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS);

WS_CHILD标志设置视频窗体为一个子窗体,WS_CLIPSIBLINGS标志可以防止视频窗体在另一个子窗体的客户区内显示视频。

调用IVideoWindow::SetWindowPosition方法可以视频窗口的相对于你应用程序的客户区的位置。该方法的参数带了一个RECT参数,用它去指定视频窗口的位置。下例,让视频窗口和它父窗体的客户区想匹配。

RECT grc;

GetClientRect(hwnd, &grc);

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值