]> git.sesse.net Git - casparcg/commitdiff
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches...
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Fri, 28 Oct 2011 09:40:38 +0000 (09:40 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Fri, 28 Oct 2011 09:40:38 +0000 (09:40 +0000)
modules/ffmpeg/producer/audio/audio_decoder.cpp
modules/ffmpeg/producer/muxer/frame_muxer.cpp
modules/ffmpeg/producer/video/video_decoder.cpp

index 3b217643c0be36109532d62a6e5e157ea7acf90e..45942fe9f7bb0a7eec66aa4ad62a61150ceba9a6 100644 (file)
@@ -62,6 +62,8 @@ struct audio_decoder::implementation : public agent, boost::noncopyable
        ITarget<audio_decoder::target_element_t>&                                       target_;\r
 \r
        governor                                                                                                        governor_;\r
+\r
+       tbb::atomic<bool>                                                                                       is_running_;\r
        \r
 public:\r
        explicit implementation(audio_decoder::source_t& source, audio_decoder::target_t& target, AVFormatContext& context, const core::video_format_desc& format_desc) \r
@@ -78,11 +80,14 @@ public:
 \r
                source.link_target(&source_);\r
                \r
+               is_running_ = true;\r
+\r
                start();\r
        }\r
 \r
        ~implementation()\r
        {\r
+               is_running_ = false;\r
                governor_.cancel();\r
                agent::wait(this);\r
        }\r
@@ -93,7 +98,7 @@ public:
 \r
                try\r
                {\r
-                       while(true)\r
+                       while(is_running_)\r
                        {               \r
                                auto ticket = governor_.acquire();\r
                                auto packet = receive(source_);\r
index bf623f23b91f7c423b9c7e399104e1f0db284c39..56bc3971d2ccf7735dc6de489efc4d34802cfc81 100644 (file)
@@ -59,6 +59,8 @@ struct frame_muxer2::implementation : public Concurrency::agent, boost::noncopya
        std::wstring                                                                            filter_str_;\r
 \r
        governor                                                                                        governor_;\r
+\r
+       tbb::atomic<bool>                                                                       is_running_;\r
        \r
        implementation(frame_muxer2::video_source_t* video_source,\r
                                   frame_muxer2::audio_source_t* audio_source,\r
@@ -75,11 +77,13 @@ struct frame_muxer2::implementation : public Concurrency::agent, boost::noncopya
                , frame_factory_(frame_factory)\r
                , governor_(2)\r
        {               \r
+               is_running_ = true;\r
                start();\r
        }\r
 \r
        ~implementation()\r
        {\r
+               is_running_ = false;\r
                governor_.cancel();\r
                agent::wait(this);\r
        }\r
@@ -150,7 +154,7 @@ struct frame_muxer2::implementation : public Concurrency::agent, boost::noncopya
 \r
                try\r
                {\r
-                       while(display())\r
+                       while(is_running_ && display())\r
                        {       \r
                        }                               \r
                }\r
index 9aafd526ada278af97ac8848328e5969c84c57cf..664ed646c26f757f3596ce555da7a471c7cf1c76 100644 (file)
@@ -65,6 +65,8 @@ struct video_decoder::implementation : public Concurrency::agent, boost::noncopy
        ITarget<video_decoder::target_element_t>&                       target_;\r
 \r
        governor                                                                                        governor_;\r
+\r
+       tbb::atomic<bool>                                                                       is_running_;\r
        \r
 public:\r
        explicit implementation(video_decoder::source_t& source, video_decoder::target_t& target, AVFormatContext& context) \r
@@ -82,11 +84,14 @@ public:
                \r
                source.link_target(&source_);\r
                \r
+               is_running_ = true;\r
+\r
                start();\r
        }\r
 \r
        ~implementation()\r
        {\r
+               is_running_ = false;\r
                governor_.cancel();\r
                agent::wait(this);\r
        }\r
@@ -97,7 +102,7 @@ public:
 \r
                try\r
                {\r
-                       while(true)\r
+                       while(is_running_)\r
                        {\r
                                auto ticket = governor_.acquire();\r
                                auto packet = receive(source_);\r