我正在使用视频捕捉设备(VCD)从电视机中获取具有各种输出端口(VGA,HDMI,DVI)的帧。我使用C ++ / OpenCV读取这些帧,处理它们然后在C ++ / Qt QLabel上显示输出。
当我更改输入端口(DVI到HDMI或HDMI到VGA,...)时出现问题,然后我需要手动打开VCD的交叉开关对话窗口并切换输入端口。
显示视频捕获设备的ffmpeg命令行+ crossbar窗口的命令窗口
此外,对于每个输入端口,我需要调整一些与颜色范围,缩放尺寸和线长相关的参数。
我需要使用C ++或python代码自动执行使用相应的正确参数选择正确输入端口的过程。
我正在寻找一种方法来读取视频捕获设备的交叉开关对话框的所有输入引脚,并设置/取消设置所需的引脚。
提前致谢。
答案 0 :(得分:0)
以下是C ++ / WinAPI中的示例,您可以在设置对话框中设置/取消设置VIDEO INPUT
引脚。此代码假定,复选框是主对话框的子元素;可能有这种情况,当它们嵌套在选项卡控件"自定义设置"中时,所以在这种情况下,您需要首先找到该选项卡。
#include <windows.h>
#include <string>
#include <vector>
#include <map>
#include <iostream>
int main(int, char **)
{
// Find the dialog
HWND hwnd = FindWindowA(NULL, "%Your settings dialog caption%");
if (hwnd == NULL)
{
std::cerr << "cannot find settings dialog" << std::endl;
return 1;
}
std::map<std::string, HWND> options;
// Get first dialog element
HWND h = GetWindow(hwnd, GW_CHILD);
char caption[250];
std::vector<std::string> inputs{
"1/HDMI",
"2/DVI-D",
"3/COMPONENT",
"DVI",
"4/VGA",
"SOG",
"5/SDI",
"6/COMPOSITE",
"7/S-VIDEO",
"8/AUTO"
};
while (h != NULL)
{
// Get element text
if (GetWindowTextA(h, caption, 250))
{
std::string scaption(caption);
// Check the text, if it's in the list of the option, put it into map.
if (std::find(inputs.begin(), inputs.end(), scaption) != inputs.end())
{
options[caption] = h;
}
}
h = GetWindow(h, GW_HWNDNEXT);
}
// Check the 4/VGA option.
SendMessageA(options["4/VGA"], BM_CLICK, 0, 0);
return 0;
}