summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2014-05-14 11:27:17 +0100
committerCarl Hetherington <cth@carlh.net>2014-05-14 11:27:17 +0100
commit5c09a82e483593fb37da0cad20679be735887613 (patch)
tree9fb0540536514aa1dc7d4fd4c056c24ca52f59d3 /src/lib
parent8f7d0cf115980cb357bc3da410842503930e66b8 (diff)
Move Eyes and ColourConversion into PlayerVideoFrame.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/encoder.cc16
-rw-r--r--src/lib/encoder.h6
-rw-r--r--src/lib/player.cc12
-rw-r--r--src/lib/player.h8
-rw-r--r--src/lib/player_video_frame.cc6
-rw-r--r--src/lib/player_video_frame.h13
-rw-r--r--src/lib/transcoder.cc6
7 files changed, 42 insertions, 25 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));
}