/** * Camera dispatching method: index is the camera number. * If given an index from 0 to 99, it tries to find the first * API that can access a given camera index. * Add multiples of 100 to select an API. */ CV_IMPL CvCapture * cvCreateCameraCapture (int index) { // interpret preferred interface (0 = autodetect) int pref = (index / 100) * 100; // remove pref from index index -= pref; // local variable to memorize the captured device CvCapture *capture = 0; switch (pref) { default: // user specified an API we do not know // bail out to let the user know that it is not available if (pref) break; #ifdef HAVE_MSMF case CV_CAP_MSMF: if (!capture) capture = cvCreateCameraCapture_MSMF(index); if (pref) break; #endif #ifdef HAVE_TYZX case CV_CAP_STEREO: if (!capture) capture = cvCreateCameraCapture_TYZX(index); if (pref) break; #endif case CV_CAP_VFW: #ifdef HAVE_VFW if (!capture) capture = cvCreateCameraCapture_VFW(index); #endif #if defined HAVE_LIBV4L || defined HAVE_CAMV4L || defined HAVE_CAMV4L2 || defined HAVE_VIDEOIO if (!capture) capture = cvCreateCameraCapture_V4L(index); #endif #ifdef HAVE_GSTREAMER if (!capture) capture = cvCreateCapture_GStreamer(CV_CAP_GSTREAMER_V4L2, reinterpret_cast<char *>(index)); if (!capture) capture = cvCreateCapture_GStreamer(CV_CAP_GSTREAMER_V4L, reinterpret_cast<char *>(index)); #endif if (pref) break; // CV_CAP_VFW case CV_CAP_FIREWIRE: #ifdef HAVE_DC1394_2 if (!capture) capture = cvCreateCameraCapture_DC1394_2(index); #endif #ifdef HAVE_DC1394 if (!capture) capture = cvCreateCameraCapture_DC1394(index); #endif #ifdef HAVE_CMU1394 if (!capture) capture = cvCreateCameraCapture_CMU(index); #endif #if defined(HAVE_GSTREAMER) && 0 // Re-enable again when gstreamer 1394 support will land in the backend code if (!capture) capture = cvCreateCapture_GStreamer(CV_CAP_GSTREAMER_1394, 0); #endif if (pref) break; // CV_CAP_FIREWIRE #ifdef HAVE_MIL case CV_CAP_MIL: if (!capture) capture = cvCreateCameraCapture_MIL(index); if (pref) break; #endif #if defined(HAVE_QUICKTIME) || defined(HAVE_QTKIT) case CV_CAP_QT: if (!capture) capture = cvCreateCameraCapture_QT(index); if (pref) break; #endif #ifdef HAVE_UNICAP case CV_CAP_UNICAP: if (!capture) capture = cvCreateCameraCapture_Unicap(index); if (pref) break; #endif #ifdef HAVE_PVAPI case CV_CAP_PVAPI: if (!capture) capture = cvCreateCameraCapture_PvAPI(index); if (pref) break; #endif #ifdef HAVE_OPENNI case CV_CAP_OPENNI: if (!capture) capture = cvCreateCameraCapture_OpenNI(index); if (pref) break; #endif #ifdef HAVE_OPENNI2 case CV_CAP_OPENNI2: if (!capture) capture = cvCreateCameraCapture_OpenNI2(index); if (pref) break; #endif #ifdef HAVE_XIMEA case CV_CAP_XIAPI: if (!capture) capture = cvCreateCameraCapture_XIMEA(index); if (pref) break; #endif #ifdef HAVE_AVFOUNDATION case CV_CAP_AVFOUNDATION: if (!capture) capture = cvCreateCameraCapture_AVFoundation(index); if (pref) break; #endif #ifdef HAVE_GIGE_API case CV_CAP_GIGANETIX: if (!capture) capture = cvCreateCameraCapture_Giganetix(index); if (pref) break; // CV_CAP_GIGANETIX #endif } return capture; }
/** * Camera dispatching method: index is the camera number. * If given an index from 0 to 99, it tries to find the first * API that can access a given camera index. * Add multiples of 100 to select an API. */ CV_IMPL CvCapture * cvCreateCameraCapture (int index) { int domains[] = { #ifdef HAVE_DSHOW CV_CAP_DSHOW, #endif #ifdef HAVE_MSMF CV_CAP_MSMF, #endif #if 1 CV_CAP_IEEE1394, // identical to CV_CAP_DC1394 #endif #ifdef HAVE_TYZX CV_CAP_STEREO, #endif #ifdef HAVE_PVAPI CV_CAP_PVAPI, #endif #if 1 CV_CAP_VFW, // identical to CV_CAP_V4L #endif #ifdef HAVE_MIL CV_CAP_MIL, #endif #if defined(HAVE_QUICKTIME) || defined(HAVE_QTKIT) CV_CAP_QT, #endif #ifdef HAVE_UNICAP CV_CAP_UNICAP, #endif #ifdef HAVE_OPENNI CV_CAP_OPENNI, #endif #ifdef HAVE_ANDROID_NATIVE_CAMERA CV_CAP_ANDROID, #endif #ifdef HAVE_XIMEA CV_CAP_XIAPI, #endif #ifdef HAVE_AVFOUNDATION CV_CAP_AVFOUNDATION, #endif #ifdef HAVE_GIGE_API CV_CAP_GIGANETIX, #endif -1 }; // interpret preferred interface (0 = autodetect) int pref = (index / 100) * 100; if (pref) { domains[0]=pref; index %= 100; domains[1]=-1; } // try every possibly installed camera API for (int i = 0; domains[i] >= 0; i++) { #if defined(HAVE_DSHOW) || \ defined(HAVE_MSMF) || \ defined(HAVE_TYZX) || \ defined(HAVE_VFW) || \ defined(HAVE_LIBV4L) || \ defined(HAVE_CAMV4L) || \ defined(HAVE_CAMV4L2) || \ defined(HAVE_VIDEOIO) || \ defined(HAVE_GSTREAMER) || \ defined(HAVE_DC1394_2) || \ defined(HAVE_DC1394) || \ defined(HAVE_CMU1394) || \ defined(HAVE_MIL) || \ defined(HAVE_QUICKTIME) || \ defined(HAVE_QTKIT) || \ defined(HAVE_UNICAP) || \ defined(HAVE_PVAPI) || \ defined(HAVE_OPENNI) || \ defined(HAVE_XIMEA) || \ defined(HAVE_AVFOUNDATION) || \ defined(HAVE_ANDROID_NATIVE_CAMERA) || \ defined(HAVE_GIGE_API) || \ (0) // local variable to memorize the captured device CvCapture *capture; #endif switch (domains[i]) { #ifdef HAVE_DSHOW case CV_CAP_DSHOW: capture = cvCreateCameraCapture_DShow (index); if (capture) return capture; break; #endif #ifdef HAVE_MSMF case CV_CAP_MSMF: capture = cvCreateCameraCapture_MSMF (index); if (capture) return capture; break; #endif #ifdef HAVE_TYZX case CV_CAP_STEREO: capture = cvCreateCameraCapture_TYZX (index); if (capture) return capture; break; #endif case CV_CAP_VFW: #ifdef HAVE_VFW capture = cvCreateCameraCapture_VFW (index); if (capture) return capture; #endif #if defined HAVE_LIBV4L || defined HAVE_CAMV4L || defined HAVE_CAMV4L2 || defined HAVE_VIDEOIO capture = cvCreateCameraCapture_V4L (index); if (capture) return capture; #endif #ifdef HAVE_GSTREAMER capture = cvCreateCapture_GStreamer(CV_CAP_GSTREAMER_V4L2, 0); if (capture) return capture; capture = cvCreateCapture_GStreamer(CV_CAP_GSTREAMER_V4L, 0); if (capture) return capture; #endif break; //CV_CAP_VFW case CV_CAP_FIREWIRE: #ifdef HAVE_DC1394_2 capture = cvCreateCameraCapture_DC1394_2 (index); if (capture) return capture; #endif #ifdef HAVE_DC1394 capture = cvCreateCameraCapture_DC1394 (index); if (capture) return capture; #endif #ifdef HAVE_CMU1394 capture = cvCreateCameraCapture_CMU (index); if (capture) return capture; #endif #if defined(HAVE_GSTREAMER) && 0 //Re-enable again when gstreamer 1394 support will land in the backend code capture = cvCreateCapture_GStreamer(CV_CAP_GSTREAMER_1394, 0); if (capture) return capture; #endif break; //CV_CAP_FIREWIRE #ifdef HAVE_MIL case CV_CAP_MIL: capture = cvCreateCameraCapture_MIL (index); if (capture) return capture; break; #endif #if defined(HAVE_QUICKTIME) || defined(HAVE_QTKIT) case CV_CAP_QT: capture = cvCreateCameraCapture_QT (index); if (capture) return capture; break; #endif #ifdef HAVE_UNICAP case CV_CAP_UNICAP: capture = cvCreateCameraCapture_Unicap (index); if (capture) return capture; break; #endif #ifdef HAVE_PVAPI case CV_CAP_PVAPI: capture = cvCreateCameraCapture_PvAPI (index); if (capture) return capture; break; #endif #ifdef HAVE_OPENNI case CV_CAP_OPENNI: capture = cvCreateCameraCapture_OpenNI (index); if (capture) return capture; break; #endif #ifdef HAVE_ANDROID_NATIVE_CAMERA case CV_CAP_ANDROID: capture = cvCreateCameraCapture_Android (index); if (capture) return capture; break; #endif #ifdef HAVE_XIMEA case CV_CAP_XIAPI: capture = cvCreateCameraCapture_XIMEA (index); if (capture) return capture; break; #endif #ifdef HAVE_AVFOUNDATION case CV_CAP_AVFOUNDATION: capture = cvCreateCameraCapture_AVFoundation (index); if (capture) return capture; break; #endif #ifdef HAVE_GIGE_API case CV_CAP_GIGANETIX: capture = cvCreateCameraCapture_Giganetix (index); if (capture) return capture; break; // CV_CAP_GIGANETIX #endif } } // failed open a camera return 0; }