directX视频播放------手动连接

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 here
	CoInitialize(NULL);
    HRESULT	hr = 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;
					  }
				  }
				  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);
 /// 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();
}
时间: 2024-08-26 15:24:53

directX视频播放------手动连接的相关文章

CentOS7下,安装网卡驱动,命令行手动连接WIFI指导

买了一个无线网卡,型号为TL-WN823N,谁知道在CentOS下没有驱动 于是开始了无线上网的漫漫征途 经历了无数个坑啊,解决了一个又一个的问题啊 到最后ping通的时候成就感简直爆棚 文章结构简介如下: 1.安装内核工具:kernel-devel 2.搜索网卡型号,安装网卡驱动 3.下载网络工具,连上无线网络 1.安装内核工具 装驱动前需要包:kernel-devel,gcc 一开始,我先安装驱动,发现编译过不了,一看报错信息,说是/usr/scr/kernel里面没有对应文件内核文件 于是

Ubuntu手动设置DSL连接

在安装完Ubuntu之后,发现图形界面的DSL连接不管用了,郁闷了好几天,想想移动每个月120个小时的流量岂不是白白浪费了.正当我想重返Windows系统的时候,却发现了手动设置连接DSL的好方法,感谢冻仁的笔记的作者(我想应该是叫冻仁吧),下面讲讲详细的方法. 0x00:安装pppoeconf sudo apt-get install pppoeconf 0x01:开始手动设置 sudo pppoeconf 打开后看到如下界面: 1. 侦测所有网卡 2. 常用选项修改 3. 输入DSL用户名

DirectX:在graph自动连线中加入自定义filter

为客户提供的视频播放的filter的测试程序中,采用正向手动连接的方式(http://blog.csdn.net/mao0514/article/details/40535791),由于不同的视频压缩格式,导致这种方式的缺点是不能及时的播放任意的视频文件.现在,采用在自动连线的graph中添加自己的filter: 过程如下: 1. 构建自动连线graph: 2. 在graph中查找render filter: 3.在renderf ilter上查找输入m_r_in_pin的上位连接m_n_out

Python wifi掉线重连接

原理很简单,通过python执行dos命令 : ping 和 netsh 需要用到os和time模块 代码如下: >>> import os >>> print 'wifi掉线' wifi掉线 >>> import time >>> while True: ... status = os.system("ping -c 1 www.baidu.com") ... if status == 1: ... print

kali linux 系列教程之metasploit 连接postgresql可能遇见的问题

kali linux 系列教程之metasploit 连接postgresql可能遇见的问题 文/玄魂   目录 kali linux 下metasploit 连接postgresql可能遇见的问题................................ 1 前言............................................................................................................... 1

kali linux 系列教程之metasploit 连接postgresql

前言 由于kali linux的版本不同,默认情况下对metasploit和postgresql的配置也不相同,导致我们启动metasploit后连接postgresql数据库会遇到无法连接的情况.下面就三种情况,简单的给大家描述一下,以及遇到问题的解决方案. 理想状态 理想情况下,只需要两步即可. 启动postgresql service postgresql start 启动mestasploit service metasploit start 在metasploit中输入db_statu

【Win10 应用开发】扫描和连接Wi-fi网络

老周今天带大家去“扫雷”了,别当真,是扫描并连接指定无线网络,时尚一点叫Wi-fi. 所以,今天的任务要求你的设备至少有1张无线网卡,目前老周没看到过有N张无线网卡的设备.像笔记本.平板等设备都可以,当然最好是笔记本,因为你得编程啊:不然你捧着一台平板写代码,虽然好玩,但速度慢.不过,你的板子如果有键盘的话就没事. 哦,想起来了,在开始今天的任务前,老周先给大家讲个故事. 话说公元2015年6月末,微软发布了面向build 10158的SDK,你可以下载安装,你也可以不装,你可以在现有的1006

禁止Visual Studio启动时自动连接TFS服务器

在默认设置情况下,Visual Studio启动时,会自动连接上次打开过的TFS服务器.这种设计能够提高开发人员的工作效率,避免每次手动连接TFS服务器. 但是在某些情景中,也会给人造成不必要的麻烦,例如开发人员的计算机不能连接到TFS服务器,而VS则去自动连接,造成VS卡机. 开发人员可以利用下面的设置禁止VS自动连接TFS: 1. 在安装了VS的计算机上使用管理员身份打开注册表Regedit.exe 2. 导航的Visual Studio安装的目录,例如我的版本是VS 2015,注册表路径

Ubuntu设置宽带连接DSL

安装pppoeconf sudo apt install pppoeconf 手动设置 sudo  pppoeconf 输入DSL用户名&密码(中间全部确认就可以) 1.手动连接 pon dsl-provider 2.手动断开 poff dsl-provider 3.查看状态 plog 原文地址:https://www.cnblogs.com/monkpy/p/8331666.html