X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Flib%2Fdcp_video_frame.cc;h=13d3efcbf2c4c93ff0e5e32068f163ef2aaaf690;hb=cc4a67b7eb8ecaed076e261960848f70e3e741af;hp=d202109d05011863443e7cf1e6eeef513e8cb84a;hpb=794e306a0f5b16cbb49ef9e75e1b9fb88c489b31;p=dcpomatic.git diff --git a/src/lib/dcp_video_frame.cc b/src/lib/dcp_video_frame.cc index d202109d0..13d3efcbf 100644 --- a/src/lib/dcp_video_frame.cc +++ b/src/lib/dcp_video_frame.cc @@ -36,6 +36,7 @@ #include #include #include +#include #include #include #include @@ -55,10 +56,6 @@ #include "image.h" #include "log.h" -#ifdef DEBUG_HASH -#include -#endif - using namespace std; using namespace boost; @@ -75,8 +72,9 @@ using namespace boost; * @param l Log to write to. */ DCPVideoFrame::DCPVideoFrame ( - shared_ptr yuv, Size out, int p, Scaler const * s, int f, float fps, string pp, int clut, int bw, Log* l) + shared_ptr yuv, shared_ptr sub, Size out, int p, Scaler const * s, int f, float fps, string pp, int clut, int bw, Log* l) : _input (yuv) + , _subtitle (sub) , _out_size (out) , _padding (p) , _scaler (s) @@ -255,12 +253,6 @@ DCPVideoFrame::encode_locally () /* Set event manager to null (openjpeg 1.3 bug) */ _cinfo->event_mgr = 0; -#ifdef DEBUG_HASH - md5_data ("J2K in X frame " + lexical_cast (_frame), _image->comps[0].data, size * sizeof (int)); - md5_data ("J2K in Y frame " + lexical_cast (_frame), _image->comps[1].data, size * sizeof (int)); - md5_data ("J2K in Z frame " + lexical_cast (_frame), _image->comps[2].data, size * sizeof (int)); -#endif - /* Setup the encoder parameters using the current image and user parameters */ opj_setup_encoder (_cinfo, _parameters, _image); @@ -271,15 +263,7 @@ DCPVideoFrame::encode_locally () throw EncodeError ("jpeg2000 encoding failed"); } -#ifdef DEBUG_HASH - md5_data ("J2K out frame " + lexical_cast (_frame), _cio->buffer, cio_tell (_cio)); -#endif - - { - stringstream s; - s << "Finished locally-encoded frame " << _frame; - _log->log (s.str ()); - } + _log->log (String::compose ("Finished locally-encoded frame %1", _frame)); return shared_ptr (new LocallyEncodedData (_cio->buffer, cio_tell (_cio))); } @@ -293,20 +277,12 @@ DCPVideoFrame::encode_remotely (ServerDescription const * serv) { asio::io_service io_service; asio::ip::tcp::resolver resolver (io_service); - asio::ip::tcp::resolver::query query (serv->host_name(), boost::lexical_cast (Config::instance()->server_port ())); asio::ip::tcp::resolver::iterator endpoint_iterator = resolver.resolve (query); - shared_ptr socket (new asio::ip::tcp::socket (io_service)); + Socket socket; - DeadlineWrapper wrapper (io_service); - wrapper.set_socket (socket); - - wrapper.connect (*endpoint_iterator, 30); - -#ifdef DEBUG_HASH - _input->hash ("Input for remote encoding (before sending)"); -#endif + socket.connect (*endpoint_iterator, 30); stringstream s; s << "encode " @@ -321,33 +297,21 @@ DCPVideoFrame::encode_remotely (ServerDescription const * serv) << Config::instance()->colour_lut_index () << " " << Config::instance()->j2k_bandwidth () << " "; - for (int i = 0; i < _input->components(); ++i) { - s << _input->line_size()[i] << " "; - } - - wrapper.write ((uint8_t *) s.str().c_str(), s.str().length() + 1, 30); + socket.write ((uint8_t *) s.str().c_str(), s.str().length() + 1, 30); for (int i = 0; i < _input->components(); ++i) { - wrapper.write (_input->data()[i], _input->line_size()[i] * _input->lines(i), 30); + socket.write (_input->data()[i], _input->line_size()[i] * _input->lines(i), 30); } char buffer[32]; - wrapper.read_indefinite ((uint8_t *) buffer, sizeof (buffer), 30); - wrapper.consume (strlen (buffer) + 1); + socket.read_indefinite ((uint8_t *) buffer, sizeof (buffer), 30); + socket.consume (strlen (buffer) + 1); shared_ptr e (new RemotelyEncodedData (atoi (buffer))); /* now read the rest */ - wrapper.read_definite_and_consume (e->data(), e->size(), 30); - -#ifdef DEBUG_HASH - e->hash ("Encoded image (after receiving)"); -#endif + socket.read_definite_and_consume (e->data(), e->size(), 30); - { - stringstream s; - s << "Finished remotely-encoded frame " << _frame; - _log->log (s.str ()); - } + _log->log (String::compose ("Finished remotely-encoded frame %1", _frame)); return e; } @@ -370,29 +334,29 @@ EncodedData::write (shared_ptr opt, int frame) fwrite (_data, 1, _size, f); fclose (f); + string const real_j2k = opt->frame_out_path (frame, false); + /* Rename the file from foo.j2c.tmp to foo.j2c now that it is complete */ - filesystem::rename (tmp_j2k, opt->frame_out_path (frame, false)); + filesystem::rename (tmp_j2k, real_j2k); + + /* Write a file containing the hash */ + string const hash = real_j2k + ".md5"; + ofstream h (hash.c_str()); + h << md5_digest (_data, _size) << "\n"; + h.close (); } /** Send this data to a socket. * @param socket Socket */ void -EncodedData::send (shared_ptr socket) +EncodedData::send (shared_ptr socket) { stringstream s; s << _size; - asio::write (*socket, asio::buffer (s.str().c_str(), s.str().length() + 1)); - asio::write (*socket, asio::buffer (_data, _size)); -} - -#ifdef DEBUG_HASH -void -EncodedData::hash (string n) const -{ - md5_data (n, _data, _size); + socket->write ((uint8_t *) s.str().c_str(), s.str().length() + 1, 30); + socket->write (_data, _size, 30); } -#endif /** @param s Size of data in bytes */ RemotelyEncodedData::RemotelyEncodedData (int s)