directX视频播放------手动连接
来源:互联网 发布:手机淘宝找不到店铺 编辑:程序博客网 时间:2024/05/11 09:23
IGraphBuilder *pigb = NULL;IMediaControl *pimc = NULL;IMediaEventEx *pimex = NULL;IVideoWindow *pivw = NULL;IMediaSeeking *pims = NULL;
ICaptureGraphBuilder2 * g_pCaptureBuilder = NULL;
IBaseFilter *pF = 0; void CTestFilterDlg::OnButton4() {// TODO: Add your control notification handler code hereCoInitialize(NULL); HRESULThr = CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC_SERVER,IID_IGraphBuilder,(void **)&pigb); hr = CoCreateInstance (CLSID_CaptureGraphBuilder2 , NULL, CLSCTX_INPROC, IID_ICaptureGraphBuilder2, (void **) &g_pCaptureBuilder); pigb->QueryInterface(IID_IMediaControl, (void **)&pimc); pigb->QueryInterface(IID_IMediaEventEx, (void **)&pimex); pigb->QueryInterface(IID_IMediaSeeking, (void **)&pims); pigb->QueryInterface(IID_IVideoWindow, (void **)&pivw); hr = g_pCaptureBuilder->SetFiltergraph(pigb); // avi-source //////////////////////////////////////////////////////////// const GUID CLSID_AviSource={0xCEA8DEFF,0x0AF7,0x4DB9,{0x9A,0x38,0xFB,0x3C,0x3A,0xEF,0xC0,0xDE}}; hr = CoCreateInstance(CLSID_AviSource, 0, CLSCTX_INPROC_SERVER, IID_IBaseFilter, reinterpret_cast<void**>(&pF)); hr = pigb->AddFilter(pF,L"SOURCE FILTER"); IFileSourceFilter *pSF = NULL; hr = pF->QueryInterface(IID_IFileSourceFilter, (void**)&pSF); if (SUCCEEDED(hr)) { pSF->Load(L"F:\\FFOutput\\ff640480.avi", NULL); pSF->Release(); } IPin *pOut_Source = 0; IPin *pPin; if(SUCCEEDED(hr)) { IEnumPins *pEnum;// IPin *pPin; hr = pF->EnumPins(&pEnum); if (SUCCEEDED(hr)) { /* while(pEnum->Next(1, &pPin, 0) == S_OK) { PIN_DIRECTION pinDirThis; pPin->QueryDirection(&pinDirThis); if (PINDIR_OUTPUT == pinDirThis) { break; } }*/ hr = g_pCaptureBuilder->FindPin(pF,PINDIR_OUTPUT,NULL,NULL,FALSE,0,&pPin); pEnum->Release(); } } pOut_Source= pPin; if (hr) { MessageBox("ERR RENDERAVI!"); }// ffshow-decoder ///////////////////////////////////////////////// IBaseFilter *paviDecoder;//---871E-AB91661A4EF7 const GUID CLSID_Decoder={0x04FE9017,0xF873,0x410E,{0x87,0x1e,0xaB,0x91,0x66,0x1a,0x4e,0xf7}}; hr = CoCreateInstance(CLSID_Decoder,NULL,CLSCTX_ALL,IID_IBaseFilter,(void **)&paviDecoder); hr = pigb->AddFilter(paviDecoder,L"ffdshow Video Decoder "); IPin *pIn_aviDecoder = 0; IPin *pOut_aviDecoder = 0; hr = g_pCaptureBuilder->FindPin(paviDecoder,PINDIR_INPUT,NULL,NULL,FALSE,0,&pIn_aviDecoder); hr = g_pCaptureBuilder->FindPin(paviDecoder,PINDIR_OUTPUT,NULL,NULL,FALSE,0,&pOut_aviDecoder);// Render filter //////////////////////////////////////// IBaseFilter *pRenderFilter; hr = CoCreateInstance(CLSID_VideoRenderer,NULL,CLSCTX_ALL,IID_IBaseFilter,(void **)&pRenderFilter); hr = pigb->AddFilter(pRenderFilter,L"ffdshow Video Render "); IPin *pIn_Render = 0; hr = g_pCaptureBuilder->FindPin(pRenderFilter,PINDIR_INPUT,NULL,NULL,FALSE,0,&pIn_Render);///// 特效filter /////////////////////////////////////////////// IBaseFilter *peffect;//---871E-AB91661A4EF7 const GUID CLSID_EFFECT={0x8b498501, 0x1218, 0x11cf,{ 0xad, 0xc4, 0x0, 0xa0, 0xd1, 0x0, 0x4, 0x1b}}; hr = CoCreateInstance(CLSID_EFFECT,NULL,CLSCTX_ALL,IID_IBaseFilter,(void **)&peffect); hr = pigb->AddFilter(peffect,L"Image effect "); IPin *pIn_peffect = 0; IPin *pOut_peffect = 0; hr = g_pCaptureBuilder->FindPin(peffect,PINDIR_INPUT,NULL,NULL,FALSE,0,&pIn_peffect); hr = g_pCaptureBuilder->FindPin(peffect,PINDIR_OUTPUT,NULL,NULL,FALSE,0,&pOut_peffect); peffect->Release(); /// Connect 连接 pin///////////////////////// hr = pigb->Connect(pOut_Source, pIn_aviDecoder); if(FAILED(hr)) { MessageBox("err17"); } hr = pigb->Connect(pOut_aviDecoder, pIn_peffect); if(FAILED(hr)) { MessageBox("err18"); } hr = pigb->Connect(pOut_peffect, pIn_Render); if(FAILED(hr)) {MessageBox("err19"); }///////显示////////////////////// HWND m_hwndScreen = m_Screen2.GetSafeHwnd(); RECT rc; hr = pivw->put_Owner((OAHWND)m_hwndScreen); hr = pivw->put_WindowStyle(WS_CHILD | WS_CLIPCHILDREN); m_Screen2.GetClientRect(&rc); hr = pivw->SetWindowPosition(0, 0, (rc.right), (rc.bottom)); hr = pivw->put_Visible(OATRUE);//*/ hr = pimc->Run(); }
0 0
- directX视频播放------手动连接
- DirectX实现视频播放
- DirectX 在对话框播放视频
- C# 视频播放器【DirectX】
- C#使用directx播放视频
- Visual C#使用DirectX实现视频播放
- 使用DirectX实现视频播放_技术
- Visual C#使用DirectX实现视频播放
- Visual C#使用DirectX实现视频播放
- C#如何使用DirectX实现视频播放
- Visual C#使用DirectX实现视频播放
- Visual C#使用DirectX实现视频播放
- C#中使用DirectX实现视频播放
- Visual C#使用DirectX实现视频播放1
- wince下用directx播放音频和视频
- wince下用directx播放音频和视频
- 用DIRECTX来做视频播放器(c#)
- 关于使用DirectX在QGraphicsView上播放视频的探索
- ORACLE 常用函数 NVL
- 一些文档链接
- Views动画 和ViewPropertyAnimator
- xml动态文件如何生成
- iOS 横竖屏
- directX视频播放------手动连接
- 杂(二): "** cannot be resolved to a type "eclipse报错及解决
- jQuery map将一个数组中的元素转换到另一个数组中
- 二维码扫描仪
- LeetCode:Populating Next Right Pointers in Each Node
- 使用Ant 实现批量打包Android应用
- C语言中的输入输出是怎样的及怎么使用怎么扩展
- Cookie/Session机制详解
- XmlTextWriter学习笔记