directX播放程序
enum PLAYSTATE {Stopped, Paused, Running, Init};
PLAYSTATE g_Current=Init;
HWND      ghApp;
HINSTANCE ghInst;
HRESULT   hr;
LONG      evCode;
LONG      evParam1;
LONG      evParam2;
 //HRESULT  hr;
	IGraphBuilder *pigb  = NULL;
	IMediaControl *pimc  = NULL;
	IMediaEventEx *pimex = NULL;
	IVideoWindow  *pivw  = NULL;
	IMediaSeeking  *pims  = NULL;
   
void CTestDlg::OnPlay() 
{
//    WCHAR wFile[MAX_PATH];
	 if(g_Current == Init)
    {
		CoInitialize(NULL);
		hr = CoCreateInstance(CLSID_FilterGraph,
							  NULL,
							  CLSCTX_INPROC_SERVER,
							  IID_IGraphBuilder,
							  (void **)&pigb);
	   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 = pigb->RenderFile(L"d:\\temp\\ff.mpg", NULL);//VIDEOC1600.264
	    hr = pigb->RenderFile(L"d:\\temp\\bmw.MPG", NULL);//
//	   pimex->SetNotifyWindow((OAHWND)ghApp, IDC_BUTTON1, 0);
   
	   //
	//	 m_Screen.ModifyStyle(0, WS_CLIPCHILDREN);
		 HWND m_hwndScreen = m_Screen.GetSafeHwnd();
		RECT rc;
	//	m_hwndScreen = GetSafeHwnd();
	//  hr = pivw->put_Caption(L"123");
		hr = pivw->put_Owner((OAHWND)m_hwndScreen);
	//	hr = pivw->put_Owner((OAHWND)this->GetSafeHwnd());
		hr = pivw->put_WindowStyle(WS_CHILD | WS_CLIPCHILDREN);
		m_Screen.GetClientRect(&rc);
		//GetClientRect(&rc);
		hr = pivw->SetWindowPosition(0, 0, (rc.right), (rc.bottom));
	 }
	 if((g_Current == Init)||(g_Current == Paused))
	 {
		hr = pimc->Run();
		g_Current=Running;
		SetTimer(1,100,NULL);
	 }
}
void CTestDlg::OnPaused() 
{
	// TODO: Add your control notification handler code here
	 if(g_Current == Running)
    {
        if (SUCCEEDED(pimc->Pause()))
            g_Current = Paused;
		KillTimer(1);
    }
	// 释放所有接口
/*	pimc->Release();
	pimex->Release();
	pigb->Release();
	CoUninitialize();
	*/
}
void CTestDlg::OnStop() 
{
	// TODO: Add your control notification handler code here
	if((g_Current == Running)||(g_Current == Stopped))
	{
	    hr = pimc->Stop();
			KillTimer(1);
		g_Current = Init;
		pimc->Release();
		pimex->Release();
		pigb->Release();
		CoUninitialize();
	}
}
void CTestDlg::OnSetRate() 
{   
	if (pims)
	{    
		rate++;
		if(rate==4)
		{
			rate=1;
			
		}
		pims->SetRate(rate);
		CString str;
		str.Format("快进>> X %d",rate);
		(GetDlgItem(IDC_BUTTON2))->SetWindowText(str);
	}
//	pivw->GetCurrentImage(&lpCurrImage) ;
}
void CTestDlg::OnSavePic() 
{
	// TODO: Add your control notification handler code here
	IBasicVideo *mBasicVideo = 0;
	if (pigb)
	{
		pigb->QueryInterface(IID_IBasicVideo, (void **)&mBasicVideo);
	}
    
	if (mBasicVideo)
	{
		long bitmapSize = 0;
		if (SUCCEEDED(mBasicVideo->GetCurrentImage(&bitmapSize, 0)))
		{
			bool pass = false;
			unsigned char * buffer = new unsigned char[bitmapSize];
			if (SUCCEEDED(mBasicVideo->GetCurrentImage(&bitmapSize, (long *)buffer)))
			{
				BITMAPFILEHEADER	hdr;
				LPBITMAPINFOHEADER	lpbi;
				
				lpbi = (LPBITMAPINFOHEADER)buffer;
				
				int nColors = 1 << lpbi->biBitCount;
				if (nColors > 256)
					nColors = 0;
				
				hdr.bfType		= ((WORD) ('M' << 8) | 'B');	//always is "BM"
				hdr.bfSize		= bitmapSize + sizeof( hdr );
				hdr.bfReserved1 	= 0;
				hdr.bfReserved2 	= 0;
				hdr.bfOffBits		= (DWORD) (sizeof(BITMAPFILEHEADER) + lpbi->biSize +
					nColors * sizeof(RGBQUAD));
				
				CFile bitmapFile("C:\\TEST.BMP", CFile::modeReadWrite | CFile::modeCreate | CFile::typeBinary);
				bitmapFile.Write(&hdr, sizeof(BITMAPFILEHEADER));
				bitmapFile.Write(buffer, bitmapSize);
				bitmapFile.Close();
				pass = true;
			}
			delete [] buffer;
			WinExec("C:\\Program Files\\ACDSee\\ACDSee.exe C:\\TEST.BMP",SW_SHOW);
			//			return pass;
		}
	}
}
void CTestDlg::OnFullScreen() 
{
	// TODO: Add your control notification handler code here
	if (pivw)
	{
		pivw->put_FullScreenMode(-1);
	}
}
void CTestDlg::OnButton8() //属性
{
	// TODO: Add your control notification handler code here
	IEnumFilters* pEnum;
	HRESULT hr ;
	if (pigb)
	{
			 hr = pigb-> EnumFilters(&pEnum);
			if (FAILED(hr)) 
			{
				return ;
			}
		
     
		
		IBaseFilter* pFilter = NULL;
		while (pEnum->Next(1, &pFilter, NULL) == S_OK) 
		{
			// Check for required interface
			IUnknown* pUnk;//查找Filter接口,只有一个?
			HRESULT hrQuery = pFilter->QueryInterface(IID_IVideoWindow, (void**)&pUnk);
			if (SUCCEEDED(hrQuery)) 
			{
				pUnk->Release();
				pEnum->Release();
				break ;
			}
	//		pFilter->Release();
		}
	  //  pEnum->Release();
		//
		ISpecifyPropertyPages *pProp = NULL;//查询接口
		 hr = pFilter->QueryInterface(IID_ISpecifyPropertyPages, (void **)&pProp);
		if (SUCCEEDED(hr)) 
		{
			// Get the filter's name and IUnknown pointer.
			FILTER_INFO FilterInfo;
			hr = pFilter->QueryFilterInfo(&FilterInfo); 
			IUnknown *pFilterUnk;
			pFilter->QueryInterface(IID_IUnknown, (void **)&pFilterUnk);
			//
			CString str(FilterInfo.achName);//显示Filter名称
			MessageBox(str);
			
			// Show the page. 
			CAUUID caGUID;
			
			pProp->GetPages(&caGUID);
			pProp->Release();
			OleCreatePropertyFrame(
				this->GetSafeHwnd(),                   // Parent window
				0, 0,                                 // Reserved
				FilterInfo.achName,     //L"MAOMAO" // Caption for the dialog box 
				1,                      // Number of objects (just the filter)
				&pFilterUnk,            // Array of object pointers. 
				caGUID.cElems,          // Number of property pages
				caGUID.pElems,          // Array of property page CLSIDs
				0,                      // Locale identifier
				0, NULL                 // Reserved
				);
			
			// Clean up.
			pFilterUnk->Release();
			FilterInfo.pGraph->Release(); 
			CoTaskMemFree(caGUID.pElems);
		}
	}
}
directX播放程序的更多相关文章
- 经典alsa 录音和播放程序
		
