X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Flib%2Fencoder.cc;h=83baacd418b7201d91c7af428c4b73fbe8b217ad;hb=5e8f1fb8d6dac786983a8e96cc6ee119506c200a;hp=0c9faa70d331bb722d70ffd17ba924456e344133;hpb=3e12c68dc0451e73b5bc1a84d1d70f4999f7b4b5;p=dcpomatic.git diff --git a/src/lib/encoder.cc b/src/lib/encoder.cc index 0c9faa70d..83baacd41 100644 --- a/src/lib/encoder.cc +++ b/src/lib/encoder.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2012-2014 Carl Hetherington + Copyright (C) 2012-2015 Carl Hetherington This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -21,9 +21,6 @@ * @brief Parent class for classes which can encode video and audio frames. */ -#include -#include -#include #include "encoder.h" #include "util.h" #include "film.h" @@ -36,6 +33,10 @@ #include "server_finder.h" #include "player.h" #include "player_video.h" +#include "data.h" +#include +#include +#include #include "i18n.h" @@ -80,10 +81,12 @@ Encoder::~Encoder () void Encoder::add_worker_threads (ServerDescription d) { - LOG_GENERAL (N_("Adding %1 worker threads for remote %2"), d.host_name ()); + LOG_GENERAL (N_("Adding %1 worker threads for remote %2"), d.threads(), d.host_name ()); for (int i = 0; i < d.threads(); ++i) { _threads.push_back (new boost::thread (boost::bind (&Encoder::encoder_thread, this, d))); } + + _writer->set_encoder_threads (_threads.size ()); } void @@ -93,7 +96,11 @@ Encoder::begin () _threads.push_back (new boost::thread (boost::bind (&Encoder::encoder_thread, this, optional ()))); } - ServerFinder::instance()->connect (boost::bind (&Encoder::server_found, this, _1)); + _writer->set_encoder_threads (_threads.size ()); + + if (!ServerFinder::instance()->disabled ()) { + _server_found_connection = ServerFinder::instance()->connect (boost::bind (&Encoder::server_found, this, _1)); + } } void @@ -127,7 +134,11 @@ Encoder::end () for (list >::iterator i = _queue.begin(); i != _queue.end(); ++i) { LOG_GENERAL (N_("Encode left-over frame %1"), (*i)->index ()); try { - _writer->write ((*i)->encode_locally(), (*i)->index (), (*i)->eyes ()); + _writer->write ( + (*i)->encode_locally (boost::bind (&Log::dcp_log, _film->log().get(), _1, _2)), + (*i)->index (), + (*i)->eyes () + ); frame_done (); } catch (std::exception& e) { LOG_ERROR (N_("Local encode failed (%1)"), e.what ()); @@ -269,7 +280,7 @@ try */ int remote_backoff = 0; shared_ptr last_dcp_video; - shared_ptr last_encoded; + optional last_encoded; while (true) { @@ -290,7 +301,7 @@ try lock.unlock (); - shared_ptr encoded; + optional encoded; if (last_dcp_video && vf->same (last_dcp_video)) { /* We already have encoded data for the same input as this one, so take a short-cut */ @@ -322,7 +333,7 @@ try } else { try { LOG_TIMING ("[%1] encoder thread begins local encode of %2", boost::this_thread::get_id(), vf->index()); - encoded = vf->encode_locally (); + encoded = vf->encode_locally (boost::bind (&Log::dcp_log, _film->log().get(), _1, _2)); LOG_TIMING ("[%1] encoder thread finishes local encode of %2", boost::this_thread::get_id(), vf->index()); } catch (std::exception& e) { LOG_ERROR (N_("Local encode failed (%1)"), e.what ()); @@ -334,7 +345,7 @@ try last_encoded = encoded; if (encoded) { - _writer->write (encoded, vf->index (), vf->eyes ()); + _writer->write (encoded.get(), vf->index (), vf->eyes ()); frame_done (); } else { lock.lock ();