OSDN Git Service

1.7.0
[psychlops/cpp.git] / psychlops / platform / cv / psychlops_misc_opencv.cpp
index 86dc94a..3c18e02 100644 (file)
@@ -14,7 +14,7 @@
 
 namespace Psychlops {\r
 \r
-       Figures::Movie& Figures::Movie::save(std::string filename, const double t_fps) {\r
+       Figures::Movie& Figures::Movie::save(std::string filename, const double t_fps, const FOURCC codec) {\r
                double fps;\r
                if(t_fps<=0.0) { fps = 60.0; } else { fps = t_fps; }\r
                if(frames.size()>0)\r
@@ -22,7 +22,40 @@ namespace Psychlops {
                        std::cout << "Movie::save : in progress...";\r
                        cv::Size size_of_frame(frames[0]->getWidth(), frames[0]->getHeight());\r
                        cv::Mat frame;\r
-                       cv::VideoWriter writer(filename, CV_FOURCC('X','V','I','D'), fps, size_of_frame);\r
+                       int fourcc = 0;\r
+                       switch(codec) {\r
+                       case AUTO:\r
+                               unsigned int loc;\r
+                               loc = filename.find(".avi",0);\r
+                               if( loc != std::string::npos ) { fourcc = CV_FOURCC('M','J','P','G'); break; }\r
+                               loc = filename.find(".mov",0);\r
+                               if( loc != std::string::npos ) { fourcc = CV_FOURCC('M','J','P','G'); break; }\r
+                               loc = filename.find(".m4v",0);\r
+                               if( loc != std::string::npos ) { fourcc = CV_FOURCC('M','P','4','V'); break; }\r
+                               break;\r
+                       case DIB:\r
+                               fourcc = CV_FOURCC('D','I','B',' ');\r
+                               break;\r
+                       case HFYU:\r
+                               fourcc = CV_FOURCC('H','F','Y','U');\r
+                               break;\r
+                       case PIM1:\r
+                               fourcc = CV_FOURCC('P','I','M','1');\r
+                               break;\r
+                       case MJPG:\r
+                               fourcc = CV_FOURCC('M','J','P','G');\r
+                               break;\r
+                       case DIVX:\r
+                               fourcc = CV_FOURCC('D','I','V','X');\r
+                               break;\r
+                       case XVID:\r
+                               fourcc = CV_FOURCC('X','V','I','D');\r
+                               break;\r
+                       case MP4V:\r
+                               fourcc = CV_FOURCC('M','P','4','V');\r
+                               break;\r
+                       }\r
+                       cv::VideoWriter writer(filename, fourcc, fps, size_of_frame);\r
                        for(int i=0; i<frames.size(); i++)\r
                        {\r
                                frames[i]->to(frame);\r