这里贴上虚拟机ubuntu下alsa的录音程序(capture.c)和播放程序(playback.c)的源码. 首先要测试一下自己的ubuntu是否打开了声音.这个可以打开/系统/首选项/声音 来调 ...
 - 基于Linux ALSA音频驱动的wav文件解析及播放程序 2012
		
本设计思路:先打开一个普通wav音频文件,从定义的文件头前面的44个字节中,取出文件头的定义消息,置于一个文件头的结构体中.然后打开alsa音频驱动,从文件头结构体取出采样精度,声道数,采样频率三个重 ...
 - C#DirectX播放视频
		
文章地址:http://www.cnblogs.com/zhangjun1130/archive/2009/09/15/1566814.html 很多人第一次接触到DirectX大都是通过游戏,至于安 ...
 - c# winform DirectX播放器 可以任意设置宽高比  屏幕拉伸
		
第一步:dll引用 Microsoft.DirectX.dll Microsoft.DirectX.AudioVideoPlayback.dll 如果没有的话,可能需要安装微软的DRECTX JDK ...
 - 为什么一个目录里放超过十个Mp4文件会导致资源管理器和播放程序变卡变慢?
		
最近<鬼吹灯之精绝古城>大火,我也下载了剧集放在移动硬盘里. 起初还没事,当剧集超过十个时发现资源管理器变慢了,表现为上方的绿条总是在闪动前进,给文件改名都缓慢无比. 当剧集超过十五个时, ...
 - 一个用go写的模拟mp3文字界面播放程序
		
