gpt4 book ai didi

c++ - 在 Directshow 中代替使用 ISpecifyPropertyPages 的替代编程方式

转载 作者:行者123 更新时间:2023-11-30 02:45:30 24 4
gpt4 key购买 nike

首先,我对直接秀的东西一窍不通。我几乎不知道它是如何工作的。我正在尝试从名为感兴趣区域 x 和 y 的相机访问这个“值”,至少在相机附带的相机程序中是这样调用它的。基本上它将相机的 View 从左到右或从上到下移动(相机不会物理移动)。问题是我在 Directshow 中找不到如何做到这一点。

但是,幸运的是,我遇到了一个程序,它的源代码可以使用 directshow 访问这个值。所以,在查看代码后我找到了它,代码看起来像这样..

case IDC_DEVICE_SETUP:
{
if(gcap.pVCap == NULL)
break;

ISpecifyPropertyPages *pSpec;
CAUUID cauuid;
hr = gcap.pVCap->QueryInterface(IID_ISpecifyPropertyPages, (void **)&pSpec);
if(hr == S_OK)
{
hr = pSpec->GetPages(&cauuid);
hr = OleCreatePropertyFrame(ghwndApp, 30, 30, NULL, 1,
(IUnknown **)&gcap.pVCap, cauuid.cElems,
(GUID *)cauuid.pElems, 0, 0, NULL);
CoTaskMemFree(cauuid.pElems);
pSpec->Release();
}
break;
}

问题是这是一个按钮,当您单击它时,它会创建一个窗口,其中包含我不需要访问的一些相机设置属性。基本上,有两个问题。首先,我不需要创建一个窗口,我只想以编程方式访问值,其次,我只想从此属性页访问值的特定部分。有办法吗?

最佳答案

IAMCameraControl 界面似乎最接近您想要的,但它并不完全是您想要的。我不记得有一个标准的 DirectShow 接口(interface)可以满足您的需求。

您看到的 IBaseFilter 的属性页是由过滤器的驱动程序实现的。司机可以自由地做任何他想做的事情,了解所有关于内部接口(interface)的知识。无需向外部用户展示这些接口(interface)。如果幸运的话,相机供应商的属性页正在使用供应商愿意记录的 COM 接口(interface),以便您可以使用它。

所以我会询问相机供应商是否提供您可以使用的官方 COM 接口(interface)。如果他们不这样做,您可以尝试对他们所做的事情进行逆向工程(不是那么容易),并希望他们不会更改下一个软件版本的界面。

关于评论中给出的一般问题:

COM是一个编程接口(interface),它定义了如何创建对象、如何定义这些对象的接口(interface)(例如方法)以及如何调用对象上的方法。

DirectShow基于COM。 DirectShow 定义了几个 COM 接口(interface),如 IFilterGraph 作为您使用的所有设备和过滤器的容器。 DirectShow 定义的另一个 COM 接口(interface)是 IBaseFilter,它是您可以使用的所有过滤器(设备、转换过滤器)的基本接口(interface)。

个别 COM 对象有时由 DirectShow 实现,但设备特定对象(如捕获设备的 IBaseFilter)由硬件供应商提供的某些 DLL 实现。

在您的例子中,gcap.pVCap 是捕获设备的 IBaseFilter 接口(interface)。在 COM 中对象可以实现多个接口(interface)。如果 pVCap 支持接口(interface) ISpecifyPropertyPages,则在您的代码中查询 (QueryInterface)。如果是这种情况,则会创建 OlePropertyFrame,它显示由相机对象实现的属性页。完全控制转到实现 ISpecifyPropertyPages 接口(interface)的相机对象。当相机对象显示属性页时,它可以直接访问它自己的属性。但它也可以通过导出另一个接口(interface)(如 IMyCameraSpecificInterface)使属性在外部可用。

关于c++ - 在 Directshow 中代替使用 ISpecifyPropertyPages 的替代编程方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24382798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com