Camera directshow和x27中的VFW#E#u NOT#u图形;s视频捕获

Camera directshow和x27中的VFW#E#u NOT#u图形;s视频捕获,camera,directshow,video-capture,ccd,Camera,Directshow,Video Capture,Ccd,我再次尝试使用directShow。 我尝试从一个相机分配器中实现一个示例来读取相机(我希望以字节数组的形式获取帧),并且在尝试连接管脚时得到一个VFW_E_NOT_in_GRAPH-Error 我已经搜索过了,现在知道了,这意味着,我没有向graphbuilder添加特定的过滤器(或者我使用的过滤器不兼容?),但我添加了一个过滤器,看不到与示例的任何差异。。。然而,这个示例不是一个项目,只是代码片段,所以我想我可能忘记了任何初始化 你能看一下这个并告诉我你是否发现了一个错误吗? 一切正常,查找

我再次尝试使用directShow。 我尝试从一个相机分配器中实现一个示例来读取相机(我希望以字节数组的形式获取帧),并且在尝试连接管脚时得到一个VFW_E_NOT_in_GRAPH-Error

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

你能看一下这个并告诉我你是否发现了一个错误吗? 一切正常,查找无误,仅最后一个hr填充了0x8004025F,什么也没有发生(我在DoRenderSample方法中做了一个停止点):

HRESULT hr=S_正常;
IBaseFilter*pFilter=0;
hr=CreateKernelFilter(
CLSID\u视频输入设备类别,
L“视频USB-C摄像机”,
&过滤器
);
共初始化(空);
//CCOMKIPTR pKs(pFilter);
CCOMKIPTR pKs(pFilter);
如果(pFilter==0)返回;
//hr=pKs->SetWhiteBalanceMode(wbAuto);
cbitmaprederer*m_pSnapshotter=新的cbitmaprederer(_T(“位图渲染器”)、NULL和hr);
如果(失败(小时))
{
断言(“无法创建位图渲染器”);
返回;
}
m_pSnapshotter->SetCallback((IBitmapCallback*)this;
CComQIPtrpGrabBase(m_pSnapshotter);
IGraphBuilder*m_pGraphBuilder=0;
hr=CoCreateInstance(CLSID_FilterGraph,NULL,
CLSCTX_INPROC_服务器、IID_IGraphBuilder(void**)和m_pGraphBuilder);
hr=m_pGraphBuilder->AddFilter(pGrabBase,L“快照”);
松鸡;
hr=pFilter->FindPin(L“1”和pOutPin);
CBasePin*pInPin=m_pSnapshotter->GetPin(0);
hr=m_pGraphBuilder->Connect(pOutPin、pInPin);
我希望我没有忘记任何重要的信息。。。
(我想使用embarcadero XE2 16的C++-Builder和2005年的DirectShow9)

错误代码告诉您出了什么问题<代码>VFW\u E\u不在图形中,图形中没有某些内容。连接两个管脚,它们属于两个过滤器。其中一个筛选器不在图中。在上面添加几行时,另一个过滤器不在图中。在连接管脚之前也要添加它。

错误代码会告诉您出了什么问题<代码>VFW\u E\u不在图形中,图形中没有某些内容。连接两个管脚,它们属于两个过滤器。其中一个筛选器不在图中。在上面添加几行时,另一个过滤器不在图中。在连接管脚之前也要添加它。

感谢您的快速回答!那么,你说pFilter还没有添加到m_pGraphBuilder中?我应该使用m_pGraphBuilder->AddFilter(pFilter,L“Snapshot”);为了这个?我必须在那里提供什么字符串?还是我误解了你的帮助?(以及如何在注释中创建新行?^^)是的,您需要添加两个过滤器(使用您上面写的行)。任何字符串都可以-这是过滤器的名称。再次感谢您的回答!添加hr=m_pGraphBuilder->AddFilter(pFilter,L“源”);帮助这个错误。。。但是什么都没有发生^^我如何开始整个过程或获得帧(最想要的是字节数组)?我的建议:从一个好的示例开始。有了这样的Q,你真的是在路上的最开始,在“事情开始发生”之前会有其他的事情。谢谢你的建议。。。我仍然有一些问题找到好的样本,因为许多是为以前的directshows或他们试图渲染对象。。。你知道一个有效的例子吗?到目前为止,我发现最好的事情就是:谢谢你的快速回答!那么,你说pFilter还没有添加到m_pGraphBuilder中?我应该使用m_pGraphBuilder->AddFilter(pFilter,L“Snapshot”);为了这个?我必须在那里提供什么字符串?还是我误解了你的帮助?(以及如何在注释中创建新行?^^)是的,您需要添加两个过滤器(使用您上面写的行)。任何字符串都可以-这是过滤器的名称。再次感谢您的回答!添加hr=m_pGraphBuilder->AddFilter(pFilter,L“源”);帮助这个错误。。。但是什么都没有发生^^我如何开始整个过程或获得帧(最想要的是字节数组)?我的建议:从一个好的示例开始。有了这样的Q,你真的是在路上的最开始,在“事情开始发生”之前会有其他的事情。谢谢你的建议。。。我仍然有一些问题找到好的样本,因为许多是为以前的directshows或他们试图渲染对象。。。你知道一个有效的例子吗?到目前为止,我发现的最好的东西是:
    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 );