summaryrefslogtreecommitdiff
path: root/src/lib/butler.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2018-11-06 23:06:21 +0000
committerCarl Hetherington <cth@carlh.net>2018-11-06 23:06:21 +0000
commitf41310384889e4cfb6e709d098b316e212d8bf22 (patch)
tree01db47dfe9da145e5428b2ce3df6d23ffcda69c4 /src/lib/butler.cc
parented68bfad5c795afb342c5228f3c1dc7770a6d646 (diff)
Do image crop/scale/window in the butler prepare threads.
Diffstat (limited to 'src/lib/butler.cc')
-rw-r--r--src/lib/butler.cc23
1 files changed, 20 insertions, 3 deletions
diff --git a/src/lib/butler.cc b/src/lib/butler.cc
index 018334c7e..409963016 100644
--- a/src/lib/butler.cc
+++ b/src/lib/butler.cc
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2016-2017 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2016-2018 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
@@ -39,6 +39,7 @@ using boost::weak_ptr;
using boost::shared_ptr;
using boost::bind;
using boost::optional;
+using boost::function;
/** Minimum video readahead in frames */
#define MINIMUM_VIDEO_READAHEAD 10
@@ -49,7 +50,20 @@ using boost::optional;
/** Minimum audio readahead in frames; should never be reached unless there are bugs in Player */
#define MAXIMUM_AUDIO_READAHEAD (48000 * MAXIMUM_VIDEO_READAHEAD / 24)
-Butler::Butler (shared_ptr<Player> player, shared_ptr<Log> log, AudioMapping audio_mapping, int audio_channels)
+/** @param pixel_format Pixel format functor that will be used when calling ::image on PlayerVideos coming out of this
+ * butler. This will be used (where possible) to prepare the PlayerVideos so that calling image() on them is quick().
+ * @param aligned Same as above for the `aligned' flag.
+ * @param fast Same as above for the `fast' flag.
+ */
+Butler::Butler (
+ shared_ptr<Player> player,
+ shared_ptr<Log> log,
+ AudioMapping audio_mapping,
+ int audio_channels,
+ function<AVPixelFormat (AVPixelFormat)> pixel_format,
+ bool aligned,
+ bool fast
+ )
: _player (player)
, _log (log)
, _prepare_work (new boost::asio::io_service::work (_prepare_service))
@@ -61,6 +75,9 @@ Butler::Butler (shared_ptr<Player> player, shared_ptr<Log> log, AudioMapping aud
, _audio_mapping (audio_mapping)
, _audio_channels (audio_channels)
, _disable_audio (false)
+ , _pixel_format (pixel_format)
+ , _aligned (aligned)
+ , _fast (fast)
{
_player_video_connection = _player->Video.connect (bind (&Butler::video, this, _1, _2));
_player_audio_connection = _player->Audio.connect (bind (&Butler::audio, this, _1, _2));
@@ -266,7 +283,7 @@ Butler::prepare (weak_ptr<PlayerVideo> weak_video) const
LOG_TIMING("start-prepare in %1", thread_id());
}
- video->prepare ();
+ video->prepare (_pixel_format, _aligned, _fast);
if (_log) {
LOG_TIMING("finish-prepare in %1", thread_id());