diff options
| author | Carl Hetherington <cth@carlh.net> | 2014-07-02 09:47:11 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2014-07-02 09:47:11 +0100 |
| commit | bc9458cbe39a24d22c199c82efab524208dc347d (patch) | |
| tree | b982ff454bfcacc1d5bd3048c10e053ae724feb0 /src/lib | |
| parent | a6c2aa6cad5872d27654553d447cb34185317974 (diff) | |
Clarify that Encoder really just manages video encoding.
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/encoder.cc | 19 | ||||
| -rw-r--r-- | src/lib/encoder.h | 17 | ||||
| -rw-r--r-- | src/lib/transcoder.cc | 13 | ||||
| -rw-r--r-- | src/lib/transcoder.h | 1 |
4 files changed, 21 insertions, 29 deletions
diff --git a/src/lib/encoder.cc b/src/lib/encoder.cc index 591523570..7b21296a2 100644 --- a/src/lib/encoder.cc +++ b/src/lib/encoder.cc @@ -59,11 +59,12 @@ using boost::scoped_array; int const Encoder::_history_size = 25; /** @param f Film that we are encoding */ -Encoder::Encoder (shared_ptr<const Film> f, weak_ptr<Job> j) +Encoder::Encoder (shared_ptr<const Film> f, weak_ptr<Job> j, shared_ptr<Writer> writer) : _film (f) , _job (j) , _video_frames_out (0) , _terminate (false) + , _writer (writer) { } @@ -87,18 +88,17 @@ Encoder::add_worker_threads (ServerDescription d) } void -Encoder::process_begin () +Encoder::begin () { for (int i = 0; i < Config::instance()->num_local_encoding_threads (); ++i) { _threads.push_back (new boost::thread (boost::bind (&Encoder::encoder_thread, this, optional<ServerDescription> ()))); } - _writer.reset (new Writer (_film, _job)); ServerFinder::instance()->connect (boost::bind (&Encoder::server_found, this, _1)); } void -Encoder::process_end () +Encoder::end () { boost::mutex::scoped_lock lock (_mutex); @@ -134,9 +134,6 @@ Encoder::process_end () LOG_ERROR (N_("Local encode failed (%1)"), e.what ()); } } - - _writer->finish (); - _writer.reset (); } /** @return an estimate of the current number of frames we are encoding per second, @@ -181,7 +178,7 @@ Encoder::frame_done () } void -Encoder::process_video (shared_ptr<PlayerVideo> pvf) +Encoder::enqueue (shared_ptr<PlayerVideo> pvf) { _waker.nudge (); @@ -237,12 +234,6 @@ Encoder::process_video (shared_ptr<PlayerVideo> pvf) } void -Encoder::process_audio (shared_ptr<const AudioBuffers> data) -{ - _writer->write (data); -} - -void Encoder::terminate_threads () { { diff --git a/src/lib/encoder.h b/src/lib/encoder.h index 4502b7151..51df0176b 100644 --- a/src/lib/encoder.h +++ b/src/lib/encoder.h @@ -52,31 +52,28 @@ class ServerFinder; class PlayerVideo; /** @class Encoder - * @brief Encoder to J2K and WAV for DCP. + * @brief Class to manage encoding to JPEG2000. * - * Video is supplied to process_video as RGB frames, and audio - * is supplied as uncompressed PCM in blocks of various sizes. + * This class keeps a queue of frames to be encoded and distributes + * the work around threads and encoding servers. */ class Encoder : public boost::noncopyable, public ExceptionStore { public: - Encoder (boost::shared_ptr<const Film> f, boost::weak_ptr<Job>); + Encoder (boost::shared_ptr<const Film> f, boost::weak_ptr<Job>, boost::shared_ptr<Writer>); virtual ~Encoder (); /** Called to indicate that a processing run is about to begin */ - void process_begin (); + void begin (); /** Call with a frame of video. * @param f Video frame. */ - void process_video (boost::shared_ptr<PlayerVideo> f); - - /** Call with some audio data */ - void process_audio (boost::shared_ptr<const AudioBuffers>); + void enqueue (boost::shared_ptr<PlayerVideo> f); /** Called when a processing run has finished */ - void process_end (); + void end (); float current_encoding_rate () const; int video_frames_out () const; diff --git a/src/lib/transcoder.cc b/src/lib/transcoder.cc index 1177830be..df5f0221e 100644 --- a/src/lib/transcoder.cc +++ b/src/lib/transcoder.cc @@ -33,6 +33,7 @@ #include "audio_decoder.h" #include "player.h" #include "job.h" +#include "writer.h" using std::string; using std::cout; @@ -48,7 +49,8 @@ using boost::dynamic_pointer_cast; Transcoder::Transcoder (shared_ptr<const Film> f, shared_ptr<Job> j) : _film (f) , _player (f->make_player ()) - , _encoder (new Encoder (f, j)) + , _writer (new Writer (f, j)) + , _encoder (new Encoder (f, j, _writer)) , _finishing (false) { @@ -57,19 +59,20 @@ Transcoder::Transcoder (shared_ptr<const Film> f, shared_ptr<Job> j) void Transcoder::go () { - _encoder->process_begin (); + _encoder->begin (); DCPTime const frame = DCPTime::from_frames (1, _film->video_frame_rate ()); for (DCPTime t; t < _film->length(); t += frame) { list<shared_ptr<PlayerVideo> > v = _player->get_video (t, true); for (list<shared_ptr<PlayerVideo> >::const_iterator i = v.begin(); i != v.end(); ++i) { - _encoder->process_video (*i); + _encoder->enqueue (*i); } - _encoder->process_audio (_player->get_audio (t, frame, true)); + _writer->write (_player->get_audio (t, frame, true)); } _finishing = true; - _encoder->process_end (); + _encoder->end (); + _writer->finish (); _player->statistics().dump (_film->log ()); } diff --git a/src/lib/transcoder.h b/src/lib/transcoder.h index 25b2ef908..ed0a6b1b5 100644 --- a/src/lib/transcoder.h +++ b/src/lib/transcoder.h @@ -44,6 +44,7 @@ public: private: boost::shared_ptr<const Film> _film; boost::shared_ptr<Player> _player; + boost::shared_ptr<Writer> _writer; boost::shared_ptr<Encoder> _encoder; bool _finishing; }; |
