diff options
| author | Carl Hetherington <cth@carlh.net> | 2018-02-09 17:07:16 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2018-02-09 17:07:16 +0000 |
| commit | 11a6decd652158b2288de17dc1aeafcd860fdfef (patch) | |
| tree | 54191ccd7950d0b78d3c54b702c11aea84a656f9 | |
| parent | 47415dd6c5ea219518686ee4805098fc79bbbaaa (diff) | |
Always pre-roll when seeking in DCPs; I don't think the performance
hit is anything to worry about (especially compared to the time taken
to decode the next frame).
| -rw-r--r-- | ChangeLog | 2 | ||||
| -rw-r--r-- | src/lib/dcp_decoder.cc | 34 |
2 files changed, 18 insertions, 18 deletions
@@ -1,5 +1,7 @@ 2018-02-09 Carl Hetherington <cth@carlh.net> + * Always pre-roll when seeking in DCPs (#1085). + * Version 2.11.52 released. 2018-02-09 Carl Hetherington <cth@carlh.net> diff --git a/src/lib/dcp_decoder.cc b/src/lib/dcp_decoder.cc index c1c7780bb..2ffe11065 100644 --- a/src/lib/dcp_decoder.cc +++ b/src/lib/dcp_decoder.cc @@ -259,30 +259,28 @@ DCPDecoder::seek (ContentTime t, bool accurate) _offset = 0; get_readers (); - if (accurate) { - int const pre_roll_seconds = 2; + int const pre_roll_seconds = 2; - /* Pre-roll for subs */ + /* Pre-roll for subs */ - ContentTime pre = t - ContentTime::from_seconds (pre_roll_seconds); - if (pre < ContentTime()) { - pre = ContentTime (); - } + ContentTime pre = t - ContentTime::from_seconds (pre_roll_seconds); + if (pre < ContentTime()) { + pre = ContentTime (); + } - /* Seek to pre-roll position */ + /* Seek to pre-roll position */ - while (_reel != _reels.end() && pre >= ContentTime::from_frames ((*_reel)->main_picture()->duration(), _dcp_content->active_video_frame_rate ())) { - pre -= ContentTime::from_frames ((*_reel)->main_picture()->duration(), _dcp_content->active_video_frame_rate ()); - next_reel (); - } + while (_reel != _reels.end() && pre >= ContentTime::from_frames ((*_reel)->main_picture()->duration(), _dcp_content->active_video_frame_rate ())) { + pre -= ContentTime::from_frames ((*_reel)->main_picture()->duration(), _dcp_content->active_video_frame_rate ()); + next_reel (); + } - /* Pass subtitles in the pre-roll */ + /* Pass subtitles in the pre-roll */ - double const vfr = _dcp_content->active_video_frame_rate (); - for (int i = 0; i < pre_roll_seconds * vfr; ++i) { - pass_subtitles (pre); - pre += ContentTime::from_frames (1, vfr); - } + double const vfr = _dcp_content->active_video_frame_rate (); + for (int i = 0; i < pre_roll_seconds * vfr; ++i) { + pass_subtitles (pre); + pre += ContentTime::from_frames (1, vfr); } /* Seek to correct position */ |
