编写一个DirectShow应用程序大体需要3个步骤
- 创建一个Filter Graph Manager的实例
- 使用Filter Graph Manager创建一个filter graph,此时需要必备的filter
- 使用Filter Graph Manager控制filter graph和通过这些filter的流,在这个过程中,应用程序会收到Filter Graph Manager发送的事件
完成上述几步后,最后需要释放这个Filter Graph Manager和所有的Filter资源。
示例(头文件和库文件已在安装vs2008时配置好了,在$(FrameworkSDKDir)include,即C:\Program Files\Microsoft SDKs\Windows\v6.0A里):
#include "stdafx.h"
#include <DShow.h> //引入DirectShow头文件
//引入DirectShow库文件,这里采用从源程序引入,也可以配置开发环境来引入
#pragma comment(lib,"strmiids.lib")
int _tmain(int argc, _TCHAR* argv[])
{
IGraphBuilder *pGraph = NULL; //图表管理器接口
IMediaControl *pControl = NULL; //媒体控制接口
IMediaEvent *pEvent = NULL; //媒体事件接口
//初始化COM库
HRESULT hr = CoInitialize(NULL);
if (FAILED(hr))
{
printf("ERROR - Could not initialize COM library.");
return -1;
}
//创建滤波器链表管理器
hr = CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC_SERVER,IID_IGraphBuilder,(void**)&pGraph);
if (FAILED(hr))
{
printf("ERROR - Could not create the Filter Graph Manager.");
return -1;
}
//查询媒体控制和媒体事件接口
hr = pGraph->QueryInterface(IID_IMediaControl,(void**)&pControl);
hr = pGraph->QueryInterface(IID_IMediaEvent,(void**)&pEvent);
//建立链表
hr = pGraph ->RenderFile(L"E:\\MicroMouse\\MicroMouse615走迷宫演示.WMV",NULL);
if (SUCCEEDED(hr))
{
//运行链表
hr = pControl->Run();
if (SUCCEEDED(hr))
{
//等待回放结束事件
long evCode; //事件码
pEvent->WaitForCompletion(INFINITE,&evCode);//无限时间的等待,直到媒体播放结束
}
}
//释放所有资源和关闭COM库
pControl->Release();
pEvent->Release();
pGraph->Release();
CoUninitialize();
return 0;
}
posted on 2010-08-31 01:00
CrazyNerd 阅读(1582)
评论(0) 编辑 收藏 引用 所属分类:
文件、图形与多媒体