summaryrefslogtreecommitdiff
path: root/src/lib/writer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/writer.cc')
-rw-r--r--src/lib/writer.cc13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/lib/writer.cc b/src/lib/writer.cc
index 896d59cfc..39d6f6118 100644
--- a/src/lib/writer.cc
+++ b/src/lib/writer.cc
@@ -75,6 +75,7 @@ Writer::Writer (shared_ptr<const Film> film, weak_ptr<Job> j)
, _finish (false)
, _queued_full_in_memory (0)
, _maximum_frames_in_memory (0)
+ , _maximum_queue_size (0)
, _full_written (0)
, _fake_written (0)
, _repeat_written (0)
@@ -128,7 +129,7 @@ Writer::write (Data encoded, Frame frame, Eyes eyes)
boost::mutex::scoped_lock lock (_state_mutex);
while (_queued_full_in_memory > _maximum_frames_in_memory) {
- /* The queue is too big; wait until that is sorted out */
+ /* There are too many full frames in memory; wait until that is sorted out */
_full_condition.wait (lock);
}
@@ -171,7 +172,7 @@ Writer::repeat (Frame frame, Eyes eyes)
{
boost::mutex::scoped_lock lock (_state_mutex);
- while (_queued_full_in_memory > _maximum_frames_in_memory) {
+ while (_queue.size() > _maximum_queue_size) {
/* The queue is too big; wait until that is sorted out */
_full_condition.wait (lock);
}
@@ -199,7 +200,7 @@ Writer::fake_write (Frame frame, Eyes eyes)
{
boost::mutex::scoped_lock lock (_state_mutex);
- while (_queued_full_in_memory > _maximum_frames_in_memory) {
+ while (_queue.size() > _maximum_queue_size) {
/* The queue is too big; wait until that is sorted out */
_full_condition.wait (lock);
}
@@ -405,6 +406,7 @@ try
}
lock.lock ();
+ _full_condition.notify_all ();
}
while (_queued_full_in_memory > _maximum_frames_in_memory) {
@@ -440,10 +442,8 @@ try
lock.lock ();
i->encoded.reset ();
--_queued_full_in_memory;
+ _full_condition.notify_all ();
}
-
- /* The queue has probably just gone down a bit; notify anything wait()ing on _full_condition */
- _full_condition.notify_all ();
}
}
catch (...)
@@ -713,6 +713,7 @@ void
Writer::set_encoder_threads (int threads)
{
_maximum_frames_in_memory = lrint (threads * Config::instance()->frames_in_memory_multiplier());
+ _maximum_queue_size = lrint (threads * 16);
}
void