X-Git-Url: http://git.maemo.org/git/?p=opencv;a=blobdiff_plain;f=otherlibs%2Fhighgui%2Fcvcap.cpp;h=18379c1831b0e5f06b5e18b378c3c52325eb636c;hp=0c9c24a16199bae109ff647b3ddafa509a006ef9;hb=80cd7b93506cc1926882d5fd08a2c74ee9359e29;hpb=467a270adf12425827305759c0c4ea8f5b2b3854 diff --git a/otherlibs/highgui/cvcap.cpp b/otherlibs/highgui/cvcap.cpp index 0c9c24a..18379c1 100644 --- a/otherlibs/highgui/cvcap.cpp +++ b/otherlibs/highgui/cvcap.cpp @@ -56,59 +56,35 @@ CV_IMPL void cvReleaseCapture( CvCapture** pcapture ) { 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; } @@ -118,136 +94,204 @@ CV_IMPL int cvSetCaptureProperty( CvCapture* capture, int id, double value ) * 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