|
让directshow自动选择filter最简单应用程序通用性比较好,不过你需要自己写一个filter(三星提供了一个filter的例子,你可以参考),或是干脆直接使用MFC硬件解码(三星也提供了例程)。使用filter,应用程序几句话就可以实现视频播放了网上例子很多,以后硬件平台改动只需写filter就可以了,程序几乎不用改动。如不知道你有没有三星的例子,如果需要我发给你吧。
directshow自动选择filter
//-------------------------------------------------------------
#include "stdafx.h"
#include
#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(_T("\\NandFlash\\ChangHong.avi"), NULL);
if (SUCCEEDED(hr))
{
// 播放
hr = pControl->Run();
if (SUCCEEDED(hr))
{
// 等待播放结束
long evCode;
pEvent->WaitForCompletion(INFINITE, &evCode);
}
}
pControl->Release();
pEvent->Release();
pGraph->Release();
CoUninitialize();
return 0;
}
//------------------------------------------------------------- |
|