diff options
| author | Carl Hetherington <cth@carlh.net> | 2020-06-22 01:01:23 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2020-06-22 01:01:23 +0200 |
| commit | 20caf8930ef95badaa3fef822dfc5932af788481 (patch) | |
| tree | 070591a5aff716d91976f5abbd0f649c420bf548 | |
| parent | 16723e76c4a712f9c35df46d15fbd09917724e07 (diff) | |
Add and use Piece::position().
| -rw-r--r-- | src/lib/piece.h | 10 | ||||
| -rw-r--r-- | src/lib/player.cc | 16 |
2 files changed, 16 insertions, 10 deletions
diff --git a/src/lib/piece.h b/src/lib/piece.h index 440beecf4..f4496c08e 100644 --- a/src/lib/piece.h +++ b/src/lib/piece.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2013-2014 Carl Hetherington <cth@carlh.net> + Copyright (C) 2013-2020 Carl Hetherington <cth@carlh.net> This file is part of DCP-o-matic. @@ -21,8 +21,10 @@ #ifndef DCPOMATIC_PIECE_H #define DCPOMATIC_PIECE_H -#include "types.h" +#include "content.h" +#include "dcpomatic_time.h" #include "frame_rate_change.h" +#include "types.h" class Content; class Decoder; @@ -37,6 +39,10 @@ public: , done (false) {} + dcpomatic::DCPTime position () const { + return content->position (); + } + boost::shared_ptr<Content> content; boost::shared_ptr<Decoder> decoder; FrameRateChange frc; diff --git a/src/lib/player.cc b/src/lib/player.cc index f3aa97cb0..c9679adfe 100644 --- a/src/lib/player.cc +++ b/src/lib/player.cc @@ -390,7 +390,7 @@ Player::content_video_to_dcp (shared_ptr<const Piece> piece, Frame f) const Instead we convert the DCPTime using the DCP video rate then account for any skip/repeat. */ DCPTime const d = DCPTime::from_frames (f * piece->frc.factor(), piece->frc.dcp) - DCPTime(piece->content->trim_start(), piece->frc); - return d + piece->content->position(); + return d + piece->position(); } @@ -400,13 +400,13 @@ Player::resampled_audio_to_dcp (shared_ptr<const Piece> piece, Frame f) const /* See notes in content_video_to_dcp */ return DCPTime::from_frames (f, _film->audio_frame_rate()) - DCPTime (piece->content->trim_start(), piece->frc) - + piece->content->position(); + + piece->position(); } ContentTime Player::dcp_to_content_time (shared_ptr<const Piece> piece, DCPTime t) const { - DCPTime s = t - piece->content->position (); + DCPTime s = t - piece->position (); s = min (piece->content->length_after_trim(_film), s); return max (ContentTime (), ContentTime (s, piece->frc) + piece->content->trim_start()); } @@ -414,7 +414,7 @@ Player::dcp_to_content_time (shared_ptr<const Piece> piece, DCPTime t) const DCPTime Player::content_time_to_dcp (shared_ptr<const Piece> piece, ContentTime t) const { - return max (DCPTime (), DCPTime (t - piece->content->trim_start(), piece->frc) + piece->content->position()); + return max (DCPTime (), DCPTime (t - piece->content->trim_start(), piece->frc) + piece->position()); } list<shared_ptr<Font> > @@ -795,7 +795,7 @@ Player::video (weak_ptr<Piece> wp, ContentVideo video) if it's after the content's period here as in that case we still need to fill any gap between `now' and the end of the content's period. */ - if (time < piece->content->position() || (_last_video_time && time < *_last_video_time)) { + if (time < piece->position() || (_last_video_time && time < *_last_video_time)) { return; } @@ -805,7 +805,7 @@ Player::video (weak_ptr<Piece> wp, ContentVideo video) DCPTime fill_to = min (time, piece->content->end(_film)); if (_last_video_time) { - DCPTime fill_from = max (*_last_video_time, piece->content->position()); + DCPTime fill_from = max (*_last_video_time, piece->position()); /* Fill if we have more than half a frame to do */ if ((fill_to - fill_from) > one_video_frame() / 2) { @@ -898,8 +898,8 @@ Player::audio (weak_ptr<Piece> wp, AudioStreamPtr stream, ContentAudio content_a DCPTime end = time + DCPTime::from_frames(content_audio.audio->frames(), rfr); /* Remove anything that comes before the start or after the end of the content */ - if (time < piece->content->position()) { - pair<shared_ptr<AudioBuffers>, DCPTime> cut = discard_audio (content_audio.audio, time, piece->content->position()); + if (time < piece->position()) { + pair<shared_ptr<AudioBuffers>, DCPTime> cut = discard_audio (content_audio.audio, time, piece->position()); if (!cut.first) { /* This audio is entirely discarded */ return; |
