X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fplayer.cc;h=a6df63ac0377ab6e42ecaeb476bb990d17d33c1a;hb=90c782a16c26fa8bfded51cad2bc7bbc14d8f986;hp=035af81feba6215ee61a52eac3fa453f3fa205f8;hpb=b52491bd55097c343cd8514612d429a55d878be1;p=dcpomatic.git diff --git a/src/lib/player.cc b/src/lib/player.cc index 035af81fe..a6df63ac0 100644 --- a/src/lib/player.cc +++ b/src/lib/player.cc @@ -226,10 +226,16 @@ Player::playlist_content_changed (weak_ptr w, int property, bool freque void Player::set_video_container_size (dcp::Size s) { + if (s == _video_container_size) { + return; + } + _video_container_size = s; _black_image.reset (new Image (AV_PIX_FMT_RGB24, _video_container_size, true)); _black_image->make_black (); + + Changed (false); } void @@ -362,7 +368,7 @@ DCPTime Player::resampled_audio_to_dcp (shared_ptr piece, Frame f) const { /* See comment in dcp_to_content_video */ - DCPTime const d = DCPTime::from_frames (f, _film->audio_frame_rate()) - DCPTime (piece->content->trim_start (), piece->frc); + DCPTime const d = DCPTime::from_frames (f, _film->audio_frame_rate()) - DCPTime (piece->content->trim_start(), piece->frc); return max (DCPTime (), d + piece->content->position ()); } @@ -760,12 +766,12 @@ Player::audio (weak_ptr wp, AudioStreamPtr stream, ContentAudio content_a content_audio.frame = ro.second; } - /* XXX: end-trimming used to be checked here */ - /* Compute time in the DCP */ DCPTime time = resampled_audio_to_dcp (piece, content_audio.frame) + DCPTime::from_seconds (content->delay() / 1000.0); + /* And the end of this block in the DCP */ + DCPTime end = time + DCPTime::from_frames(content_audio.audio->frames(), content->resampled_frame_rate()); - /* Remove anything that comes before the start of the content */ + /* Remove anything that comes before the start or after the end of the content */ if (time < piece->content->position()) { DCPTime const discard_time = piece->content->position() - time; Frame discard_frames = discard_time.frames_round(_film->audio_frame_rate()); @@ -778,6 +784,14 @@ Player::audio (weak_ptr wp, AudioStreamPtr stream, ContentAudio content_a cut->copy_from (content_audio.audio.get(), remaining_frames, discard_frames, 0); content_audio.audio = cut; time += discard_time; + } else if (time > piece->content->end()) { + /* Discard it all */ + return; + } else if (end > piece->content->end()) { + Frame const remaining_frames = DCPTime(piece->content->end() - time).frames_round(_film->audio_frame_rate()); + shared_ptr cut (new AudioBuffers (content_audio.audio->channels(), remaining_frames)); + cut->copy_from (content_audio.audio.get(), remaining_frames, 0, 0); + content_audio.audio = cut; } audio_transform (content, stream, content_audio, time);