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
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