【问题标题】:Display "Camera Controls" dialog from vfwwdm32.dll从 vfwwdm32.dll 显示“相机控制”对话框
【发布时间】:2017-02-22 06:17:21
【问题描述】:

我正在开发一个网络摄像头应用程序,并希望重新使用看似标准的相机控件对话框(那些配置网络摄像头设置的对话框,如亮度、缩放、闪烁补偿等)。经过一番挖掘,我发现必要的对话框资源位于 vfwwdm32.dll 中,对话框 ID102405。是的,这是一个 DLL,用于大约 1992 年的古代 Video For Windows

对话框资源可通过 DirectShow 访问,如本 MSDN article 中所述,使用 IAMVfwCaptureDialogs 提供的接口。


问题 #1:
我是不是走错了路?如果我应该在 Windows 中使用这些对话框的另一个(更现代)实现?
我想通过从 WDM 本身查询可用控件来避免使用构建我自己的 GUI 的“首选”方法来重新实现这些,而只使用 MS 已经构建的对话框。特别是因为它们非常适合我的需求。


问题 #2(主要问题):
鉴于我的应用程序不是基于 DirectShow 的(它是基于 MS Media Foundation 的)我不想依赖 DirectShow遗产。这意味着我使用Displaying a dialog resource from... 中描述的方法,基本上可以归结为LoadLibrary()->FindResource()->LoadResource()->LockResource()->CreateDialogIndirectParam()

我遇到的问题是对话框需要知道要控制哪个相机。这大概是通过对话框的输入参数来完成的(我使用这个术语是松散的,因为它不是一个真正的函数,而是一个 对话框数据交换 过程)。

如何向对话框提供必要的信息,以便它与我选择的相机正常工作?

更一般地说:如何与那个对话框实现数据交换?

【问题讨论】:

  • 执行CreateDialogIndirect() 方法仍然需要您自己编写对话逻辑;您将负责该对话框的所有逻辑,除非该对话框过程也被导出。
  • 那么通过DirectShowIAMVfwCaptureDialogs 路由是唯一的方法吗? :(
  • 由于您正在处理旧的Video For Windows 技术,您可能正在寻找AVICap API(capCreateCaptureWindow()capDlgVideoFormat()capDlgVideoDisplay() 等)。见Displaying Dialog Boxes to Set Video Characteristics
  • 我想我不够清楚,但我不是在处理 VFW。我正在处理 MS Media Foundation 并试图避免使用 DirectShow 路径。
  • 嗨,我认为应该尝试另一种方式 - 尝试直接通过现场DeviceIoControl - USB Video Class Properties 使用所选相机设备的驱动程序。它允许更改相机设置,如设备设置(相机是设备)。它没有用户对话窗口——因此,您需要编写自己的 GUI,但您可以更改代码级别的选项。顺便说一句 - 你必须使用 SymbolicLink 的相机为 DeviceIoControl - 相机是设备。

标签: winapi dll dialog webcam webcam-capture


【解决方案1】:

您不应该重复使用对话框 - 您只能使用 API 来使用它们。

如果你处理视频捕获硬件的主要 API 是 Media Foundation,那么这个 UI 根本不适用。 UI 属于 Video for Windows,当您使用旧版 VFW 捕获过滤器在 DirectShow 中捕获视频时,您也可以在有限的范围内从 DirectShow 使用它。

Media Foundation 可以使用相同的硬件,但它在较低级别点与它对话,并且 VFW 对话不适用。

您应该提供自己的 UI,该 UI 使用 Media Foundation 接口与设备通信。而且您绝对没有理由要使用 VFW DLL 中的对话框模板。

【讨论】:

  • 如果我处理 MF,是什么导致“这个 UI 根本不适用”?相机控件是相机控件。打开任何应用程序(Skype、Debut、AmCap...) - 它们全部运行此对话框。事实上,我还没有找到一个这样做的网络摄像头应用程序。你能详细说明你的主张吗?请记住,我只对提供的 3 个对话框中的一个感兴趣 - 其他 2 个确实仅适用于 VFW,因为它们处理 H/W 选择和视频捕获格式设置。
  • 如果您 query IAMCameraControl 并显示带有 CLSID {71F96465-78F3-11D0-A18C-00A0C9118956} AKA CLSID_CameraControlPropertyPage 的标准 COM/OLE 属性框架对话框 API OleCreatePropertyFrame,则摄像机控制属性页可能特别适用于媒体基础源。这可能有效,但请记住它是未记录的 API 组合。
  • 这确实是一个非常有趣的想法。不过感觉很hacky,TBH。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-06
  • 2010-11-03
  • 1970-01-01
  • 2015-09-15
  • 1970-01-01
相关资源
最近更新 更多