Beispiel #1
0
/**
 * 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;
}
Beispiel #2
0
/**
 * 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;
}