Remove command line argument related to container
authorAlexander Nesterov <alexander.nesterov@intel.com>
Tue, 8 May 2018 20:41:05 +0000 (23:41 +0300)
committerAlexander Nesterov <alexander.nesterov@intel.com>
Mon, 14 May 2018 19:32:12 +0000 (16:32 -0300)
samples/cpp/gstreamer_pipeline.cpp

index 19b6187..0d46775 100644 (file)
@@ -18,7 +18,6 @@ class GStreamerPipeline
               "{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') }"
@@ -30,24 +29,29 @@ class GStreamerPipeline
         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; }
@@ -55,7 +59,6 @@ class GStreamerPipeline
     // 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
@@ -423,7 +426,6 @@ class GStreamerPipeline
            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;
@@ -432,6 +434,14 @@ class GStreamerPipeline
 
 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;
+    }
 }