这里的技巧在于学习如何定义数据结构,更新数据结构,在哪里用指针或是地址来更新. manger.go package library import "errors" type Mus ...
 - 基于opencv,开发摄像头播放程序
		
前言 Windows下实现摄像视频捕捉有多种实现方式:各种方式的优劣,本文不做对比.但是,opencv是一款老牌开发库,在图像处理领域声名显赫.采用opencv来处理摄像视频,在性能和稳定性上,是有保 ...
 - Qt程序启动画面播放(gif与swf两种动画格式)
		
学习Qt有一段时间了,发现一个小问题,网上关于Qt的资料或者总结性的学习及应用文章有点少. 比如,Qt完整的API,程序运行之前的启动画面如何按理想效果播放等,每次想在项目中添加一些应用的时候,总是找 ...
 - 1.QT中播放视频,录音程序的编写
		
 1 通过process的方式播放视频 T22VideoPlayer.pro HEADERS += \ MyWidget.h SOURCES += \ MyWidget.cpp QT += gu ...
 
随机推荐
- Hive on ES
			
ES对于类似数据库的SQL查询很无力,可以使用Hive on ES来实现SQL的查询.2个百万级的索引做关联时,需要大概1分多钟,基于es2.1版本. 1.将elasticsearch-hadoop- ...
 - 济南清北学堂游记 Day 6.
			
还剩一天半我就该回去了. 说实话今天挺可惜的,有很多本来可以得到的分数评测时没有拿到.上午的第一题和第二题我都想出了正解,T3敲了一个暴力,虽然暴力写坏了.预计是可以拿210的但是实际上只有很少的分数 ...
 - OI常用读入方式效率测试
			
我来填坑了. 这次我用自己写的测试读入的程序来分别测试cin(不关闭流同步),scanf和读入优化的效率差别. 我们分别对三个阶段的数据量n进行测试,通过时间比对来观察性能的差异. n = 102 ...
 - C# 使用 Lotus notes 公共邮箱发送邮件
			
公司的邮件系统用的是反人类的 Lotus notes, 你敢信? 最近要实现一个功能,邮件提醒功能,就是通过自动发送提醒邮件 前前后后这个问题搞了2天,由于公司的诸多条件限制,无法直接调用到公司发送邮 ...
 - Python学习-使用opencv-python提取手掌和手心及部分掌纹
			
上次我们成功训练了手掌识别器http://www.cnblogs.com/take-fetter/p/8438747.html,可以成功得到识别的结果如图 接下来需要使用opencv来获取手掌,去除背 ...
 - ES6,Array.fill()函数的用法
			
ES6为Array增加了fill()函数,使用制定的元素填充数组,其实就是用默认内容初始化数组. 该函数有三个参数. arr.fill(value, start, end) value:填充值. st ...
 - nginx/php-fpm 访问php文件直接下载而不运行
			
遇到这种问题,首先确认你web服务器配置中的.PHP是不是被指定给FastCGI server处理: location ~ .php$ { fastcgi_pass ; } 如已配置,那么可能是由于f ...
 - windows下apache服务器开启压缩和网页缓存
			
找到配置文件:http.conf apache开启压缩 一.开启配置,去除下面代码前面的#号LoadModule deflate_module modules/mod_deflate.soLoadMo ...
 - SqlBulkCopy 参数配置示例
			
SqlBulkCopy 做为SQL Server 官方 批量入库类,性能不会太差.针对其参数做了一些测试. A. 先准备测试场景 ,关于SqlBulkCopyOptions.KeepIdenti ...
 - Java基础系列--final关键字
			
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/8482909.html 一.概述 final是Java关键字中最常见之一,表示"最 ...