]> git.sesse.net Git - casparcg/commitdiff
[ffmpeg_consumer] #534 Fixed bug in parsing of paths containing -
authorHelge Norberg <helge.norberg@svt.se>
Tue, 17 Jan 2017 14:39:31 +0000 (15:39 +0100)
committerHelge Norberg <helge.norberg@svt.se>
Tue, 17 Jan 2017 14:39:31 +0000 (15:39 +0100)
CHANGELOG
modules/ffmpeg/consumer/ffmpeg_consumer.cpp

index 75269ba29ee366d1e2e59bcecc812b73d229a57d..9d97e91c61e9e0c980a3e41c3d05555bc1d88a7c 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -27,6 +27,7 @@ Consumers
     + Fixed long overdue bug where HD material was always recorded using the\r
       BT.601 color matrix instead of the BT.709 color matrix. RGB codecs like\r
       qtrle was never affected but all the YCbCr based codecs were.\r
+    + Fixed bug in parsing of paths containing -.\r
   o DeckLink consumer:\r
     + Fixed possible dead-lock in frame queue.\r
 \r
index 25f2b87b01dd695f08b5a9043e21ba7098f2b48e..188fa418878652b424ef1b324ae24d80e87943ec 100644 (file)
@@ -247,30 +247,37 @@ public:
        {
                if(oc_)
                {
-                       video_encoder_executor_.begin_invoke([&] { encode_video(core::const_frame::empty(), nullptr); });
-                       audio_encoder_executor_.begin_invoke([&] { encode_audio(core::const_frame::empty(), nullptr); });
+                       try
+                       {
+                               video_encoder_executor_.begin_invoke([&] { encode_video(core::const_frame::empty(), nullptr); });
+                               audio_encoder_executor_.begin_invoke([&] { encode_audio(core::const_frame::empty(), nullptr); });
 
-                       video_encoder_executor_.stop();
-                       audio_encoder_executor_.stop();
-                       video_encoder_executor_.join();
-                       audio_encoder_executor_.join();
+                               video_encoder_executor_.stop();
+                               audio_encoder_executor_.stop();
+                               video_encoder_executor_.join();
+                               audio_encoder_executor_.join();
 
-                       video_graph_.reset();
-                       audio_filter_.reset();
-                       video_st_.reset();
-                       audio_sts_.clear();
+                               video_graph_.reset();
+                               audio_filter_.reset();
+                               video_st_.reset();
+                               audio_sts_.clear();
 
-                       write_packet(nullptr, nullptr);
+                               write_packet(nullptr, nullptr);
 
-                       write_executor_.stop();
-                       write_executor_.join();
+                               write_executor_.stop();
+                               write_executor_.join();
 
-                       FF(av_write_trailer(oc_.get()));
+                               FF(av_write_trailer(oc_.get()));
 
-                       if (!(oc_->oformat->flags & AVFMT_NOFILE) && oc_->pb)
-                               avio_close(oc_->pb);
+                               if (!(oc_->oformat->flags & AVFMT_NOFILE) && oc_->pb)
+                                       avio_close(oc_->pb);
 
-                       oc_.reset();
+                               oc_.reset();
+                       }
+                       catch (...)
+                       {
+                               CASPAR_LOG_CURRENT_EXCEPTION();
+                       }
                }
        }
 
@@ -1303,6 +1310,15 @@ spl::shared_ptr<core::frame_consumer> create_ffmpeg_consumer(
        bool mono_streams               = get_and_consume_flag(L"MONO_STREAMS", params2);
        auto compatibility_mode = boost::iequals(params.at(0), L"FILE");
        auto path                               = u8(params2.size() > 1 ? params2.at(1) : L"");
+
+       // remove FILE or STREAM
+       params2.erase(params2.begin());
+
+       // remove path
+       if (!path.empty())
+               params2.erase(params2.begin());
+
+       // join only the args
        auto args                               = u8(boost::join(params2, L" "));
 
        return spl::make_shared<ffmpeg_consumer_proxy>(path, args, separate_key, mono_streams, compatibility_mode);