directshow学习笔记四-----视频预览(将预览视频播放到指定picture控件中,个人学习所用,仅供参考)

接上一章,由于没搞明白RenderStream(),QueryInterface()以及put_Owner()的顺序,所以没有将视频播放到指定picture控件中。

修改如下

void CTestWindowDlg::OnButton1() 
{
// TODO: Add your control notification handler code here



//在对话框初始化时枚举视频捕捉设备,设计过滤图表。
ICaptureGraphBuilder2 * pBuilder = NULL;
pGraph = NULL;
pMediaControl = NULL;

//如何创建FilterGraph
//第一步:创建 ICaptureGraphBuilder2接口
CoCreateInstance(CLSID_CaptureGraphBuilder2,0,
CLSCTX_INPROC_SERVER,IID_ICaptureGraphBuilder2,(void**)&pBuilder);
//第二步:创建IGraphBuilder接口
CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, 
IID_IGraphBuilder, (void **)&pGraph);
//第三步:调用ICaptureBuilder的SetFilterGraph方法将FilterGraph加入到Builder中
pBuilder->SetFiltergraph(pGraph);
//查询各个接口,得到媒体控制接口,该接口控制整个Graph状态的
pGraph->QueryInterface(IID_IMediaControl,(void**)&pMediaControl);//查询接口

//自动选择第三个为当前工作的视频采集设备
if(m_combo.GetCount() > 0)
{
m_combo.SetCurSel(2);
CString deviceName;
m_combo.GetLBText(2,deviceName);

pSrc = CreateVideoDevice(deviceName);
}

pGraph->AddFilter(pSrc,L"avi");
pPreview = NULL;

CoCreateInstance(CLSID_VideoRenderer,0,CLSCTX_ALL,
IID_IBaseFilter,(void**)&pPreview);

if (pPreview != NULL)
{
pGraph->AddFilter(pPreview,L"preview");
//连接引脚
IPin * pSourceOut;
pSourceOut = FindPin(pSrc,PINDIR_OUTPUT);
IPin*  pPreIn = FindPin(pPreview,PINDIR_INPUT);
pGraph->ConnectDirect(pSourceOut,pPreIn,NULL);

//获取预览窗口
//IVideoWindow * pVideoWindow= NULL;
pVideoWindow= NULL;
HRESULT hr = NULL;
pBuilder->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, 
pSourceOut, NULL, NULL); 
hr = pGraph->QueryInterface(IID_IVideoWindow,(void**)&pVideoWindow);

if (pVideoWindow)
{
IVideoWindow *pVidWin = NULL;
HWND hwndPreview = NULL;
RECT grc;

GetDlgItem( IDC_PREVIEW, &hwndPreview );
::GetClientRect(hwndPreview,&grc);
hr = pVideoWindow->put_Owner((OAHWND)hwndPreview);
hr = pVideoWindow->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS);

hr = pVideoWindow->SetWindowPosition(0, 0, grc.right, grc.bottom);
}
pMediaControl->Run();

}
}

正在学习中。。。。

源码地址http://download.csdn.net/detail/afu1972715000/8343231


猜你喜欢

转载自blog.csdn.net/afu1972715000/article/details/42550909
今日推荐