Capture von webcam



  • Hat jemand von euch eine Idee, wie man den Index der Webcam bestimmen kann,
    bzw. das Aufnahmegerät bestimmen kann (hier auf index = 1 gesetzt)?

    #include <windows.h>
    #include <vfw.h>
    
    #define capSendMessage(hWnd, uMsg, wParm, lParam) ((IsWindow(hWnd)) ? SendMessage(hWnd, uMsg, (WPARAM)(wParm), (LPARAM)(lParam)) : 0)
    int capWebCam(char *szFile, int nIndex, int nX, int nY)
    {
        HWND hWndCap = capCreateCaptureWindow("CapWebCam", WS_CHILD, 0, 0, nX, nY, GetDesktopWindow(), 0);
        if(!hWndCap) return FALSE;
    
        if(!capSendMessage(hWndCap, WM_CAP_DRIVER_CONNECT, nIndex, 0)){
            DestroyWindow(hWndCap); return FALSE;    
        }
    
        CAPDRIVERCAPS capDriverCaps;
        memset(&capDriverCaps, 0, sizeof(CAPDRIVERCAPS));
        capSendMessage(hWndCap, WM_CAP_DRIVER_GET_CAPS, sizeof(CAPDRIVERCAPS), &capDriverCaps);
        if(!capDriverCaps.fCaptureInitialized){
            DestroyWindow(hWndCap); return FALSE;
        }
    
        capSendMessage(hWndCap, WM_CAP_SET_SCALE, TRUE, 0);
        capSendMessage(hWndCap, WM_CAP_GRAB_FRAME_NOSTOP, 0, 0);
        capSendMessage(hWndCap, WM_CAP_FILE_SAVEDIB, 0, szFile);
        capSendMessage(hWndCap, WM_CAP_DRIVER_DISCONNECT, 0, 0);
        DestroyWindow(hWndCap);
    
        return TRUE;
    }
    

    Aufruf:

    if(capWebCam("webcam.bmp", 1, 320, 240)){
            MessageBox(HWND_DESKTOP, "Success", "", MB_OK);
        }else{
            MessageBox(HWND_DESKTOP, "Failed", "", MB_OK);
        }
    


  • Die VirtualDub-Leute lesen die Namen der Vfw-Capture-Devices glaube ich direkt irgendwo aus der Registry raus.

    Ansonsten:
    Index durchprobieren und Namen mit capDriverGetName() besorgen.

    Die Capture-Programme die ich kenne, verwenden allerdings allesamt kein Vfw sondern DirectShow.


Anmelden zum Antworten