在directshow的视频捕获中的VFW_E_NOT_IN_GRAPH

时间:2012-08-15 10:28:50

标签: camera directshow video-capture ccd

我再次尝试使用directShow。 我试图从相机分销商处实现一个示例来读取相机(我希望以字节数组的形式获取帧)并在尝试连接引脚时收到VFW_E_NOT_IN_GRAPH错误。

我已经搜索过,现在知道了,这意味着,我没有向graphbuilder添加特定的过滤器(或者我使用的过滤器不兼容?),但我添加了一个过滤器,看不出任何差异对样本...但是,样本不是一个项目,而只是代码片段,所以我想我可能忘记了任何初始化......

请你看看这个并告诉我你是否发现了错误? 一切正常,没有错误,只有最后一小时填充了0x8004025F,没有任何反应(我在DoRenderSample方法中做了一个停止点):

    HRESULT hr = S_OK;
    IBaseFilter* pFilter=0;
    hr=CreateKernelFilter(
        CLSID_VideoInputDeviceCategory,
            L"Videology USB-C Camera",
            &pFilter
    );
    CoInitialize(NULL);
//  CComQIPtr<IVideology20K1XX> pKs(pFilter);
    CComQIPtr<IVideologyCommon> pKs( pFilter );
    if(pFilter==0)return;
//  hr=pKs->SetWhiteBalanceMode(wbAuto);

    CBitmapRenderer *m_pSnapshotter = new CBitmapRenderer( _T("Bitmap renderer"), NULL, &hr );

    if( FAILED(hr) )
    {
        ASSERT("Couldn't create bitmap renderer.");
        return;
    }
    m_pSnapshotter->SetCallback( (IBitmapCallback*) this );
    CComQIPtr< IBaseFilter > pGrabBase( m_pSnapshotter );
    IGraphBuilder*  m_pGraphBuilder=0;
     hr = CoCreateInstance(CLSID_FilterGraph, NULL,
    CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&m_pGraphBuilder);
    hr = m_pGraphBuilder->AddFilter( pGrabBase, L"Snapshot" );

    CComPtr<IPin> pOutPin;
    hr= pFilter->FindPin( L"1", &pOutPin );

    CBasePin* pInPin = m_pSnapshotter->GetPin( 0 );
    hr = m_pGraphBuilder->Connect( pOutPin, pInPin );

我希望我没有忘记任何重要的信息...... (使用C ++ - Embarcadero XE2 16中的Builder和2005年的DirectShow9我认为)

1 个答案:

答案 0 :(得分:1)

错误代码告诉您错误。 VFW_E_NOT_IN_GRAPH,某些内容不在图表中。连接两个引脚,属于两个滤波器。其中一个过滤器不在图表中。当您在上面添加几行pGrabBase时,其他过滤器不在图表中。在连接引脚之前添加它。