From b52491bd55097c343cd8514612d429a55d878be1 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Wed, 1 Mar 2017 11:43:20 +0000 Subject: Fix crash brought on by previous. --- src/lib/player.cc | 14 +++++++++++--- src/lib/player.h | 2 +- 2 files changed, 12 insertions(+), 4 deletions(-) (limited to 'src/lib') diff --git a/src/lib/player.cc b/src/lib/player.cc index 076bd61bc..035af81fe 100644 --- a/src/lib/player.cc +++ b/src/lib/player.cc @@ -679,7 +679,11 @@ Player::audio_flush (shared_ptr piece, AudioStreamPtr stream) shared_ptr content = piece->content->audio; DCPOMATIC_ASSERT (content); - shared_ptr r = resampler (content, stream); + shared_ptr r = resampler (content, stream, false); + if (!r) { + return; + } + pair, Frame> ro = r->flush (); ContentAudio content_audio; content_audio.audio = ro.first; @@ -750,7 +754,7 @@ Player::audio (weak_ptr wp, AudioStreamPtr stream, ContentAudio content_a /* Resample */ if (stream->frame_rate() != content->resampled_frame_rate()) { - shared_ptr r = resampler (content, stream); + shared_ptr r = resampler (content, stream, true); pair, Frame> ro = r->run (content_audio.audio, content_audio.frame); content_audio.audio = ro.first; content_audio.frame = ro.second; @@ -876,13 +880,17 @@ Player::seek (DCPTime time, bool accurate) } shared_ptr -Player::resampler (shared_ptr content, AudioStreamPtr stream) +Player::resampler (shared_ptr content, AudioStreamPtr stream, bool create) { ResamplerMap::const_iterator i = _resamplers.find (make_pair (content, stream)); if (i != _resamplers.end ()) { return i->second; } + if (!create) { + return shared_ptr (); + } + LOG_GENERAL ( "Creating new resampler from %1 to %2 with %3 channels", stream->frame_rate(), diff --git a/src/lib/player.h b/src/lib/player.h index dd7c5dfa1..6e9c9d7ee 100644 --- a/src/lib/player.h +++ b/src/lib/player.h @@ -106,7 +106,7 @@ private: void audio (boost::weak_ptr, AudioStreamPtr, ContentAudio); void image_subtitle (boost::weak_ptr, ContentImageSubtitle); void text_subtitle (boost::weak_ptr, ContentTextSubtitle); - boost::shared_ptr resampler (boost::shared_ptr content, AudioStreamPtr stream); + boost::shared_ptr resampler (boost::shared_ptr content, AudioStreamPtr stream, bool create); DCPTime one_video_frame () const; void fill_video (DCPTimePeriod period); void fill_audio (DCPTimePeriod period); -- cgit v1.2.3