• wanghanmin's avatar
    Merge pull request #12138 from wanghanmin:wanghanmin-patch-videoio_crossbarsetting-1 · eb981cc7
    wanghanmin authored
    * Update videoio.hpp
    
    add VideoCapturePropertie for clossbar input pin setting
    
    * Update cap_dshow.cpp
    
    For some kind of capture card, such as "avermedia cv710 " , it use SerialDigital as input pin and so it can not work.
    Here added new PhysicalConnectorType enumeration: PhysConn_Video_YRYBY and PhysConn_Video_SerialDigital to support it.
    And also provide new property parameter CAP_CROSSBAR_INPIN_TYPE to set the crossbar input pin type which will be used in videoInput::start(int deviceID, videoDevice *VD):
    " if(VD->useCrossbar)
        {
            DebugPrintOut("SETUP: Checking crossbar\n");
            routeCrossbar(&VD->pCaptureGraph, &VD->pVideoInputFilter, VD->connection, CAPTURE_MODE);
    
        }
    "
    
    And at last ,fixed one issue for function setSizeAndSubtype, added code 
    pVih->rcSource.top = pVih->rcSource.left = pVih->rcTarget.top =pVih->rcTarget.left=0;
    pVih->rcSource.right = pVih->rcTarget.right= attemptWidth;
    pVih->rcSource.bottom = pVih->rcTarget.bottom = attemptHeight;
    
    without these code , rcSource and rcTarget will keeping use default resolution and cause fail in hr = VD->streamConf->SetFormat(VD->pAmMediaType) and cannot find suitable MediaType.
    
    Tested with python3 and mfc (Avermedia cv710)
    Python3 code:
    import cv2
    print("test cv")
    cap=cv2.VideoCapture(0)
    cap.set(5,60)
    cap.set(3,1920)
    cap.set(4,1080)
    cap.set(31,6)
    
    
    ret,img=cap.read()
    cv2.namedWindow("cap",cv2.WINDOW_NORMAL)
    cv2.resizeWindow("cap",960,640);
    while True:
        ret,img=cap.read()
        if ret==False:
            continue
        cv2.imshow("cap",img)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    cap.release()
    
    cv2.destroyAllWindows()
    
    MFC code:
    void CcvtestDlg::OnBnClickedButton1()
    {
    VideoCapture cap(0);
    cap.set(CAP_PROP_FRAME_WIDTH, 1920);
    cap.set(CAP_PROP_FRAME_HEIGHT, 1080);
    
    cap.set(CAP_CROSSBAR_INPIN_TYPE , 6);
    Mat img;
    namedWindow("test", WINDOW_NORMAL);
    resizeWindow("test", 960, 640);
    while (1)
    {
    if (cap.read(img))
    {
    imshow("test", img);
    if ('q' ==waitKey(1))
    break;
    }
    }
    destroyAllWindows();
    cap.release();
    }
    
    * Update cap_dshow.cpp
    
    * Update videoio.hpp
    
    move enum value of CAP_CROSSBAR_INPIN_TYPE to the end of list
    
    * Update videoio.hpp
    
    * Update cap_dshow.cpp
    
    removed trailing whitespace
    
    * Update test_camera.cpp
    
    Add test for capture device using PhysConn_Video_SerialDigital as crossbar input pin
    
    * Update test_camera.cpp
    
    Correction of misunderstanding about how to add test case.
    eb981cc7
Name
Last commit
Last update
.github Loading commit data...
3rdparty Loading commit data...
apps Loading commit data...
cmake Loading commit data...
data Loading commit data...
doc Loading commit data...
include Loading commit data...
modules Loading commit data...
platforms Loading commit data...
samples Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
CMakeLists.txt Loading commit data...
CONTRIBUTING.md Loading commit data...
LICENSE Loading commit data...
README.md Loading commit data...