Fix build with newer FFmpeg.
[dcpomatic.git] / src / lib / encode_server.cc
index 9e096fdfac037f852fc820bbd3c2414c8ca325c8..24ba5bc451449bc59ab63d2c71d8ed182eb56a13 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2012-2018 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2012-2021 Carl Hetherington <cth@carlh.net>
 
     This file is part of DCP-o-matic.
 
 
 */
 
+
 /** @file src/encode_server.cc
  *  @brief Class to describe a server to which we can send
  *  encoding work, and a class to implement such a server.
  */
 
+
 #include "encode_server.h"
 #include "util.h"
 #include "dcpomatic_socket.h"
@@ -44,7 +46,6 @@ DCPOMATIC_DISABLE_WARNINGS
 DCPOMATIC_ENABLE_WARNINGS
 #include <boost/algorithm/string.hpp>
 #include <boost/scoped_array.hpp>
-#include <boost/foreach.hpp>
 #ifdef HAVE_VALGRIND_H
 #include <valgrind/memcheck.h>
 #endif
@@ -54,13 +55,15 @@ DCPOMATIC_ENABLE_WARNINGS
 
 #include "i18n.h"
 
+
 using std::string;
 using std::vector;
 using std::list;
 using std::cout;
 using std::cerr;
 using std::fixed;
-using boost::shared_ptr;
+using std::shared_ptr;
+using std::make_shared;
 using boost::thread;
 using boost::bind;
 using boost::scoped_array;
@@ -69,6 +72,7 @@ using dcp::ArrayData;
 using dcp::Size;
 using dcp::raw_convert;
 
+
 EncodeServer::EncodeServer (bool verbose, int num_threads)
 #if !defined(RUNNING_ON_VALGRIND) || RUNNING_ON_VALGRIND == 0
        : Server (ENCODE_FRAME_PORT)
@@ -81,6 +85,7 @@ EncodeServer::EncodeServer (bool verbose, int num_threads)
 
 }
 
+
 EncodeServer::~EncodeServer ()
 {
        boost::this_thread::disable_interruption dis;
@@ -111,6 +116,7 @@ EncodeServer::~EncodeServer ()
        } catch (...) {}
 }
 
+
 /** @param after_read Filled in with gettimeofday() after reading the input from the network.
  *  @param after_encode Filled in with gettimeofday() after encoding the image.
  */
