2017-07-19 106 views
0

我有一個視頻捕捉設備(VCD),它從具有各種輸出端口(VGA,HDMI,DVI)的電視機獲取幀。我使用C++/OpenCV讀取這些幀,處理它們,然後在C++/Qt QLabel上顯示輸出。使用C++調整視頻捕捉輸入端口/ python

當我改變輸入端口(DVI到HDMI或HDMI到VGA,...)時,出現我的問題,然後我需要手動打開VCD的交叉開關對話窗口並切換輸入端口。

顯示與ffmpeg的命令行+橫杆窗口的視頻捕獲裝置命令窗口

此外,對於每一個輸入端口,我需要調整的某些參數相關的顏色範圍,縮放大小和線的長度。

我需要使用C++或python代碼自動執行正確的輸入端口和相應的正確參數選擇過程。

我正在尋找一種方法來讀取視頻捕獲設備的交叉開關對話框的所有輸入引腳,並設置/取消設置所需的引腳。

在此先感謝。

+0

你的問題是什麼? – eyllanesc

+0

我正在尋找一種方法來讀取視頻捕獲設備的交叉開關對話框的所有輸入引腳,並設置/取消設置所需的引腳。我需要一種方法來做到這一點 – Tarek

回答

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; 
} 
+0

非常感謝你,這是我需要做的,但是,我想修改代碼以按照你的建議從標籤中讀取,也可以從GUI中的下拉菜單中獲取值。我在哪裏可以找到很好的材料來教我如何編寫像你這樣的代碼? – Tarek

+0

另外,是否有任何其他庫與python一樣?如果我使用Ubuntu,我也可以使用這個相同的代碼嗎?在Qt中有沒有其他選擇? – Tarek

+0

@Tarek此代碼使用WinAPI函數,因此它不易移植到其他平臺。但是可以移植到Ubuntu--只需使用它的API來迭代對話框元素,閱讀文本並更改狀態即可。 Qt是否有其他選擇?我不這麼認爲,Qt提供了構建它自己的UI的工具,而不是與其他API交互。 – ikleschenkov