diff options
| author | Carl Hetherington <cth@carlh.net> | 2014-05-14 11:27:17 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2014-05-14 11:27:17 +0100 |
| commit | 5c09a82e483593fb37da0cad20679be735887613 (patch) | |
| tree | 9fb0540536514aa1dc7d4fd4c056c24ca52f59d3 /src | |
| parent | 8f7d0cf115980cb357bc3da410842503930e66b8 (diff) | |
Move Eyes and ColourConversion into PlayerVideoFrame.
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/encoder.cc | 16 | ||||
| -rw-r--r-- | src/lib/encoder.h | 6 | ||||
| -rw-r--r-- | src/lib/player.cc | 12 | ||||
| -rw-r--r-- | src/lib/player.h | 8 | ||||
| -rw-r--r-- | src/lib/player_video_frame.cc | 6 | ||||
| -rw-r--r-- | src/lib/player_video_frame.h | 13 | ||||
| -rw-r--r-- | src/lib/transcoder.cc | 6 | ||||
| -rw-r--r-- | src/tools/server_test.cc | 8 | ||||
| -rw-r--r-- | src/wx/film_viewer.cc | 8 | ||||
| -rw-r--r-- | src/wx/film_viewer.h | 2 |
10 files changed, 51 insertions, 34 deletions
diff --git a/src/lib/encoder.cc b/src/lib/encoder.cc index bb2fe6822..8ae402797 100644 --- a/src/lib/encoder.cc +++ b/src/lib/encoder.cc @@ -180,7 +180,7 @@ Encoder::frame_done () } void -Encoder::process_video (shared_ptr<PlayerVideoFrame> image, Eyes eyes, ColourConversion conversion, bool same) +Encoder::process_video (shared_ptr<PlayerVideoFrame> pvf, bool same) { _waker.nudge (); @@ -207,28 +207,28 @@ Encoder::process_video (shared_ptr<PlayerVideoFrame> image, Eyes eyes, ColourCon rethrow (); if (_writer->can_fake_write (_video_frames_out)) { - _writer->fake_write (_video_frames_out, eyes); - _have_a_real_frame[eyes] = false; + _writer->fake_write (_video_frames_out, pvf->eyes ()); + _have_a_real_frame[pvf->eyes()] = false; frame_done (); - } else if (same && _have_a_real_frame[eyes]) { + } else if (same && _have_a_real_frame[pvf->eyes()]) { /* Use the last frame that we encoded. */ - _writer->repeat (_video_frames_out, eyes); + _writer->repeat (_video_frames_out, pvf->eyes()); frame_done (); } else { /* Queue this new frame for encoding */ TIMING ("adding to queue of %1", _queue.size ()); _queue.push_back (shared_ptr<DCPVideoFrame> ( new DCPVideoFrame ( - image->image(), _video_frames_out, eyes, conversion, _film->video_frame_rate(), + pvf->image(), _video_frames_out, pvf->eyes(), pvf->colour_conversion(), _film->video_frame_rate(), _film->j2k_bandwidth(), _film->resolution(), _film->log() ) )); _condition.notify_all (); - _have_a_real_frame[eyes] = true; + _have_a_real_frame[pvf->eyes()] = true; } - if (eyes != EYES_LEFT) { + if (pvf->eyes() != EYES_LEFT) { ++_video_frames_out; } } diff --git a/src/lib/encoder.h b/src/lib/encoder.h index 5cdda459d..a8ee220aa 100644 --- a/src/lib/encoder.h +++ b/src/lib/encoder.h @@ -67,10 +67,10 @@ public: void process_begin (); /** Call with a frame of video. - * @param i Video frame image. - * @param same true if i is the same as the last time we were called. + * @param pvf Video frame image. + * @param same true if pvf is the same as the last time we were called. */ - void process_video (boost::shared_ptr<PlayerVideoFrame> i, Eyes eyes, ColourConversion, bool same); + void process_video (boost::shared_ptr<PlayerVideoFrame> pvf, bool same); /** Call with some audio data */ void process_audio (boost::shared_ptr<const AudioBuffers>); diff --git a/src/lib/player.cc b/src/lib/player.cc index eb4a3d3a5..a50ab3a37 100644 --- a/src/lib/player.cc +++ b/src/lib/player.cc @@ -216,7 +216,9 @@ Player::process_video (weak_ptr<Piece> weak_piece, shared_ptr<const Image> image content->crop(), image_size, _video_container_size, - _film->scaler() + _film->scaler(), + eyes, + content->colour_conversion() ) ); @@ -252,7 +254,7 @@ Player::process_video (weak_ptr<Piece> weak_piece, shared_ptr<const Image> image _last_video = piece->content; #endif - Video (pi, eyes, content->colour_conversion(), same, time); + Video (pi, same, time); _last_emit_was_black = false; _video_position = piece->video_position = (time + TIME_HZ / _film->video_frame_rate()); @@ -525,7 +527,9 @@ Player::set_video_container_size (libdcp::Size s) Crop(), _video_container_size, _video_container_size, - Scaler::from_id ("bicubic") + Scaler::from_id ("bicubic"), + EYES_BOTH, + ColourConversion () ) ); } @@ -560,7 +564,7 @@ Player::emit_black () _last_video.reset (); #endif - Video (_black_frame, EYES_BOTH, ColourConversion(), _last_emit_was_black, _video_position); + Video (_black_frame, _last_emit_was_black, _video_position); _video_position += _film->video_frames_to_time (1); _last_emit_was_black = true; } diff --git a/src/lib/player.h b/src/lib/player.h index 8f7d9a218..eddd8f6a2 100644 --- a/src/lib/player.h +++ b/src/lib/player.h @@ -65,12 +65,10 @@ public: /** Emitted when a video frame is ready. * First parameter is the video image. - * Second parameter is the eye(s) that should see this image. - * Third parameter is the colour conversion that should be used for this image. - * Fourth parameter is true if the image is the same as the last one that was emitted. - * Fifth parameter is the time. + * Second parameter is true if the frame is the same as the last one that was emitted. + * Third parameter is the time. */ - boost::signals2::signal<void (boost::shared_ptr<PlayerVideoFrame>, Eyes, ColourConversion, bool, Time)> Video; + boost::signals2::signal<void (boost::shared_ptr<PlayerVideoFrame>, bool, Time)> Video; /** Emitted when some audio data is ready */ boost::signals2::signal<void (boost::shared_ptr<const AudioBuffers>, Time)> Audio; diff --git a/src/lib/player_video_frame.cc b/src/lib/player_video_frame.cc index 1c456a253..571c18b6e 100644 --- a/src/lib/player_video_frame.cc +++ b/src/lib/player_video_frame.cc @@ -27,13 +27,17 @@ PlayerVideoFrame::PlayerVideoFrame ( Crop crop, libdcp::Size inter_size, libdcp::Size out_size, - Scaler const * scaler + Scaler const * scaler, + Eyes eyes, + ColourConversion colour_conversion ) : _in (in) , _crop (crop) , _inter_size (inter_size) , _out_size (out_size) , _scaler (scaler) + , _eyes (eyes) + , _colour_conversion (colour_conversion) { } diff --git a/src/lib/player_video_frame.h b/src/lib/player_video_frame.h index 51ec7664f..42d345c9a 100644 --- a/src/lib/player_video_frame.h +++ b/src/lib/player_video_frame.h @@ -20,6 +20,7 @@ #include <boost/shared_ptr.hpp> #include "types.h" #include "position.h" +#include "colour_conversion.h" class Image; class Scaler; @@ -31,18 +32,28 @@ class Scaler; class PlayerVideoFrame { public: - PlayerVideoFrame (boost::shared_ptr<const Image>, Crop, libdcp::Size, libdcp::Size, Scaler const *); + PlayerVideoFrame (boost::shared_ptr<const Image>, Crop, libdcp::Size, libdcp::Size, Scaler const *, Eyes, ColourConversion); void set_subtitle (boost::shared_ptr<const Image>, Position<int>); boost::shared_ptr<Image> image (); + Eyes eyes () const { + return _eyes; + } + + ColourConversion colour_conversion () const { + return _colour_conversion; + } + private: boost::shared_ptr<const Image> _in; Crop _crop; libdcp::Size _inter_size; libdcp::Size _out_size; Scaler const * _scaler; + Eyes _eyes; + ColourConversion _colour_conversion; boost::shared_ptr<const Image> _subtitle_image; Position<int> _subtitle_position; }; diff --git a/src/lib/transcoder.cc b/src/lib/transcoder.cc index cd729fc22..b11ce8be5 100644 --- a/src/lib/transcoder.cc +++ b/src/lib/transcoder.cc @@ -40,11 +40,11 @@ using boost::weak_ptr; using boost::dynamic_pointer_cast; static void -video_proxy (weak_ptr<Encoder> encoder, shared_ptr<PlayerVideoFrame> image, Eyes eyes, ColourConversion conversion, bool same) +video_proxy (weak_ptr<Encoder> encoder, shared_ptr<PlayerVideoFrame> pvf, bool same) { shared_ptr<Encoder> e = encoder.lock (); if (e) { - e->process_video (image, eyes, conversion, same); + e->process_video (pvf, same); } } @@ -66,7 +66,7 @@ Transcoder::Transcoder (shared_ptr<const Film> f, shared_ptr<Job> j) , _encoder (new Encoder (f, j)) , _finishing (false) { - _player->Video.connect (bind (video_proxy, _encoder, _1, _2, _3, _4)); + _player->Video.connect (bind (video_proxy, _encoder, _1, _2)); _player->Audio.connect (bind (audio_proxy, _encoder, _1)); } diff --git a/src/tools/server_test.cc b/src/tools/server_test.cc index 48d817cfe..6a1e2fa41 100644 --- a/src/tools/server_test.cc +++ b/src/tools/server_test.cc @@ -48,10 +48,10 @@ static shared_ptr<FileLog> log_ (new FileLog ("servomatictest.log")); static int frame = 0; void -process_video (shared_ptr<PlayerVideoFrame> image, Eyes eyes, ColourConversion conversion, Time) +process_video (shared_ptr<PlayerVideoFrame> pvf) { - shared_ptr<DCPVideoFrame> local (new DCPVideoFrame (image->image(), frame, eyes, conversion, film->video_frame_rate(), 250000000, RESOLUTION_2K, log_)); - shared_ptr<DCPVideoFrame> remote (new DCPVideoFrame (image->image(), frame, eyes, conversion, film->video_frame_rate(), 250000000, RESOLUTION_2K, log_)); + shared_ptr<DCPVideoFrame> local (new DCPVideoFrame (pvf->image(), frame, pvf->eyes(), pvf->colour_conversion(), film->video_frame_rate(), 250000000, RESOLUTION_2K, log_)); + shared_ptr<DCPVideoFrame> remote (new DCPVideoFrame (pvf->image(), frame, pvf->eyes(), pvf->colour_conversion(), film->video_frame_rate(), 250000000, RESOLUTION_2K, log_)); cout << "Frame " << frame << ": "; cout.flush (); @@ -146,7 +146,7 @@ main (int argc, char* argv[]) shared_ptr<Player> player = film->make_player (); player->disable_audio (); - player->Video.connect (boost::bind (process_video, _1, _2, _3, _5)); + player->Video.connect (boost::bind (process_video, _1)); bool done = false; while (!done) { done = player->pass (); diff --git a/src/wx/film_viewer.cc b/src/wx/film_viewer.cc index 79f46238c..ed1a2ce41 100644 --- a/src/wx/film_viewer.cc +++ b/src/wx/film_viewer.cc @@ -137,7 +137,7 @@ FilmViewer::set_film (shared_ptr<Film> f) } _player->disable_audio (); - _player->Video.connect (boost::bind (&FilmViewer::process_video, this, _1, _2, _5)); + _player->Video.connect (boost::bind (&FilmViewer::process_video, this, _1, _3)); _player->Changed.connect (boost::bind (&FilmViewer::player_changed, this, _1)); calculate_sizes (); @@ -289,13 +289,13 @@ FilmViewer::check_play_state () } void -FilmViewer::process_video (shared_ptr<PlayerVideoFrame> image, Eyes eyes, Time t) +FilmViewer::process_video (shared_ptr<PlayerVideoFrame> pvf, Time t) { - if (eyes == EYES_RIGHT) { + if (pvf->eyes() == EYES_RIGHT) { return; } - _frame = image->image (); + _frame = pvf->image (); _got_frame = true; set_position_text (t); diff --git a/src/wx/film_viewer.h b/src/wx/film_viewer.h index be8fd9f4e..1e5b6d34d 100644 --- a/src/wx/film_viewer.h +++ b/src/wx/film_viewer.h @@ -59,7 +59,7 @@ private: void slider_moved (); void play_clicked (); void timer (); - void process_video (boost::shared_ptr<PlayerVideoFrame>, Eyes, Time); + void process_video (boost::shared_ptr<PlayerVideoFrame>, Time); void calculate_sizes (); void check_play_state (); void fetch_current_frame_again (); |
