summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-12-20 17:36:31 +0000
committerCarl Hetherington <cth@carlh.net>2013-12-20 17:36:31 +0000
commit9b21d77dccc88d9b77085e05845e0b8e2d606b3b (patch)
tree03d962ff6ebda619a9e749cc3d235d9b687a0de7 /src/lib
parent570d4c4489b49c3915674085ee24414f738cb914 (diff)
Some small optimisations to player.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/encoder.cc2
-rw-r--r--src/lib/image.cc7
-rw-r--r--src/lib/player.cc21
-rw-r--r--src/lib/player.h4
4 files changed, 25 insertions, 9 deletions
diff --git a/src/lib/encoder.cc b/src/lib/encoder.cc
index f8a597191..046a3248e 100644
--- a/src/lib/encoder.cc
+++ b/src/lib/encoder.cc
@@ -216,7 +216,7 @@ Encoder::process_video (shared_ptr<PlayerImage> image, Eyes eyes, ColourConversi
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(),
+ image->image(PIX_FMT_RGB24, false), _video_frames_out, eyes, conversion, _film->video_frame_rate(),
_film->j2k_bandwidth(), _film->log()
)
));
diff --git a/src/lib/image.cc b/src/lib/image.cc
index 95bf2b04d..18ddbc98d 100644
--- a/src/lib/image.cc
+++ b/src/lib/image.cc
@@ -31,6 +31,7 @@ extern "C" {
#include "image.h"
#include "exceptions.h"
#include "scaler.h"
+#include "timer.h"
using std::string;
using std::min;
@@ -94,9 +95,9 @@ Image::crop_scale_window (Crop crop, libdcp::Size inter_size, libdcp::Size out_s
libdcp::Size cropped_size = crop.apply (size ());
struct SwsContext* scale_context = sws_getContext (
- cropped_size.width, cropped_size.height, pixel_format(),
- inter_size.width, inter_size.height, out_format,
- scaler->ffmpeg_id (), 0, 0, 0
+ cropped_size.width, cropped_size.height, pixel_format(),
+ inter_size.width, inter_size.height, out_format,
+ scaler->ffmpeg_id (), 0, 0, 0
);
uint8_t* scale_in_data[components()];
diff --git a/src/lib/player.cc b/src/lib/player.cc
index d1098be24..daefd6db0 100644
--- a/src/lib/player.cc
+++ b/src/lib/player.cc
@@ -71,6 +71,7 @@ Player::Player (shared_ptr<const Film> f, shared_ptr<const Playlist> p)
, _audio_merger (f->audio_channels(), bind (&Film::time_to_audio_frames, f.get(), _1), bind (&Film::audio_frames_to_time, f.get(), _1))
, _last_emit_was_black (false)
, _just_did_inaccurate_seek (false)
+ , _approximate_size (false)
{
_playlist_changed_connection = _playlist->Changed.connect (bind (&Player::playlist_changed, this));
_playlist_content_changed_connection = _playlist->ContentChanged.connect (bind (&Player::content_changed, this, _1, _2, _3));
@@ -207,7 +208,11 @@ Player::emit_video (weak_ptr<Piece> weak_piece, shared_ptr<DecodedVideo> video)
}
float const ratio = content->ratio() ? content->ratio()->ratio() : content->video_size_after_crop().ratio();
- libdcp::Size const image_size = fit_ratio_within (ratio, _video_container_size);
+ libdcp::Size image_size = fit_ratio_within (ratio, _video_container_size);
+ if (_approximate_size) {
+ image_size.width &= ~3;
+ image_size.height &= ~3;
+ }
shared_ptr<PlayerImage> pi (
new PlayerImage (
@@ -600,6 +605,13 @@ Player::repeat_last_video ()
return true;
}
+void
+Player::set_approximate_size ()
+{
+ _approximate_size = true;
+}
+
+
PlayerImage::PlayerImage (
shared_ptr<const Image> in,
Crop crop,
@@ -624,10 +636,10 @@ PlayerImage::set_subtitle (shared_ptr<const Image> image, Position<int> pos)
}
shared_ptr<Image>
-PlayerImage::image ()
+PlayerImage::image (AVPixelFormat format, bool aligned)
{
- shared_ptr<Image> out = _in->crop_scale_window (_crop, _inter_size, _out_size, _scaler, PIX_FMT_RGB24, false);
-
+ shared_ptr<Image> out = _in->crop_scale_window (_crop, _inter_size, _out_size, _scaler, format, aligned);
+
Position<int> const container_offset ((_out_size.width - _inter_size.width) / 2, (_out_size.height - _inter_size.width) / 2);
if (_subtitle_image) {
@@ -636,3 +648,4 @@ PlayerImage::image ()
return out;
}
+
diff --git a/src/lib/player.h b/src/lib/player.h
index 35ffdcca9..b4454b859 100644
--- a/src/lib/player.h
+++ b/src/lib/player.h
@@ -49,7 +49,7 @@ public:
void set_subtitle (boost::shared_ptr<const Image>, Position<int>);
- boost::shared_ptr<Image> image ();
+ boost::shared_ptr<Image> image (AVPixelFormat, bool);
private:
boost::shared_ptr<const Image> _in;
@@ -81,6 +81,7 @@ public:
}
void set_video_container_size (libdcp::Size);
+ void set_approximate_size ();
bool repeat_last_video ();
@@ -162,6 +163,7 @@ private:
} _last_incoming_video;
bool _just_did_inaccurate_seek;
+ bool _approximate_size;
boost::signals2::scoped_connection _playlist_changed_connection;
boost::signals2::scoped_connection _playlist_content_changed_connection;