graphstudio 中可用的引脚在代码中不存在

2023-12-27

我正在使用网络摄像头的源过滤器。当我在 graphstudio 中使用过滤器时,它有两个输出引脚。然而,在代码中,对 IEnumPins->next 的调用始终返回 S_FALSE。 我还寻找了另一个可以创建引脚的接口,但没有找到这样的东西。

如何将引脚添加到网络摄像头过滤器?如果它们在 graphstudio 中可用,它们也应该在代码中,对吧?

这是我的代码..我检查了返回值,如果不正常则返回它们。但一切似乎都工作正常,除了网络摄像头过滤器不返回任何引脚

CoInitialize(NULL);

    IGraphBuilder* graphBuilder = NULL;
    IMediaControl* mediaControl = NULL;
    IMediaEvent* mediaEvent = NULL;

    HRESULT hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IFilterGraph, (void **)&graphBuilder);

    HANDLE fileHandle = CreateFile(L"D:\\TEMP\\debug1.log", GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, NULL, NULL);

    graphBuilder->SetLogFile((DWORD_PTR)fileHandle);
    graphBuilder->QueryInterface(IID_IMediaControl, (void **)&mediaControl);
    graphBuilder->QueryInterface(IID_IMediaEvent, (void **)&mediaEvent);

    IBaseFilter* source = NULL;


    static const GUID CLSID_Webcam =
    { 0x17CCA71B, 0xECD7, 0x11D0, { 0xB9, 0x08, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 } };
    hr = CoCreateInstance(CLSID_Webcam, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void **)&source);
    if (FAILED(hr))
        return hr;
    hr = graphBuilder->AddFilter(source, L"logitech");
    if (FAILED(hr))
        return hr;


    IPin* camOut = GetPin(source, PINDIR_OUTPUT);
    ...

GetPin 函数使用 EnumPins 方法来查找引脚:

IPin *GetPin(IBaseFilter *pFilter, PIN_DIRECTION PinDir)
{
    BOOL       bFound = FALSE;
    IEnumPins  *pEnum;
    IPin       *pPin;

    pFilter->EnumPins(&pEnum);
    while (pEnum->Next(1, &pPin, 0) == S_OK)
    {
        PIN_DIRECTION PinDirThis;
        pPin->QueryDirection(&PinDirThis);
        if (bFound = (PinDir == PinDirThis))
            break;
        pPin->Release();
    }
    pEnum->Release();
    return (bFound ? pPin : 0);
}

另外,我不认为这是 32/64 位的问题。我编译为 x64,并且还使用了 graphstudioext 的 64 位版本。我还确保网络摄像头过滤器的引导是正确的。 (至少如果你可以信任 graphstudioext)


这表明您的代码处理另一个过滤器或存在其他错误。您通常不会“创建”引脚,尤其是在视频设备支持的源过滤器上。典型原因是:(a) 您正在有效地创建不同的过滤器,(b) 代码中存在直接错误,(c) 两个环境中不同过滤器的 32/64 位问题。几乎不可能有别的东西了。彻底单步执行和检查代码,添加调试输出应该可以帮助您找到解决方案。

更新。像这样的视频捕获设备无法使用实例化CoCreateInstance。你必须使用名字来创建它们。通常通过枚举,如 MSDN 上所述(带有源代码片段):选择捕捉设备 http://msdn.microsoft.com/en-us/library/windows/desktop/dd377566.

下面的代码不正确,仅供参考,该 GUID 在 SDK 中声明为CLSID_Proxy.

 static const GUID CLSID_Webcam =
{ 0x17CCA71B, 0xECD7, 0x11D0, { 0xB9, 0x08, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 } };
hr = CoCreateInstance(CLSID_Webcam, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void **)&source);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

graphstudio 中可用的引脚在代码中不存在 的相关文章

