打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Enhanced Video Render在Directshow中的使用

1基本性能

EVR 可以混和 16 video 串流到使用者屏幕上, 其中的一個 输入串流当作基底的 reference stream. 其他的串流称为 substreams 而被混和到 reference stream  上面.所有 substreams 都可以为每一個 bit 設定透明资讯 ( per-pixel transparency),   reference stream 不行. 基本上, EVR 使用了一个混合器 mixer 将所有的串流混合到一個显示表面, mixer 的混合输出就是最后的 输出 frame.接着, 由一个称为 presenter 的物件接手, 把最后的 frame显示出來.

2EVR  VMR 的差异

1. EVR 不支持 windowed mode. 所以程式中不用设定一律 windowless

2. EVR 沒有 renderless mode, 要写自己的 presenter

3. EVR 沒有 mixing mode 的设定, 因为 它永远会建立 mixer.

如果只是想执行, 則使用者只要安裝 .Net Framework 3.0 以上的版本, 若你想开发 EVR程序, 那么你将需要 Windows SDK for Windows Vista (请放心, XP 的使用者也能编译)

3最简单使用 Enhanced Video Render 例子

------------------------------------- code ----------------------------------

//  加入新建立 Enhanced Video Render 到你的 Graph  
hr = AddFilterByCLSID( pBuilder, CLSID_EnhancedVideoRenderer,_T("Enhanced            Video Render"), &m_pVR ); 
if(FAILED(hr))

{ 
       MessageBox(NULL,_T("
EVR fail"),_T("info"),MB_OK); 
}

// Step 2: 設定顯示方式 
//   a.
取得 GetService 工具物件 
CComPtr<IMFGetService> pGetService = NULL; // include mfidl.h 
hr = m_pVR->QueryInterface(__uuidof(IMFGetService), (void**)&pGetService); 
if(FAILED(hr)){ 
    MessageBox(NULL,_T("IMFGetService fail"),_T("info"),MB_OK); 
    return hr; 
} 
//   b. 利用工具物件取得 Video Display Control 
CComPtr<
IMFVideoDisplayControl> m_pVDC=NULL;   // include evr.h 
hr=pGetService->GetService(MR_VIDEO_RENDER_SERVICE,__uuidof(IMFVideoDisplayControl),(void**)&m_pVDC); 
if(FAILED(hr)){ 
    MessageBox(NULL,_T("GetService fail::The object does not support the service."),_T("info"),MB_OK); 
    return hr; 
} 
//    c.  指定顯示的視窗 
hr=m_pVDC->SetVideoWindow(hWnd); 
if(FAILED(hr)){ 
    MessageBox(NULL,_T("SetVideoWindow fail::
EVR"),_T("info"),MB_OK); 
    return hr; 
}

//     d. 指定串流顯示模式 
hr=m_pVDC->SetAspectRatioMode(MFVideoARMode_None); 
if(FAILED(hr)){ 
    MessageBox(NULL,_T("SetAspectRatioMode fail::
EVR"),_T("info"),MB_OK); 
    return hr; 
}

------------------------------------- end of code ----------------------------------

設定串流顯示位置

RECT recDec=... 
hr=m_pVDC->SetVideoPosition(NULL,&recDec);//
設定顯示位置

取得目前正在播放的影像

   BITMAPINFOHEADER hdr; // 回傳的 BMP 資訊 
    DWORD               dwSize; //
資料長度 
    LONGLONG TimeStamp;

    hdr.biSize=sizeof(BITMAPINFOHEADER); 
    hr=m_pVDC->GetCurrentImage(&hdr,&lpDib,&dwSize,&TimeStamp);

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
让她/他每天一打开电脑就能想起你!
invoke 错误
2HUAWEI Mate 20 X快速指南
MFC 加载 和显示图片的几个函数与例子 ,可以显示任何图片
vc++访问javascript(3)
交换二叉树所有节点的左右子树
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服