]> git.sesse.net Git - casparcg/commitdiff
2.0. ffmpeg_producer: Use timed_wait instead of wait, more stable.
authorRonag <Ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sun, 14 Aug 2011 01:30:12 +0000 (01:30 +0000)
committerRonag <Ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sun, 14 Aug 2011 01:30:12 +0000 (01:30 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@1166 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

modules/ffmpeg/producer/input.cpp

index 43affb46203d39ec87dbbd3393b8b97f4f3fd876..327a39fa6e3cd2a8660393289b06b2c9b8d8826c 100644 (file)
@@ -58,6 +58,7 @@ extern "C"
 namespace caspar {\r
 \r
 static const size_t MAX_BUFFER_COUNT = 32;\r
+static const size_t MIN_BUFFER_COUNT = 4;\r
 static const size_t MAX_BUFFER_SIZE  = 32 * 1000000;\r
        \r
 struct input::implementation : boost::noncopyable\r
@@ -169,7 +170,8 @@ private:
                        {\r
                                {\r
                                        boost::unique_lock<boost::mutex> lock(buffer_mutex_);\r
-                                       buffer_cond_.wait(lock, [this]{return !full();});\r
+                                       while(full())\r
+                                               buffer_cond_.timed_wait(lock, boost::posix_time::millisec(20));\r
                                }\r
                                read_next_packet();                     \r
                        }\r
@@ -256,7 +258,7 @@ private:
 \r
        bool full() const\r
        {\r
-               return is_running_ && (buffer_size_ > MAX_BUFFER_SIZE || buffer_.size() > MAX_BUFFER_COUNT);\r
+               return is_running_ && (buffer_size_ > MAX_BUFFER_SIZE || buffer_.size() > MAX_BUFFER_COUNT) && buffer_.size() > MIN_BUFFER_COUNT;\r
        }\r
 \r
        void seek_frame(int64_t frame, int flags = 0)\r