随机推荐

  • 如何在Matlab绘图中插入两个X轴

    我想创建一个具有双 X 轴 m s 和 km h 且具有相同绘图的 Matlab 图 我已经找到了plotyy和 在Matlab存储库中 plotyyy 但我正在寻找 双 X 轴 下面一起来看看剧情吧 我的代码很简单 stem M 1 3
  • Android - 读取类内的 build.gradle 属性

    我希望能够访问 build gradle 属性 以便我可以自动化应用程序中的某些流程 这是我目前的结构 根项目 build gradle buildscript ext buildTools 25 0 2 minSdk 16 compile
  • iPhone模拟器中有切换深色模式和浅色模式的键盘快捷键吗?

    我使用 iPhone 模拟器进行开发 大多数 ui 组件都是使用 swift 编写的 有没有一种简单的方法可以在暗模式和亮模式之间切换以进行测试 我发现从设置中启用和禁用暗模式非常耗时 这个快捷方式将加快我对深色模式和浅色模式的测试 我最近
  • 发挥框架2.0的演变并创建触发器

    我一直在尝试使用 Play 2 0 3 创建此触发器 如果我手动运行它 它在 MySQL 中运行得很好 但当尝试从 Play 运行它时 它会失败 delimiter create trigger company updated before
  • Java 反射和重构中的痛苦

    Java Reflection 提供了一种在运行时自省对象的机制 毫不犹豫 这是一个很棒的功能 但它打破了所有重构约定 没有简单的方法 除了File Search 甚至在现代 IDE 中也能知道引用了哪个属性以及在哪里引用 这使得重构变得更
  • apache,允许文件名带有“?”

    我想制作网站的静态副本 保留现有的 URL 问题是 URL 看起来像 http mysite index php id XXX http mysite index php id XXX Apache 不想找到文件 index php id
  • 如何知道Android是否连接到WiFi或以太网? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 How to know whether I m connected to WiFi or ethernet in Android In
  • 使用一种编译器创建的静态 C 库是否与另一种编译器兼容?

    就我而言 我有一个使用代码源 gcc 构建的库 目标是arm cortex m4 然后我尝试将该库链接到使用 IAR 编译器编译的项目中 是否可以做到这一点 或者是否必须使用新工具重建库 哪些因素影响这个 静态库是几个目标文件的捆绑 这些目
  • Seaborn 散点图将气泡大小缩放为更大的点

    我正在关注这个example https seaborn pydata org generated seaborn scatterplot html我想创建更大的气泡 但无论我将尺寸列乘以多大 它们仍然很小 是否需要调整某种比例因子 我在文
  • 为什么这个 IFrame 没有占据完整的页面高度? [复制]

    这个问题在这里已经有答案了 我正在使用 Iframe 来显示 google com 或说任何网站 我使用了 height 100 但即便如此 我的 Iframe 大小也只是页面的一半 请让我知道为什么会发生这种情况 链接在这里 http j
  • Spark:测试 RDD 是否为空的有效方法

    没有一个isEmptyRDD 上的方法 那么测试 RDD 是否为空的最有效方法是什么 RDD isEmpty https issues apache org jira browse SPARK 5270将成为 Spark 1 3 0 的一部
  • 与PHP在同一页面显示结果

    我基本上是从 PHP 开始学习的 我想做的事情很简单 我想在同一页面显示计算结果 这是项目的结构 https i stack imgur com XGPVr png Code 索引 php header php
  • WAMP、Laravel 5:路由不起作用 - NotFoundHttpException

    我在本地计算机上使用 Laravel 5 和 WAMP 没有虚拟化 使用 Composer 创建一个名为 LaravelProject 的新项目后 我似乎根本无法让我的路线正常工作 我已经做了什么 Edited httpd conf to
  • 查找:显示模板速度

    我在新的 MVC4 站点上安装了 Mini Profiler 并注意到某些功能的等待时间很长Find DisplayTemplates包括字符串和日期时间 下面是一个例子 在另一个问题中 Sam Saffron 谈到了查找步骤 在随后的运行
  • 理解c++20中的convertible_to概念

    我对 C 20 概念仍然很陌生 我想知道为什么这不起作用 我想创建一个将数字连接为字符串的函数模板 所以我想尝试一些概念 我用了std convertible to检查输入的数据类型 即int在这种情况下 可以转换为std string 但
  • UICollectionView 标题宽度

    在我的 UICollectionViewFlowLayout 子类中 我有这个 self headerReferenceSize CGSizeMake 280 44 但是 标题的显示宽度为 320 这是集合视图的宽度 根据文档 这是正确的
  • 处理 Express 表单中的输入数组?

    假设我必须在同一页面上编辑一批相同类型的对象 jade form action method POST for each message id in messages ids input type text name message id
  • 如何删除Android searchview左侧的空间(不属于actionbar的一部分)?

    我在 android 应用程序中使用 searchview searchview 不是操作栏的一部分 我想删除搜索图标 搜索视图左侧的空格 我搜索了很多并收到了适用于作为操作栏一部分的搜索视图的答案 我尝试使用机器人 布局重力 机器人 重力
  • 为什么 const char* const & = "hello" 可以编译?

    我正在阅读一本书中的代码片段并发现 const char const a hello can compile const char a hello cannot 我所知道的是 在初始化引用时 数组到指针的转换不会发生 const char
  • graphstudio 中可用的引脚在代码中不存在

    我正在使用网络摄像头的源过滤器 当我在 graphstudio 中使用过滤器时 它有两个输出引脚 然而 在代码中 对 IEnumPins gt next 的调用始终返回 S FALSE 我还寻找了另一个可以创建引脚的接口 但没有找到这样的东