X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Flib%2Fj2k_encoder.cc;h=10496671c4f5748e6e77b88776f96cab41589f94;hp=f92f2316800cea24818c84a9f2eab986bedd7770;hb=f0c10e92b849566e458bc323f8783a6fe83e52d2;hpb=75538d19688ad8c29c5949de9bff9f044c713936 diff --git a/src/lib/j2k_encoder.cc b/src/lib/j2k_encoder.cc index f92f23168..10496671c 100644 --- a/src/lib/j2k_encoder.cc +++ b/src/lib/j2k_encoder.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2012-2015 Carl Hetherington + Copyright (C) 2012-2019 Carl Hetherington This file is part of DCP-o-matic. @@ -26,6 +26,7 @@ #include "util.h" #include "film.h" #include "log.h" +#include "dcpomatic_log.h" #include "config.h" #include "dcp_video.h" #include "cross.h" @@ -41,14 +42,9 @@ #include "i18n.h" -#define LOG_GENERAL(...) _film->log()->log (String::compose (__VA_ARGS__), LogEntry::TYPE_GENERAL); -#define LOG_GENERAL_NC(...) _film->log()->log (__VA_ARGS__, LogEntry::TYPE_GENERAL); -#define LOG_ERROR(...) _film->log()->log (String::compose (__VA_ARGS__), LogEntry::TYPE_ERROR); -#define LOG_TIMING(...) _film->log()->log (String::compose (__VA_ARGS__), LogEntry::TYPE_TIMING); -#define LOG_DEBUG_ENCODE(...) _film->log()->log (String::compose (__VA_ARGS__), LogEntry::TYPE_DEBUG_ENCODE); - using std::list; using std::cout; +using std::exception; using boost::shared_ptr; using boost::weak_ptr; using boost::optional; @@ -134,9 +130,9 @@ J2KEncoder::end () LOG_GENERAL (N_("Encode left-over frame %1"), (*i)->index ()); try { _writer->write ( - (*i)->encode_locally (boost::bind (&Log::dcp_log, _film->log().get(), _1, _2)), - (*i)->index (), - (*i)->eyes () + (*i)->encode_locally(), + (*i)->index(), + (*i)->eyes() ); frame_done (); } catch (std::exception& e) { @@ -233,8 +229,7 @@ J2KEncoder::encode (shared_ptr pv, DCPTime time) position, _film->video_frame_rate(), _film->j2k_bandwidth(), - _film->resolution(), - _film->log() + _film->resolution() ) )); @@ -255,13 +250,20 @@ J2KEncoder::terminate_threads () int n = 0; for (list::iterator i = _threads.begin(); i != _threads.end(); ++i) { + /* Be careful not to throw in here otherwise _threads will not be clear()ed */ LOG_GENERAL ("Terminating thread %1 of %2", n + 1, _threads.size ()); (*i)->interrupt (); - DCPOMATIC_ASSERT ((*i)->joinable ()); + if (!(*i)->joinable()) { + LOG_ERROR_NC ("About to join() a non-joinable thread"); + } try { (*i)->join (); } catch (boost::thread_interrupted& e) { - /* This is to be expected */ + /* This is to be expected (I think?) */ + } catch (exception& e) { + LOG_ERROR ("join() threw an exception: %1", e.what()); + } catch (...) { + LOG_ERROR_NC ("join() threw an exception"); } delete *i; LOG_GENERAL_NC ("Thread terminated"); @@ -338,7 +340,7 @@ try } else { try { LOG_TIMING ("start-local-encode thread=%1 frame=%2", thread_id(), vf->index()); - encoded = vf->encode_locally (boost::bind (&Log::dcp_log, _film->log().get(), _1, _2)); + encoded = vf->encode_locally (); LOG_TIMING ("finish-local-encode thread=%1 frame=%2", thread_id(), vf->index()); } catch (std::exception& e) { /* This is very bad, so don't cope with it, just pass it on */