Fix build with newer FFmpeg.
[dcpomatic.git] / src / lib / j2k_encoder.cc
index 7c6e2347733f361c7054f3bd862b7bf1e2d19357..5dee5ca35af998c07ed1ebcc76684b25c946563c 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2012-2019 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2012-2021 Carl Hetherington <cth@carlh.net>
 
     This file is part of DCP-o-matic.
 
 
 */
 
+
 /** @file src/j2k_encoder.cc
  *  @brief J2K encoder class.
  */
 
+
 #include "j2k_encoder.h"
 #include "util.h"
 #include "film.h"
@@ -41,6 +43,7 @@
 
 #include "i18n.h"
 
+
 using std::list;
 using std::cout;
 using std::exception;
@@ -51,6 +54,7 @@ using boost::optional;
 using dcp::Data;
 using namespace dcpomatic;
 
+
 /** @param film Film that we are encoding.
  *  @param writer Writer that we are using.
  */
@@ -62,21 +66,24 @@ J2KEncoder::J2KEncoder (shared_ptr<const Film> film, shared_ptr<Writer> writer)
        servers_list_changed ();
 }
 
+
 J2KEncoder::~J2KEncoder ()
 {
        boost::mutex::scoped_lock lm (_threads_mutex);
        terminate_threads ();
 }
 
+
 void
 J2KEncoder::begin ()
 {
-       weak_ptr<J2KEncoder> wp = shared_from_this ();
+       auto wp = shared_from_this ();
        _server_found_connection = EncodeServerFinder::instance()->ServersListChanged.connect (
                boost::bind (&J2KEncoder::call_servers_list_changed, wp)
                );
 }
 
+
 /* We don't want the servers-list-changed callback trying to do things
    during destruction of J2KEncoder, and I think this is the neatest way
    to achieve that.
@@ -90,6 +97,7 @@ J2KEncoder::call_servers_list_changed (weak_ptr<J2KEncoder> encoder)
        }
 }
 
+
 void
 J2KEncoder::end ()
 {
@@ -142,6 +150,7 @@ J2KEncoder::end ()
        }
 }
 
+
 /** @return an estimate of the current number of frames we are encoding per second,
  *  if known.
  */
@@ -151,6 +160,7 @@ J2KEncoder::current_encoding_rate () const
        return _history.rate ();
 }
 
+
 /** @return Number of video frames that have been queued for encoding */
 int
 J2KEncoder::video_frames_enqueued () const
@@ -162,6 +172,7 @@ J2KEncoder::video_frames_enqueued () const
        return _last_player_video_time->frames_floor (_film->video_frame_rate ());
 }
 
+
 /** Should be called when a frame has been encoded successfully */
 void
 J2KEncoder::frame_done ()
@@ -169,6 +180,7 @@ J2KEncoder::frame_done ()
        _history.event ();
 }
 
+
 /** Called to request encoding of the next video frame in the DCP.  This is called in order,
  *  so each time the supplied frame is the one after the previous one.
  *  pv represents one video frame, and could be empty if there is nothing to encode
@@ -218,7 +230,7 @@ J2KEncoder::encode (shared_ptr<PlayerVideo> pv, DCPTime time)
                /* This frame already has J2K data, so just write it */
                _writer->write (pv->j2k(), position, pv->eyes ());
                frame_done ();
-       } else if (_last_player_video[pv->eyes()] && _writer->can_repeat(position) && pv->same (_last_player_video[pv->eyes()])) {
+       } else if (_last_player_video[static_cast<int>(pv->eyes())] && _writer->can_repeat(position) && pv->same (_last_player_video[static_cast<int>(pv->eyes())])) {
                LOG_DEBUG_ENCODE("Frame @ %1 REPEAT", to_string(time));
                _writer->repeat (position, pv->eyes ());
        } else {
@@ -239,7 +251,7 @@ J2KEncoder::encode (shared_ptr<PlayerVideo> pv, DCPTime time)
                _empty_condition.notify_all ();
        }
 
-       _last_player_video[pv->eyes()] = pv;
+       _last_player_video[static_cast<int>(pv->eyes())] = pv;
        _last_player_video_time = time;
 }
 
@@ -266,10 +278,13 @@ J2KEncoder::terminate_threads ()
        _threads.reset ();
 }
 
+
 void
 J2KEncoder::encoder_thread (optional<EncodeServerDescription> server)
 try
 {
+       start_of_thread ("J2KEncoder");
+
        if (server) {
                LOG_TIMING ("start-encoder-thread thread=%1 server=%2", thread_id (), server->host_name ());
        } else {
@@ -373,6 +388,7 @@ catch (...)
        _full_condition.notify_all ();
 }
 
+
 void
 J2KEncoder::servers_list_changed ()
 {