@@ -119,12 +125,12 @@ EncodeServer::process (shared_ptr<Socket> socket, struct timeval& after_read, st
 {
        Socket::ReadDigestScope ds (socket);
 
-       uint32_t length = socket->read_uint32 ();
+       auto length = socket->read_uint32 ();
        scoped_array<char> buffer (new char[length]);
-       socket->read (reinterpret_cast<uint8_t*> (buffer.get()), length);
+       socket->read (reinterpret_cast<uint8_t*>(buffer.get()), length);
 
        string s (buffer.get());
-       shared_ptr<cxml::Document> xml (new cxml::Document ("EncodingRequest"));
+       auto xml = make_shared<cxml::Document>("EncodingRequest");
        xml->read_string (s);
        /* This is a double-check; the server shouldn't even be on the candidate list
           if it is the wrong version, but it doesn't hurt to make sure here.
@@ -135,7 +141,7 @@ EncodeServer::process (shared_ptr<Socket> socket, struct timeval& after_read, st
                return -1;
        }
 
-       shared_ptr<PlayerVideo> pvf (new PlayerVideo (xml, socket));
+       auto pvf = make_shared<PlayerVideo>(xml, socket);
 
        if (!ds.check()) {
                throw NetworkError ("Checksums do not match");
@@ -145,7 +151,7 @@ EncodeServer::process (shared_ptr<Socket> socket, struct timeval& after_read, st
 
        gettimeofday (&after_read, 0);
 
-       ArrayData encoded = dcp_video_frame.encode_locally ();
+       auto encoded = dcp_video_frame.encode_locally ();
 
        gettimeofday (&after_encode, 0);
 
@@ -162,6 +168,7 @@ EncodeServer::process (shared_ptr<Socket> socket, struct timeval& after_read, st
        return dcp_video_frame.index ();
 }
 
+
 void
 EncodeServer::worker_thread ()
 {
@@ -175,7 +182,7 @@ EncodeServer::worker_thread ()
                        return;
                }
 
-               shared_ptr<Socket> socket = _queue.front ();
+               auto socket = _queue.front ();
                _queue.pop_front ();
 
                lock.unlock ();
@@ -208,13 +215,11 @@ EncodeServer::worker_thread ()
                        struct timeval end;
                        gettimeofday (&end, 0);
 
-                       shared_ptr<EncodedLogEntry> e (
-                               new EncodedLogEntry (
-                                       frame, ip,
-                                       seconds(after_read) - seconds(start),
-                                       seconds(after_encode) - seconds(after_read),
-                                       seconds(end) - seconds(after_encode)
-                                       )
+                       auto e = make_shared<EncodedLogEntry>(
+                               frame, ip,
+                               seconds(after_read) - seconds(start),
+                               seconds(after_encode) - seconds(after_read),
+                               seconds(end) - seconds(after_encode)
                                );
 
                        if (_verbose) {
@@ -228,6 +233,7 @@ EncodeServer::worker_thread ()
        }
 }
 
+
 void
 EncodeServer::run ()
 {
@@ -253,11 +259,12 @@ EncodeServer::run ()
        Server::run ();
 }
 
+
 void
 EncodeServer::broadcast_thread ()
 try
 {
-       boost::asio::ip::address address = boost::asio::ip::address_v4::any ();
+       auto address = boost::asio::ip::address_v4::any ();
        boost::asio::ip::udp::endpoint listen_endpoint (address, HELLO_PORT);
 
        _broadcast.socket = new boost::asio::ip::udp::socket (_broadcast.io_service);
@@ -277,6 +284,7 @@ catch (...)
        store_current ();
 }
 
+
 void
 EncodeServer::broadcast_received ()
 {
@@ -285,29 +293,29 @@ EncodeServer::broadcast_received ()
        if (strcmp (_broadcast.buffer, DCPOMATIC_HELLO) == 0) {
                /* Reply to the client saying what we can do */
                xmlpp::Document doc;
-               xmlpp::Element* root = doc.create_root_node ("ServerAvailable");
+               auto root = doc.create_root_node ("ServerAvailable");
                root->add_child("Threads")->add_child_text (raw_convert<string> (_worker_threads.size ()));
                root->add_child("Version")->add_child_text (raw_convert<string> (SERVER_LINK_VERSION));
-               string xml = doc.write_to_string ("UTF-8");
+               auto xml = doc.write_to_string ("UTF-8");
 
                if (_verbose) {
                        cout << "Offering services to master " << _broadcast.send_endpoint.address().to_string () << "\n";
                }
 
                try {
-                       shared_ptr<Socket> socket (new Socket);
+                       auto socket = make_shared<Socket>();
                        socket->connect (boost::asio::ip::tcp::endpoint (_broadcast.send_endpoint.address(), MAIN_SERVER_PRESENCE_PORT));
-                       socket->write (xml.length() + 1);
-                       socket->write ((uint8_t *) xml.c_str(), xml.length() + 1);
+                       socket->write (xml.bytes() + 1);
+                       socket->write ((uint8_t *) xml.c_str(), xml.bytes() + 1);
                } catch (...) {
 
                }
 
                try {
-                       shared_ptr<Socket> socket (new Socket);
+                       auto socket = make_shared<Socket>();
                        socket->connect (boost::asio::ip::tcp::endpoint (_broadcast.send_endpoint.address(), BATCH_SERVER_PRESENCE_PORT));
-                       socket->write (xml.length() + 1);
-                       socket->write ((uint8_t *) xml.c_str(), xml.length() + 1);
+                       socket->write (xml.bytes() + 1);
+                       socket->write ((uint8_t *) xml.c_str(), xml.bytes() + 1);
                } catch (...) {
 
                }
@@ -322,6 +330,7 @@ EncodeServer::broadcast_received ()
        }
 }
 
+
 void
 EncodeServer::handle (shared_ptr<Socket> socket)
 {