]> git.sesse.net Git - casparcg/blobdiff - modules/ffmpeg/producer/input.cpp
2.0. ffmpeg_producer: Use timed_wait instead of wait, more stable.
[casparcg] / 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