summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2020-11-30 23:49:04 +0100
committerCarl Hetherington <cth@carlh.net>2020-12-01 00:20:51 +0100
commit5b6b01ea778064a0b0125ea8ebd9272a534cccd2 (patch)
treeb9fcb7a7336240e700686c256b6aa29d8b7f7fa7
parentd1a57244622f5f4160d0f58af7fe71a829175345 (diff)
Give Butler a weak_ptr<Film>
-rw-r--r--src/lib/butler.cc6
-rw-r--r--src/lib/butler.h2
-rw-r--r--src/lib/ffmpeg_encoder.cc2
-rw-r--r--src/wx/film_viewer.cc1
-rw-r--r--test/butler_test.cc2
-rw-r--r--test/dcp_playback_test.cc1
-rw-r--r--test/player_test.cc6
7 files changed, 13 insertions, 7 deletions
diff --git a/src/lib/butler.cc b/src/lib/butler.cc
index d27778b70..4ab0092c4 100644
--- a/src/lib/butler.cc
+++ b/src/lib/butler.cc
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2016-2018 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2016-2020 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
@@ -58,6 +58,7 @@ using namespace boost::placeholders;
* @param fast Same as above for the `fast' flag.
*/
Butler::Butler (
+ weak_ptr<const Film> film,
shared_ptr<Player> player,
AudioMapping audio_mapping,
int audio_channels,
@@ -66,7 +67,8 @@ Butler::Butler (
bool aligned,
bool fast
)
- : _player (player)
+ : _film (film)
+ , _player (player)
, _prepare_work (new boost::asio::io_service::work (_prepare_service))
, _pending_seek_accurate (false)
, _suspended (0)
diff --git a/src/lib/butler.h b/src/lib/butler.h
index 6b933be4b..1fe05742f 100644
--- a/src/lib/butler.h
+++ b/src/lib/butler.h
@@ -37,6 +37,7 @@ class Butler : public ExceptionStore, public boost::noncopyable
{
public:
Butler (
+ boost::weak_ptr<const Film> film,
boost::shared_ptr<Player> player,
AudioMapping map,
int audio_channels,
@@ -87,6 +88,7 @@ private:
void player_change (ChangeType type);
void seek_unlocked (dcpomatic::DCPTime position, bool accurate);
+ boost::weak_ptr<const Film> _film;
boost::shared_ptr<Player> _player;
boost::thread _thread;
diff --git a/src/lib/ffmpeg_encoder.cc b/src/lib/ffmpeg_encoder.cc
index 1d8feffa8..443e16939 100644
--- a/src/lib/ffmpeg_encoder.cc
+++ b/src/lib/ffmpeg_encoder.cc
@@ -107,7 +107,7 @@ FFmpegEncoder::FFmpegEncoder (
}
_butler.reset (
- new Butler(_player, map, _output_audio_channels, bind(&PlayerVideo::force, _1, FFmpegFileEncoder::pixel_format(format)), VIDEO_RANGE_VIDEO, true, false)
+ new Butler(_film, _player, map, _output_audio_channels, bind(&PlayerVideo::force, _1, FFmpegFileEncoder::pixel_format(format)), VIDEO_RANGE_VIDEO, true, false)
);
}
diff --git a/src/wx/film_viewer.cc b/src/wx/film_viewer.cc
index e91cdc9a0..bca3631ab 100644
--- a/src/wx/film_viewer.cc
+++ b/src/wx/film_viewer.cc
@@ -212,6 +212,7 @@ FilmViewer::recreate_butler ()
_butler.reset(
new Butler(
+ _film,
_player,
Config::instance()->audio_mapping(_audio_channels),
_audio_channels,
diff --git a/test/butler_test.cc b/test/butler_test.cc
index 8e3e7222f..9340ebe75 100644
--- a/test/butler_test.cc
+++ b/test/butler_test.cc
@@ -55,7 +55,7 @@ BOOST_AUTO_TEST_CASE (butler_test1)
map.set (i, i, 1);
}
- Butler butler (shared_ptr<Player>(new Player(film)), map, 6, bind(&PlayerVideo::force, _1, AV_PIX_FMT_RGB24), VIDEO_RANGE_FULL, false, false);
+ Butler butler (film, shared_ptr<Player>(new Player(film)), map, 6, bind(&PlayerVideo::force, _1, AV_PIX_FMT_RGB24), VIDEO_RANGE_FULL, false, false);
BOOST_CHECK (butler.get_video(true, 0).second == DCPTime());
BOOST_CHECK (butler.get_video(true, 0).second == DCPTime::from_frames(1, 24));
diff --git a/test/dcp_playback_test.cc b/test/dcp_playback_test.cc
index a2cf37866..05554f4ed 100644
--- a/test/dcp_playback_test.cc
+++ b/test/dcp_playback_test.cc
@@ -43,6 +43,7 @@ BOOST_AUTO_TEST_CASE (dcp_playback_test)
shared_ptr<Butler> butler (
new Butler(
+ film,
shared_ptr<Player>(new Player(film)),
AudioMapping(6, 6),
6,
diff --git a/test/player_test.cc b/test/player_test.cc
index 15fb4161d..b5f082e74 100644
--- a/test/player_test.cc
+++ b/test/player_test.cc
@@ -218,7 +218,7 @@ BOOST_AUTO_TEST_CASE (player_seek_test)
player->set_always_burn_open_subtitles ();
player->set_play_referenced ();
- shared_ptr<Butler> butler (new Butler (player, AudioMapping(), 2, bind(PlayerVideo::force, _1, AV_PIX_FMT_RGB24), VIDEO_RANGE_FULL, false, true));
+ shared_ptr<Butler> butler (new Butler (film, player, AudioMapping(), 2, bind(PlayerVideo::force, _1, AV_PIX_FMT_RGB24), VIDEO_RANGE_FULL, false, true));
butler->disable_audio();
for (int i = 0; i < 10; ++i) {
@@ -249,7 +249,7 @@ BOOST_AUTO_TEST_CASE (player_seek_test2)
player->set_always_burn_open_subtitles ();
player->set_play_referenced ();
- shared_ptr<Butler> butler (new Butler(player, AudioMapping(), 2, bind(PlayerVideo::force, _1, AV_PIX_FMT_RGB24), VIDEO_RANGE_FULL, false, true));
+ shared_ptr<Butler> butler (new Butler(film, player, AudioMapping(), 2, bind(PlayerVideo::force, _1, AV_PIX_FMT_RGB24), VIDEO_RANGE_FULL, false, true));
butler->disable_audio();
butler->seek(DCPTime::from_seconds(5), true);
@@ -336,7 +336,7 @@ BOOST_AUTO_TEST_CASE (player_trim_crash)
shared_ptr<Player> player (new Player(film));
player->set_fast ();
- shared_ptr<Butler> butler (new Butler(player, AudioMapping(), 6, bind(&PlayerVideo::force, _1, AV_PIX_FMT_RGB24), VIDEO_RANGE_FULL, false, true));
+ shared_ptr<Butler> butler (new Butler(film, player, AudioMapping(), 6, bind(&PlayerVideo::force, _1, AV_PIX_FMT_RGB24), VIDEO_RANGE_FULL, false, true));
/* Wait for the butler to fill */
dcpomatic_sleep_seconds (5);