"{h help usage ? | | print help messages }"
"{m mode | | coding mode (supported: encode, decode) }"
"{p pipeline |default | pipeline name (supported: 'default', 'gst-basic', 'gst-vaapi', 'gst-libav', 'ffmpeg') }"
- "{ct container |mp4 | container name (supported: 'mp4', 'mov', 'avi', 'mkv') }"
"{cd codec |h264 | codec name (supported: 'h264', 'h265', 'mpeg2', 'mpeg4', 'mjpeg', 'vp8') }"
"{f file path | | path to file }"
"{vr resolution |720p | video resolution for encoding (supported: '720p', '1080p', '4k') }"
if (cmd_parser->has("help"))
{
cmd_parser->printMessage();
- exit_code = -1;
+ CV_Error(Error::StsBadArg, "Called help.");
}
fast_measure = cmd_parser->has("fast"); // fast measure fps
fix_fps = cmd_parser->get<int>("fps"); // fixed frame per second
pipeline = cmd_parser->get<string>("pipeline"), // gstreamer pipeline type
- container = cmd_parser->get<string>("container"), // container type
mode = cmd_parser->get<string>("mode"), // coding mode
codec = cmd_parser->get<string>("codec"), // codec type
file_name = cmd_parser->get<string>("file"), // path to videofile
resolution = cmd_parser->get<string>("resolution"); // video resolution
+ size_t found = file_name.rfind(".");
+ if (found != string::npos)
+ {
+ container = file_name.substr(found + 1); // container type
+ }
+ else { CV_Error(Error::StsBadArg, "Can not parse container extension."); }
+
if (!cmd_parser->check())
{
cmd_parser->printErrors();
- exit_code = -1;
+ CV_Error(Error::StsBadArg, "Failed parse arguments.");
}
- exit_code = 0;
}
~GStreamerPipeline() { delete cmd_parser; }
// Start pipeline
int run()
{
- if (exit_code < 0) { return exit_code; }
if (mode == "decode") { if (createDecodePipeline() < 0) return -1; }
else if (mode == "encode") { if (createEncodePipeline() < 0) return -1; }
else
resolution; // video resolution
int fix_fps; // fixed frame per second
Size fix_size; // fixed frame size
- int exit_code;
VideoWriter wrt;
VideoCapture cap;
ostringstream stream_pipeline;
int main(int argc, char *argv[])
{
- GStreamerPipeline pipe(argc, argv);
- return pipe.run();
+ try
+ {
+ GStreamerPipeline pipe(argc, argv);
+ return pipe.run();
+ }
+ catch(const Exception& e)
+ {
+ cerr << e.what() << endl;
+ return 1;
+ }
}