directshow 视频预览

1. 建立captrue filter

2. 调用ICaptureGraphBuilder2接口的renderstream

hr = m_build->RenderStream(&PIN_CATEGORY_PREVIEW,
        &MEDIATYPE_Video,
        pCapFilter,
        pSGFilter,
        NULL);

我这里的pSGFilter是ISampleGrabber, 用来做视频数据采集的

注意, 用PIN_CATEGORY_PREVIEW采集到的视频数据是不带时间戳的, 带时间戳的是PIN_CATEGORY_CAPTURE

3. 在MFC中的dialog中建立一个picture control控件。

HWND hwndPreview = NULL;
    GetDlgItem( IDC_PREVIEW, &hwndPreview );
    RECT rc;
    ::GetWindowRect( hwndPreview, &rc );

4. 将控件与视频绑定, 使用的是IVideoWindow接口, 需要包含dshow sdk中的头文件control.h

IVideoWindow *pWindow = NULL;
    hr = m_graph->QueryInterface(IID_IVideoWindow, (void**)&pWindow);

    hr = pWindow->put_Owner( (OAHWND) hwndPreview );
    hr = pWindow->put_Left( 0 );
    hr = pWindow->put_Top( 0 );
    hr = pWindow->put_Width( width );
    hr = pWindow->put_Height( height );
    hr = pWindow->put_WindowStyle( WS_CHILD | WS_CLIPSIBLINGS );
    hr = pWindow->put_Visible( OATRUE );

5.IMediaControl Run();

 

详细信息请参考sdk中的例子StillCap

posted on 2012-07-13 13:31  chef  阅读(709)  评论(0)    收藏  举报

导航