diff options
| author | Carl Hetherington <cth@carlh.net> | 2016-05-11 01:05:29 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2016-05-18 11:50:29 +0100 |
| commit | 49a1e2a600bd7b9d2d4a926256378e6134704a1a (patch) | |
| tree | 4251de8d16e5b994569a1367e1b56f7e95719c27 /src/lib | |
| parent | 5487e9d12cd84f1dbe976ec022a4ddd4c3f52cd2 (diff) | |
Fix seek, for video at least.
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/audio_decoder_stream.cc | 2 | ||||
| -rw-r--r-- | src/lib/ffmpeg_decoder.cc | 14 | ||||
| -rw-r--r-- | src/lib/subtitle_decoder.cc | 2 | ||||
| -rw-r--r-- | src/lib/video_decoder.cc | 2 |
4 files changed, 14 insertions, 6 deletions
diff --git a/src/lib/audio_decoder_stream.cc b/src/lib/audio_decoder_stream.cc index 121e233af..f64bd6955 100644 --- a/src/lib/audio_decoder_stream.cc +++ b/src/lib/audio_decoder_stream.cc @@ -69,7 +69,7 @@ AudioDecoderStream::get (Frame frame, Frame length, bool accurate) if (frame < _decoded.frame || end > (_decoded.frame + length * 4)) { /* Either we have no decoded data, or what we do have is a long way from what we want: seek */ - seek (ContentTime::from_frames (frame, _content->resampled_frame_rate()), accurate); + _decoder->seek (ContentTime::from_frames (frame, _content->resampled_frame_rate()), accurate); } /* Offset of the data that we want from the start of _decoded.audio diff --git a/src/lib/ffmpeg_decoder.cc b/src/lib/ffmpeg_decoder.cc index 195167d4b..e3a425375 100644 --- a/src/lib/ffmpeg_decoder.cc +++ b/src/lib/ffmpeg_decoder.cc @@ -302,9 +302,17 @@ FFmpegDecoder::bytes_per_audio_sample (shared_ptr<FFmpegAudioStream> stream) con void FFmpegDecoder::seek (ContentTime time, bool accurate) { - video->seek (time, accurate); - audio->seek (time, accurate); - subtitle->seek (time, accurate); + if (video) { + video->seek (time, accurate); + } + + if (audio) { + audio->seek (time, accurate); + } + + if (subtitle) { + subtitle->seek (time, accurate); + } /* If we are doing an `accurate' seek, we need to use pre-roll, as we don't really know what the seek will give us. diff --git a/src/lib/subtitle_decoder.cc b/src/lib/subtitle_decoder.cc index f182c53e5..2da4b7a34 100644 --- a/src/lib/subtitle_decoder.cc +++ b/src/lib/subtitle_decoder.cc @@ -74,7 +74,7 @@ SubtitleDecoder::get (list<T> const & subs, list<ContentTimePeriod> const & sp, /* Seek if what we want is before what we have, or a more than a little bit after */ if (subs.empty() || sp.back().to < subs.front().period().from || sp.front().from > (subs.back().period().to + ContentTime::from_seconds (1))) { - seek (sp.front().from, true); + _parent->seek (sp.front().from, true); } /* Now enough pass() calls will either: diff --git a/src/lib/video_decoder.cc b/src/lib/video_decoder.cc index a734f9b2a..761de0701 100644 --- a/src/lib/video_decoder.cc +++ b/src/lib/video_decoder.cc @@ -86,7 +86,7 @@ VideoDecoder::get (Frame frame, bool accurate) _log->log (String::compose ("VD has request for %1", frame), LogEntry::TYPE_DEBUG_DECODE); if (_decoded.empty() || frame < _decoded.front().frame || frame > (_decoded.back().frame + 1)) { - seek (ContentTime::from_frames (frame, _content->active_video_frame_rate()), accurate); + _parent->seek (ContentTime::from_frames (frame, _content->active_video_frame_rate()), accurate); } list<ContentVideo> dec; |
