{
if( pcapture && *pcapture )
{
- CvCapture* capture = *pcapture;
- if( capture && capture->vtable &&
- capture->vtable->count >= CV_CAPTURE_BASE_API_COUNT &&
- capture->vtable->close )
- capture->vtable->close( capture );
- cvFree( pcapture );
+ delete *pcapture;
+ *pcapture = 0;
}
}
CV_IMPL IplImage* cvQueryFrame( CvCapture* capture )
{
- if( capture && capture->vtable &&
- capture->vtable->count >= CV_CAPTURE_BASE_API_COUNT &&
- capture->vtable->grab_frame && capture->vtable->retrieve_frame &&
- capture->vtable->grab_frame( capture ))
- return capture->vtable->retrieve_frame( capture );
- return 0;
+ return capture ? capture->queryFrame() : 0;
}
+
CV_IMPL int cvGrabFrame( CvCapture* capture )
{
- if( capture && capture->vtable &&
- capture->vtable->count >= CV_CAPTURE_BASE_API_COUNT &&
- capture->vtable->grab_frame )
- return capture->vtable->grab_frame( capture );
- return 0;
-}
+ return capture ? capture->grabFrame() : 0;
+}
CV_IMPL IplImage* cvRetrieveFrame( CvCapture* capture )
{
- if( capture && capture->vtable &&
- capture->vtable->count >= CV_CAPTURE_BASE_API_COUNT &&
- capture->vtable->retrieve_frame )
- return capture->vtable->retrieve_frame( capture );
- return 0;
-}
+ return capture ? capture->retrieveFrame() : 0;
+}
CV_IMPL double cvGetCaptureProperty( CvCapture* capture, int id )
{
- if( capture && capture->vtable &&
- capture->vtable->count >= CV_CAPTURE_BASE_API_COUNT &&
- capture->vtable->get_property )
- return capture->vtable->get_property( capture, id );
- return 0;
+ return capture ? capture->getProperty(id) : 0;
}
CV_IMPL int cvSetCaptureProperty( CvCapture* capture, int id, double value )
{
- if( capture && capture->vtable &&
- capture->vtable->count >= CV_CAPTURE_BASE_API_COUNT &&
- capture->vtable->set_property )
- return capture->vtable->set_property( capture, id, value );
- return 0;
+ return capture ? capture->setProperty(id, value) : 0;
}
* API that can access a given camera index.
* Add multiples of 100 to select an API.
*/
-CV_IMPL CvCapture * cvCaptureFromCAM (int index)
+CV_IMPL CvCapture * cvCreateCameraCapture (int index)
{
- int domains[] =
+ int domains[] =
{
- CV_CAP_IEEE1394, // identical to CV_CAP_DC1394
- CV_CAP_STEREO,
+ CV_CAP_IEEE1394, // identical to CV_CAP_DC1394
+ CV_CAP_STEREO,
CV_CAP_VFW, // identical to CV_CAP_V4L
- CV_CAP_MIL,
+ CV_CAP_MIL,
CV_CAP_QT,
- -1
+ CV_CAP_UNICAP,
+ -1
};
-
- // interpret preferred interface (0 = autodetect)
- int pref = (index / 100) * 100;
- if (pref)
+
+ // 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++)
+ // try every possibly installed camera API
+ for (int i = 0; domains[i] >= 0; i++)
{
-
// local variable to memorize the captured device
CvCapture *capture;
- switch (domains[i])
+ switch (domains[i])
{
#ifdef HAVE_TYZX
case CV_CAP_STEREO:
- capture = cvCaptureFromCAM_TYZX (index);
+ capture = cvCreateCameraCapture_TYZX (index);
if (capture)
return capture;
+ break;
#endif
- #if defined (HAVE_VFW)
case CV_CAP_VFW:
- capture = cvCaptureFromCAM_VFW (index);
- if (capture)
+ #ifdef HAVE_VFW
+ capture = cvCreateCameraCapture_VFW (index);
+ if (capture)
+ return capture;
+ #endif
+ #if defined (HAVE_CAMV4L) || defined (HAVE_CAMV4L2)
+ capture = cvCreateCameraCapture_V4L (index);
+ if (capture)
+ return capture;
+ #endif
+ #ifdef HAVE_GSTREAMER
+ capture = cvCreateCapture_GStreamer(CV_CAP_GSTREAMER_V4L2, 0);
+ if (capture)
return capture;
- #elif defined (HAVE_CAMV4L) || defined (HAVE_CAMV4L2)
- case CV_CAP_V4L:
- capture = cvCaptureFromCAM_V4L (index);
- if (capture)
+ capture = cvCreateCapture_GStreamer(CV_CAP_GSTREAMER_V4L, 0);
+ if (capture)
return capture;
#endif
+ break;
- #if defined (HAVE_DC1394)
- case CV_CAP_DC1394:
- capture = cvCaptureFromCAM_DC1394 (index);
+ case CV_CAP_FIREWIRE:
+ #ifdef HAVE_DC1394
+ capture = cvCreateCameraCapture_DC1394 (index);
+ if (capture)
+ return capture;
+ #endif
+ #ifdef HAVE_CMU1394
+ capture = cvCreateCameraCapture_CMU (index);
if (capture)
return capture;
- #elif defined (HAVE_CMU1394)
- case CV_CAP_IEEE1394:
- capture = cvCaptureFromCAM_CMU (index);
+ #endif
+ #ifdef HAVE_GSTREAMER
+ capture = cvCreateCapture_GStreamer(CV_CAP_GSTREAMER_1394, 0);
if (capture)
return capture;
#endif
+ break;
#ifdef HAVE_MIL
case CV_CAP_MIL:
- capture = cvCaptureFromCAM_MIL (index);
- if (capture)
+ capture = cvCreateCameraCapture_MIL (index);
+ if (capture)
return capture;
+ break;
#endif
-
+
#ifdef HAVE_QUICKTIME
case CV_CAP_QT:
- capture = cvCaptureFromCAM_QT (index);
+ 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
+
+ }
+ }
// failed open a camera
- return 0;
+ return 0;
}
/**
* Videoreader dispatching method: it tries to find the first
* API that can access a given filename.
*/
-CV_IMPL CvCapture * cvCaptureFromFile (const char * filename)
+CV_IMPL CvCapture * cvCreateFileCapture (const char * filename)
{
CvCapture * result = 0;
-
+
+ if (! result)
+ result = cvCreateFileCapture_Images (filename);
+
#ifdef WIN32
if (! result)
- result = cvCaptureFromFile_Win32 (filename);
+ result = cvCreateFileCapture_Win32 (filename);
#endif
-
+
#ifdef HAVE_XINE
if (! result)
- result = cvCaptureFromFile_XINE (filename);
+ result = cvCreateFileCapture_XINE (filename);
+ #endif
+
+ #ifdef HAVE_GSTREAMER
+ if (! result)
+ result = cvCreateCapture_GStreamer (CV_CAP_GSTREAMER_FILE, filename);
#endif
-
+
#ifdef HAVE_FFMPEG
if (! result)
- result = cvCaptureFromFile_FFMPEG (filename);
+ result = cvCreateFileCapture_FFMPEG (filename);
#endif
-
+
#ifdef HAVE_QUICKTIME
if (! result)
- result = cvCaptureFromFile_QT (filename);
+ result = cvCreateFileCapture_QT (filename);
#endif
return result;
}
-#if !defined WIN32 && !defined HAVE_FFMPEG && !defined HAVE_VFW && !defined HAVE_QUICKTIME
-
-// quick fix for rc1
-
+/**
+ * Videowriter dispatching method: it tries to find the first
+ * API that can write a given stream.
+ */
CV_IMPL CvVideoWriter* cvCreateVideoWriter( const char* filename, int fourcc,
double fps, CvSize frameSize, int is_color )
{
- return 0;
+ CV_FUNCNAME( "cvCreateVideoWriter" );
+
+ CvVideoWriter *result = 0;
+
+ if(!fourcc || !fps)
+ result = cvCreateVideoWriter_Images(filename);
+
+ #ifdef WIN32
+ if(!result)
+ result = cvCreateVideoWriter_Win32(filename, fourcc, fps, frameSize, is_color);
+ #endif
+
+/* #ifdef HAVE_XINE
+ if(!result)
+ result = cvCreateVideoWriter_XINE(filename, fourcc, fps, frameSize, is_color);
+ #endif
+*/
+ #ifdef HAVE_FFMPEG
+ if(!result)
+ result = cvCreateVideoWriter_FFMPEG(filename, fourcc, fps, frameSize, is_color);
+ #endif
+
+ #ifdef HAVE_QUICKTIME
+ if(!result)
+ result = cvCreateVideoWriter_QT(filename, fourcc, fps, frameSize, is_color);
+ #endif
+
+ if(!result)
+ result = cvCreateVideoWriter_Images(filename);
+
+ return result;
}
-CV_IMPL int cvWriteFrame( CvVideoWriter* _writer, const IplImage* image )
+CV_IMPL int cvWriteFrame( CvVideoWriter* writer, const IplImage* image )
{
- return 0;
+ return writer ? writer->writeFrame(image) : 0;
}
-CV_IMPL void cvReleaseVideoWriter( CvVideoWriter** writer )
+CV_IMPL void cvReleaseVideoWriter( CvVideoWriter** pwriter )
{
+ if( pwriter && *pwriter )
+ {
+ delete *pwriter;
+ *pwriter = 0;
+ }
}
-
-#endif