From 5b6b01ea778064a0b0125ea8ebd9272a534cccd2 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Mon, 30 Nov 2020 23:49:04 +0100 Subject: [PATCH] Give Butler a weak_ptr --- src/lib/butler.cc | 6 ++++-- src/lib/butler.h | 2 ++ src/lib/ffmpeg_encoder.cc | 2 +- src/wx/film_viewer.cc | 1 + test/butler_test.cc | 2 +- test/dcp_playback_test.cc | 1 + test/player_test.cc | 6 +++--- 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 + Copyright (C) 2016-2020 Carl Hetherington 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 film, shared_ptr 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 film, boost::shared_ptr 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 _film; boost::shared_ptr _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(new Player(film)), map, 6, bind(&PlayerVideo::force, _1, AV_PIX_FMT_RGB24), VIDEO_RANGE_FULL, false, false); + Butler butler (film, shared_ptr(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 ( new Butler( + film, shared_ptr(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 (new Butler (player, AudioMapping(), 2, bind(PlayerVideo::force, _1, AV_PIX_FMT_RGB24), VIDEO_RANGE_FULL, false, true)); + shared_ptr 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 (new Butler(player, AudioMapping(), 2, bind(PlayerVideo::force, _1, AV_PIX_FMT_RGB24), VIDEO_RANGE_FULL, false, true)); + shared_ptr 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 (new Player(film)); player->set_fast (); - shared_ptr butler (new Butler(player, AudioMapping(), 6, bind(&PlayerVideo::force, _1, AV_PIX_FMT_RGB24), VIDEO_RANGE_FULL, false, true)); + shared_ptr 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); -- 2.30.2