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.