• 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
..
calib3d Loading commit data...
core Loading commit data...
dnn Loading commit data...
features2d Loading commit data...
flann Loading commit data...
gapi Loading commit data...
highgui Loading commit data...
imgcodecs Loading commit data...
imgproc Loading commit data...
java Loading commit data...
js Loading commit data...
ml Loading commit data...
objdetect Loading commit data...
photo Loading commit data...
python Loading commit data...
shape Loading commit data...
stitching Loading commit data...
superres Loading commit data...
ts Loading commit data...
video Loading commit data...
videoio Loading commit data...
videostab Loading commit data...
viz Loading commit data...
world Loading commit data...
CMakeLists.txt Loading commit data...