X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Flib%2Fencoder.cc;h=364d29fbed589228c60b9d304984914e944c1646;hp=cc2deaa9387333b2efbc9a3ed965611fb998c416;hb=b1dc9c3a2f7e55c9afc5bf2d5b465371b048e14f;hpb=a07b5d79f2ac072d550ccb5587fe527c5340e248 diff --git a/src/lib/encoder.cc b/src/lib/encoder.cc index cc2deaa93..364d29fbe 100644 --- a/src/lib/encoder.cc +++ b/src/lib/encoder.cc @@ -78,12 +78,10 @@ Encoder::~Encoder () void Encoder::begin () { - if (!EncodeServerFinder::instance()->disabled ()) { - weak_ptr wp = shared_from_this (); - _server_found_connection = EncodeServerFinder::instance()->ServersListChanged.connect ( - boost::bind (&Encoder::call_servers_list_changed, wp) - ); - } + weak_ptr wp = shared_from_this (); + _server_found_connection = EncodeServerFinder::instance()->ServersListChanged.connect ( + boost::bind (&Encoder::call_servers_list_changed, wp) + ); } /* We don't want the servers-list-changed callback trying to do things @@ -207,11 +205,13 @@ Encoder::encode (shared_ptr pv) boost::mutex::scoped_lock queue_lock (_queue_mutex); - /* Wait until the queue has gone down a bit */ - while (_queue.size() >= threads * 2) { - LOG_TIMING ("decoder-sleep queue=%1", _queue.size()); + /* Wait until the queue has gone down a bit. Allow one thing in the queue even + when there are no threads. + */ + while (_queue.size() >= (threads * 2) + 1) { + LOG_TIMING ("decoder-sleep queue=%1 threads=%2", _queue.size(), threads); _full_condition.wait (queue_lock); - LOG_TIMING ("decoder-wake queue=%1", _queue.size()); + LOG_TIMING ("decoder-wake queue=%1 threads=%2", _queue.size(), threads); } _writer->rethrow (); @@ -304,7 +304,7 @@ try LOG_TIMING ("encoder-wake thread=%1 queue=%2", boost::this_thread::get_id(), _queue.size()); shared_ptr vf = _queue.front (); - LOG_TIMING ("encoder-pop thread=%1 frame=%2 eyes=%3", boost::this_thread::get_id(), vf->index(), vf->eyes ()); + LOG_TIMING ("encoder-pop thread=%1 frame=%2 eyes=%3", boost::this_thread::get_id(), vf->index(), (int) vf->eyes ()); _queue.pop_front (); lock.unlock ();