@@ -371,47 +371,59 @@ CV_IMPL CvCapture * cvCreateFileCapture (const char * filename)
371
371
CV_IMPL CvVideoWriter* cvCreateVideoWriter ( const char * filename, int fourcc,
372
372
double fps, CvSize frameSize, int is_color )
373
373
{
374
- // If none of the writers is used
375
- // these statements suppress 'unused parameter' warnings.
374
+ return cvCreateVideoWriterWithPreference (CV_CAP_ANY, filename, fourcc, fps, frameSize, is_color);
375
+ }
376
+
377
+ CvVideoWriter* cvCreateVideoWriterWithPreference (int apiPreference, const char * filename, int fourcc,
378
+ double fps, CvSize frameSize, int is_color )
379
+ {
376
380
CV_UNUSED (frameSize);
377
381
CV_UNUSED (is_color);
378
382
379
- // CV_FUNCNAME( "cvCreateVideoWriter" );
380
-
381
383
CvVideoWriter *result = 0 ;
382
384
383
385
if (!fourcc || !fps)
384
386
TRY_OPEN (result, cvCreateVideoWriter_Images (filename))
385
387
386
- #ifdef HAVE_FFMPEG
387
- TRY_OPEN (result, cvCreateVideoWriter_FFMPEG_proxy (filename, fourcc, fps, frameSize, is_color))
388
- #endif
389
-
390
- #ifdef HAVE_VFW
391
- TRY_OPEN (result, cvCreateVideoWriter_VFW (filename, fourcc, fps, frameSize, is_color))
392
- #endif
393
-
394
- #ifdef HAVE_MSMF
395
- TRY_OPEN (result, cvCreateVideoWriter_MSMF (filename, fourcc, fps, frameSize, is_color))
396
- #endif
397
-
398
- /* #ifdef HAVE_XINE
399
- TRY_OPEN(result, cvCreateVideoWriter_XINE(filename, fourcc, fps, frameSize, is_color))
400
- #endif
401
- */
402
- #ifdef HAVE_AVFOUNDATION
403
- TRY_OPEN (result, cvCreateVideoWriter_AVFoundation (filename, fourcc, fps, frameSize, is_color))
404
- #endif
405
-
406
- #if defined(HAVE_QUICKTIME) || defined(HAVE_QTKIT)
407
- TRY_OPEN (result, cvCreateVideoWriter_QT (filename, fourcc, fps, frameSize, is_color))
408
- #endif
409
-
410
- #ifdef HAVE_GSTREAMER
411
- TRY_OPEN (result, cvCreateVideoWriter_GStreamer (filename, fourcc, fps, frameSize, is_color))
412
- #endif
413
-
414
- TRY_OPEN (result, cvCreateVideoWriter_Images (filename))
388
+ switch (apiPreference)
389
+ {
390
+ default :
391
+ // exit if the specified API is unavaliable
392
+ if (apiPreference != CV_CAP_ANY) break ;
393
+ #ifdef HAVE_FFMPEG
394
+ case CV_CAP_FFMPEG:
395
+ TRY_OPEN (result, cvCreateVideoWriter_FFMPEG_proxy (filename, fourcc, fps, frameSize, is_color))
396
+ if (apiPreference != CV_CAP_ANY) break ;
397
+ #endif
398
+ #ifdef HAVE_VFW
399
+ case CV_CAP_VFW:
400
+ TRY_OPEN (result, cvCreateVideoWriter_VFW (filename, fourcc, fps, frameSize, is_color))
401
+ if (apiPreference != CV_CAP_ANY) break ;
402
+ #endif
403
+ #ifdef HAVE_MSMF
404
+ case CV_CAP_MSMF:
405
+ TRY_OPEN (result, cvCreateVideoWriter_MSMF (filename, fourcc, fps, frameSize, is_color))
406
+ if (apiPreference != CV_CAP_ANY) break ;
407
+ #endif
408
+ #ifdef HAVE_AVFOUNDATION
409
+ case CV_CAP_AVFOUNDATION:
410
+ TRY_OPEN (result, cvCreateVideoWriter_AVFoundation (filename, fourcc, fps, frameSize, is_color))
411
+ if (apiPreference != CV_CAP_ANY) break ;
412
+ #endif
413
+ #if defined(HAVE_QUICKTIME) || defined(HAVE_QTKIT)
414
+ case (CV_CAP_QT):
415
+ TRY_OPEN (result, cvCreateVideoWriter_QT (filename, fourcc, fps, frameSize, is_color))
416
+ if (apiPreference != CV_CAP_ANY) break ;
417
+ #endif
418
+ #ifdef HAVE_GSTREAMER
419
+ case CV_CAP_GSTREAMER:
420
+ TRY_OPEN (result, cvCreateVideoWriter_GStreamer (filename, fourcc, fps, frameSize, is_color))
421
+ if (apiPreference != CV_CAP_ANY) break ;
422
+ #endif
423
+ case CV_CAP_IMAGES:
424
+ TRY_OPEN (result, cvCreateVideoWriter_Images (filename))
425
+ if (apiPreference != CV_CAP_ANY) break ;
426
+ }
415
427
416
428
return result;
417
429
}
@@ -543,10 +555,11 @@ static Ptr<IVideoCapture> IVideoCapture_create(const String& filename)
543
555
return Ptr<IVideoCapture>();
544
556
}
545
557
546
- static Ptr<IVideoWriter> IVideoWriter_create (const String& filename, int _fourcc, double fps, Size frameSize, bool isColor)
558
+ static Ptr<IVideoWriter> IVideoWriter_create (int apiPreference, const String& filename, int _fourcc, double fps, Size frameSize, bool isColor)
547
559
{
548
560
Ptr<IVideoWriter> iwriter;
549
- if ( _fourcc == CV_FOURCC (' M' , ' J' , ' P' , ' G' ) )
561
+ if ( (apiPreference == CAP_OCV_MJPEG || apiPreference == CAP_ANY)
562
+ && _fourcc == CV_FOURCC (' M' , ' J' , ' P' , ' G' ) )
550
563
iwriter = createMotionJpegWriter (filename, fps, frameSize, isColor);
551
564
return iwriter;
552
565
}
@@ -725,6 +738,12 @@ VideoWriter::VideoWriter(const String& filename, int _fourcc, double fps, Size f
725
738
open (filename, _fourcc, fps, frameSize, isColor);
726
739
}
727
740
741
+
742
+ VideoWriter::VideoWriter (int apiPreference, const String& filename, int _fourcc, double fps, Size frameSize, bool isColor)
743
+ {
744
+ open (apiPreference, filename, _fourcc, fps, frameSize, isColor);
745
+ }
746
+
728
747
void VideoWriter::release ()
729
748
{
730
749
iwriter.release ();
@@ -737,14 +756,19 @@ VideoWriter::~VideoWriter()
737
756
}
738
757
739
758
bool VideoWriter::open (const String& filename, int _fourcc, double fps, Size frameSize, bool isColor)
759
+ {
760
+ return open (CAP_ANY, filename, _fourcc, fps, frameSize, isColor);
761
+ }
762
+
763
+ bool VideoWriter::open (int apiPreference, const String& filename, int _fourcc, double fps, Size frameSize, bool isColor)
740
764
{
741
765
CV_INSTRUMENT_REGION ()
742
766
743
767
if (isOpened ()) release ();
744
- iwriter = IVideoWriter_create (filename, _fourcc, fps, frameSize, isColor);
768
+ iwriter = IVideoWriter_create (apiPreference, filename, _fourcc, fps, frameSize, isColor);
745
769
if (!iwriter.empty ())
746
770
return true ;
747
- writer.reset (cvCreateVideoWriter ( filename.c_str (), _fourcc, fps, frameSize, isColor));
771
+ writer.reset (cvCreateVideoWriterWithPreference (apiPreference, filename.c_str (), _fourcc, fps, frameSize, isColor));
748
772
return isOpened ();
749
773
}
750
774
0 commit comments