summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2020-04-23 15:48:19 +0200
committerCarl Hetherington <cth@carlh.net>2020-04-23 15:48:19 +0200
commit990f879d9af6300068af44c431b1a8e158e7f7a0 (patch)
treeb938ca31af91c256f01eae8c3566a95763eefdfa
parent4b7185e4eda53534c4d71a1f31ba33ca3dd8dc8d (diff)
Nicer fix for 86102d30bf0aad89115bbeb3d8aaa2a27a0aa432
-rw-r--r--src/lib/analyse_audio_job.cc2
-rw-r--r--src/lib/encoder.cc2
-rw-r--r--src/lib/hints.cc2
-rw-r--r--src/lib/player.cc38
-rw-r--r--src/lib/player.h6
-rw-r--r--src/tools/server_test.cc2
-rw-r--r--src/wx/film_viewer.cc3
-rw-r--r--test/butler_test.cc2
-rw-r--r--test/dcp_decoder_test.cc6
-rw-r--r--test/dcp_playback_test.cc2
-rw-r--r--test/ffmpeg_audio_only_test.cc2
-rw-r--r--test/ffmpeg_audio_test.cc4
-rw-r--r--test/ffmpeg_decoder_sequential_test.cc2
-rw-r--r--test/player_test.cc14
-rw-r--r--test/time_calculation_test.cc6
-rw-r--r--test/upmixer_a_test.cc2
-rw-r--r--test/vf_test.cc2
17 files changed, 56 insertions, 41 deletions
diff --git a/src/lib/analyse_audio_job.cc b/src/lib/analyse_audio_job.cc
index ead36bca1..e77f83bde 100644
--- a/src/lib/analyse_audio_job.cc
+++ b/src/lib/analyse_audio_job.cc
@@ -140,7 +140,7 @@ AnalyseAudioJob::json_name () const
void
AnalyseAudioJob::run ()
{
- shared_ptr<Player> player (new Player(_film, _playlist, _playlist->length(_film)));
+ shared_ptr<Player> player (new Player(_film, _playlist));
player->set_ignore_video ();
player->set_ignore_text ();
player->set_fast ();
diff --git a/src/lib/encoder.cc b/src/lib/encoder.cc
index b52507ed1..0a29989b1 100644
--- a/src/lib/encoder.cc
+++ b/src/lib/encoder.cc
@@ -41,7 +41,7 @@ using boost::shared_ptr;
Encoder::Encoder (shared_ptr<const Film> film, weak_ptr<Job> job)
: _film (film)
, _job (job)
- , _player (new Player(film, film->playlist(), film->length()))
+ , _player (new Player(film))
{
}
diff --git a/src/lib/hints.cc b/src/lib/hints.cc
index 68cf82b84..581d63972 100644
--- a/src/lib/hints.cc
+++ b/src/lib/hints.cc
@@ -259,7 +259,7 @@ Hints::thread ()
emit (bind(boost::ref(Progress), _("Examining closed captions")));
- shared_ptr<Player> player (new Player(film, film->playlist(), film->length()));
+ shared_ptr<Player> player (new Player(film));
player->set_ignore_video ();
player->set_ignore_audio ();
player->Text.connect (bind(&Hints::text, this, _1, _2, _4));
diff --git a/src/lib/player.cc b/src/lib/player.cc
index 00650d88d..e41cecf13 100644
--- a/src/lib/player.cc
+++ b/src/lib/player.cc
@@ -85,7 +85,23 @@ int const PlayerProperty::FILM_VIDEO_FRAME_RATE = 703;
int const PlayerProperty::DCP_DECODE_REDUCTION = 704;
int const PlayerProperty::PLAYBACK_LENGTH = 705;
-Player::Player (shared_ptr<const Film> film, shared_ptr<const Playlist> playlist_, DCPTime playback_length)
+Player::Player (shared_ptr<const Film> film)
+ : _film (film)
+ , _suspended (0)
+ , _ignore_video (false)
+ , _ignore_audio (false)
+ , _ignore_text (false)
+ , _always_burn_open_subtitles (false)
+ , _fast (false)
+ , _tolerant (film->tolerant())
+ , _play_referenced (false)
+ , _audio_merger (_film->audio_frame_rate())
+ , _shuffler (0)
+{
+ construct ();
+}
+
+Player::Player (shared_ptr<const Film> film, shared_ptr<const Playlist> playlist_)
: _film (film)
, _playlist (playlist_)
, _suspended (0)
@@ -98,7 +114,12 @@ Player::Player (shared_ptr<const Film> film, shared_ptr<const Playlist> playlist
, _play_referenced (false)
, _audio_merger (_film->audio_frame_rate())
, _shuffler (0)
- , _playback_length (playback_length)
+{
+ construct ();
+}
+
+void
+Player::construct ()
{
_film_changed_connection = _film->Change.connect (bind (&Player::film_change, this, _1, _2));
/* The butler must hear about this first, so since we are proxying this through to the butler we must
@@ -127,15 +148,6 @@ Player::setup_pieces ()
}
-void
-Player::set_playback_length (DCPTime len)
-{
- Change (CHANGE_TYPE_PENDING, PlayerProperty::PLAYBACK_LENGTH, false);
- _playback_length = len;
- Change (CHANGE_TYPE_DONE, PlayerProperty::PLAYBACK_LENGTH, false);
- setup_pieces ();
-}
-
bool
have_video (shared_ptr<const Content> content)
{
@@ -151,6 +163,8 @@ have_audio (shared_ptr<const Content> content)
void
Player::setup_pieces_unlocked ()
{
+ _playback_length = _playlist ? _playlist->length(_film) : _film->length();
+
list<shared_ptr<Piece> > old_pieces = _pieces;
_pieces.clear ();
@@ -1247,6 +1261,6 @@ Player::content_time_to_dcp (shared_ptr<Content> content, ContentTime t)
shared_ptr<const Playlist>
Player::playlist () const
{
- return _playlist;
+ return _playlist ? _playlist : _film->playlist();
}
diff --git a/src/lib/player.h b/src/lib/player.h
index 407f7651a..51de78982 100644
--- a/src/lib/player.h
+++ b/src/lib/player.h
@@ -69,7 +69,8 @@ public:
class Player : public boost::enable_shared_from_this<Player>, public boost::noncopyable
{
public:
- Player (boost::shared_ptr<const Film>, boost::shared_ptr<const Playlist> playlist, dcpomatic::DCPTime playback_length);
+ Player (boost::shared_ptr<const Film>);
+ Player (boost::shared_ptr<const Film>, boost::shared_ptr<const Playlist> playlist);
~Player ();
bool pass ();
@@ -82,7 +83,6 @@ public:
return _video_container_size;
}
- void set_playback_length (dcpomatic::DCPTime len);
void set_video_container_size (dcp::Size);
void set_ignore_video ();
void set_ignore_audio ();
@@ -115,6 +115,7 @@ private:
friend struct empty_test2;
friend struct check_reuse_old_data_test;
+ void construct ();
void setup_pieces ();
void setup_pieces_unlocked ();
void flush ();
@@ -151,6 +152,7 @@ private:
mutable boost::mutex _mutex;
boost::shared_ptr<const Film> _film;
+ /** Playlist, or 0 if we are using the one from the _film */
boost::shared_ptr<const Playlist> _playlist;
/** > 0 if we are suspended (i.e. pass() and seek() do nothing) */
diff --git a/src/tools/server_test.cc b/src/tools/server_test.cc
index 4c410eade..03a99b2e5 100644
--- a/src/tools/server_test.cc
+++ b/src/tools/server_test.cc
@@ -145,7 +145,7 @@ main (int argc, char* argv[])
film.reset (new Film (film_dir));
film->read_metadata ();
- shared_ptr<Player> player (new Player(film, film->playlist(), film->length()));
+ shared_ptr<Player> player (new Player(film));
player->Video.connect (bind (&process_video, _1));
while (!player->pass ()) {}
} catch (std::exception& e) {
diff --git a/src/wx/film_viewer.cc b/src/wx/film_viewer.cc
index bb59122aa..4b9528bc0 100644
--- a/src/wx/film_viewer.cc
+++ b/src/wx/film_viewer.cc
@@ -164,7 +164,7 @@ FilmViewer::set_film (shared_ptr<Film> film)
}
try {
- _player.reset (new Player(_film, _film->playlist(), _film->length()));
+ _player.reset (new Player(_film));
_player->set_fast ();
if (_dcp_decode_reduction) {
_player->set_dcp_decode_reduction (_dcp_decode_reduction);
@@ -406,7 +406,6 @@ void
FilmViewer::film_length_change ()
{
_video_view->set_length (_film->length());
- _player->set_playback_length (_film->length());
}
/** Re-get the current frame slowly by seeking */
diff --git a/test/butler_test.cc b/test/butler_test.cc
index 13efc3131..7575728fd 100644
--- a/test/butler_test.cc
+++ b/test/butler_test.cc
@@ -52,7 +52,7 @@ BOOST_AUTO_TEST_CASE (butler_test1)
map.set (i, i, 1);
}
- Butler butler (shared_ptr<Player>(new Player(film, film->playlist(), film->length())), map, 6, bind(&PlayerVideo::force, _1, AV_PIX_FMT_RGB24), false, false);
+ Butler butler (shared_ptr<Player>(new Player(film)), map, 6, bind(&PlayerVideo::force, _1, AV_PIX_FMT_RGB24), 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_decoder_test.cc b/test/dcp_decoder_test.cc
index 36df09834..231a99da2 100644
--- a/test/dcp_decoder_test.cc
+++ b/test/dcp_decoder_test.cc
@@ -89,7 +89,7 @@ BOOST_AUTO_TEST_CASE (check_reuse_old_data_test)
ov_content.reset (new DCPContent(ov->dir(ov->dcp_name(false))));
test->examine_and_add_content (ov_content);
BOOST_REQUIRE (!wait_for_jobs());
- shared_ptr<Player> player (new Player(test, test->playlist(), test->length()));
+ shared_ptr<Player> player (new Player(test));
shared_ptr<DCPDecoder> decoder = boost::dynamic_pointer_cast<DCPDecoder>(player->_pieces.front()->decoder);
BOOST_REQUIRE (decoder);
@@ -107,7 +107,7 @@ BOOST_AUTO_TEST_CASE (check_reuse_old_data_test)
shared_ptr<DCPContent> vf_content (new DCPContent(vf->dir(vf->dcp_name(false))));
test->examine_and_add_content (vf_content);
BOOST_REQUIRE (!wait_for_jobs());
- player.reset (new Player(test, test->playlist(), test->length()));
+ player.reset (new Player(test));
decoder = boost::dynamic_pointer_cast<DCPDecoder>(player->_pieces.front()->decoder);
BOOST_REQUIRE (decoder);
@@ -125,7 +125,7 @@ BOOST_AUTO_TEST_CASE (check_reuse_old_data_test)
shared_ptr<DCPContent> encrypted_content (new DCPContent(encrypted->dir(encrypted->dcp_name(false))));
test->examine_and_add_content (encrypted_content);
BOOST_REQUIRE (!wait_for_jobs());
- player.reset (new Player(test, test->playlist(), test->length()));
+ player.reset (new Player(test));
decoder = boost::dynamic_pointer_cast<DCPDecoder>(player->_pieces.front()->decoder);
BOOST_REQUIRE (decoder);
diff --git a/test/dcp_playback_test.cc b/test/dcp_playback_test.cc
index e8d916487..0f639587b 100644
--- a/test/dcp_playback_test.cc
+++ b/test/dcp_playback_test.cc
@@ -40,7 +40,7 @@ BOOST_AUTO_TEST_CASE (dcp_playback_test)
shared_ptr<Butler> butler (
new Butler(
- shared_ptr<Player>(new Player(film, film->playlist(), film->length())),
+ shared_ptr<Player>(new Player(film)),
AudioMapping(6, 6),
6,
bind(&PlayerVideo::force, _1, AV_PIX_FMT_RGB24),
diff --git a/test/ffmpeg_audio_only_test.cc b/test/ffmpeg_audio_only_test.cc
index df32cadd4..6fc9f9f2c 100644
--- a/test/ffmpeg_audio_only_test.cc
+++ b/test/ffmpeg_audio_only_test.cc
@@ -92,7 +92,7 @@ test (boost::filesystem::path file)
ref_buffer_size = info.samplerate * info.channels;
ref_buffer = new float[ref_buffer_size];
- shared_ptr<Player> player (new Player(film, film->playlist(), film->length()));
+ shared_ptr<Player> player (new Player(film));
player->Audio.connect (bind (&audio, _1, info.channels));
while (!player->pass ()) {}
diff --git a/test/ffmpeg_audio_test.cc b/test/ffmpeg_audio_test.cc
index 7a9aaf346..6ad6c1fdb 100644
--- a/test/ffmpeg_audio_test.cc
+++ b/test/ffmpeg_audio_test.cc
@@ -134,7 +134,7 @@ BOOST_AUTO_TEST_CASE (ffmpeg_audio_test2)
film->examine_and_add_content (content);
BOOST_REQUIRE (!wait_for_jobs ());
- shared_ptr<Player> player (new Player(film, film->playlist(), film->length()));
+ shared_ptr<Player> player (new Player(film));
while (!player->pass ()) {}
}
@@ -146,7 +146,7 @@ BOOST_AUTO_TEST_CASE (ffmpeg_audio_test3)
film->examine_and_add_content (content);
BOOST_REQUIRE (!wait_for_jobs ());
- shared_ptr<Player> player (new Player(film, film->playlist(), film->length()));
+ shared_ptr<Player> player (new Player(film));
player->set_fast ();
while (!player->pass ()) {}
}
diff --git a/test/ffmpeg_decoder_sequential_test.cc b/test/ffmpeg_decoder_sequential_test.cc
index 041d976fe..d761d9465 100644
--- a/test/ffmpeg_decoder_sequential_test.cc
+++ b/test/ffmpeg_decoder_sequential_test.cc
@@ -65,7 +65,7 @@ ffmpeg_decoder_sequential_test_one (boost::filesystem::path file, float fps, int
film->examine_and_add_content (content);
BOOST_REQUIRE (!wait_for_jobs());
film->write_metadata ();
- shared_ptr<Player> player (new Player(film, film->playlist(), film->length()));
+ shared_ptr<Player> player (new Player(film));
BOOST_REQUIRE (content->video_frame_rate());
BOOST_CHECK_CLOSE (content->video_frame_rate().get(), fps, 0.01);
diff --git a/test/player_test.cc b/test/player_test.cc
index 378e0af9b..6877d7e21 100644
--- a/test/player_test.cc
+++ b/test/player_test.cc
@@ -74,7 +74,7 @@ BOOST_AUTO_TEST_CASE (player_silence_padding_test)
accumulated.reset (new AudioBuffers (film->audio_channels(), 0));
- shared_ptr<Player> player (new Player(film, film->playlist(), film->length()));
+ shared_ptr<Player> player (new Player(film));
player->Audio.connect (bind (&accumulate, _1, _2));
while (!player->pass ()) {}
BOOST_REQUIRE (accumulated->frames() >= 48000);
@@ -149,7 +149,7 @@ BOOST_AUTO_TEST_CASE (player_subframe_test)
/* Length should be rounded up from B's length to the next video frame */
BOOST_CHECK (film->length() == DCPTime::from_frames(3 * 24 + 1, 24));
- shared_ptr<Player> player (new Player(film, film->playlist(), film->length()));
+ shared_ptr<Player> player (new Player(film));
player->setup_pieces ();
BOOST_REQUIRE_EQUAL (player->_black._periods.size(), 1);
BOOST_CHECK (player->_black._periods.front() == DCPTimePeriod(DCPTime::from_frames(3 * 24, 24), DCPTime::from_frames(3 * 24 + 1, 24)));
@@ -188,7 +188,7 @@ BOOST_AUTO_TEST_CASE (player_interleave_test)
film->examine_and_add_content (s);
BOOST_REQUIRE (!wait_for_jobs ());
- shared_ptr<Player> player (new Player(film, film->playlist(), film->length()));
+ shared_ptr<Player> player (new Player(film));
player->Video.connect (bind (&video, _1, _2));
player->Audio.connect (bind (&audio, _1, _2));
video_frames = audio_frames = 0;
@@ -210,7 +210,7 @@ BOOST_AUTO_TEST_CASE (player_seek_test)
BOOST_REQUIRE (!wait_for_jobs ());
dcp->only_text()->set_use (true);
- shared_ptr<Player> player (new Player(film, film->playlist(), film->length()));
+ shared_ptr<Player> player (new Player(film));
player->set_fast ();
player->set_always_burn_open_subtitles ();
player->set_play_referenced ();
@@ -241,7 +241,7 @@ BOOST_AUTO_TEST_CASE (player_seek_test2)
BOOST_REQUIRE (!wait_for_jobs ());
dcp->only_text()->set_use (true);
- shared_ptr<Player> player (new Player(film, film->playlist(), film->length()));
+ shared_ptr<Player> player (new Player(film));
player->set_fast ();
player->set_always_burn_open_subtitles ();
player->set_play_referenced ();
@@ -310,7 +310,7 @@ BOOST_AUTO_TEST_CASE (player_ignore_video_and_audio_test)
text->only_text()->set_type (TEXT_CLOSED_CAPTION);
text->only_text()->set_use (true);
- shared_ptr<Player> player (new Player(film, film->playlist(), film->length()));
+ shared_ptr<Player> player (new Player(film));
player->set_ignore_video ();
player->set_ignore_audio ();
@@ -329,7 +329,7 @@ BOOST_AUTO_TEST_CASE (player_trim_crash)
film->examine_and_add_content (boon);
BOOST_REQUIRE (!wait_for_jobs());
- shared_ptr<Player> player (new Player(film, film->playlist(), film->length()));
+ 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), false, true));
diff --git a/test/time_calculation_test.cc b/test/time_calculation_test.cc
index f6412d9de..dbcf2677b 100644
--- a/test/time_calculation_test.cc
+++ b/test/time_calculation_test.cc
@@ -190,7 +190,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test1)
film->set_sequence (false);
film->add_content (content);
- shared_ptr<Player> player (new Player(film, film->playlist(), film->length()));
+ shared_ptr<Player> player (new Player(film));
/* Position 0, no trim, content rate = DCP rate */
content->set_position (film, DCPTime());
@@ -396,7 +396,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test2)
film->set_sequence (false);
film->add_content (content);
- shared_ptr<Player> player (new Player(film, film->playlist(), film->length()));
+ shared_ptr<Player> player (new Player(film));
/* Position 0, no trim, content rate = DCP rate */
content->set_position (film, DCPTime());
@@ -573,7 +573,7 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test3)
film->set_sequence (false);
film->add_content (content);
- shared_ptr<Player> player (new Player(film, film->playlist(), film->length()));
+ shared_ptr<Player> player (new Player(film));
/* Position 0, no trim, video/audio content rate = video/audio DCP rate */
content->set_position (film, DCPTime());
diff --git a/test/upmixer_a_test.cc b/test/upmixer_a_test.cc
index a00a77add..ba07eafd1 100644
--- a/test/upmixer_a_test.cc
+++ b/test/upmixer_a_test.cc
@@ -79,7 +79,7 @@ BOOST_AUTO_TEST_CASE (upmixer_a_test)
Ls = sf_open ("build/test/upmixer_a_test/Ls.wav", SFM_WRITE, &info);
Rs = sf_open ("build/test/upmixer_a_test/Rs.wav", SFM_WRITE, &info);
- shared_ptr<Player> player (new Player(film, film->playlist(), film->length()));
+ shared_ptr<Player> player (new Player(film));
player->Audio.connect (bind (&write, _1, _2));
while (!player->pass()) {}
diff --git a/test/vf_test.cc b/test/vf_test.cc
index 35c32e603..6fd0a00e8 100644
--- a/test/vf_test.cc
+++ b/test/vf_test.cc
@@ -287,7 +287,7 @@ BOOST_AUTO_TEST_CASE (vf_test5)
BOOST_REQUIRE (!wait_for_jobs());
/* Check that the selected reel assets are right */
- shared_ptr<Player> player (new Player(vf, vf->playlist(), vf->length()));
+ shared_ptr<Player> player (new Player(vf));
list<ReferencedReelAsset> a = player->get_reel_assets();
BOOST_REQUIRE_EQUAL (a.size(), 4);
list<ReferencedReelAsset>::const_iterator i = a.begin();