summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2016-05-11 01:05:29 +0100
committerCarl Hetherington <cth@carlh.net>2016-05-18 11:50:29 +0100
commit49a1e2a600bd7b9d2d4a926256378e6134704a1a (patch)
tree4251de8d16e5b994569a1367e1b56f7e95719c27 /src/lib
parent5487e9d12cd84f1dbe976ec022a4ddd4c3f52cd2 (diff)
Fix seek, for video at least.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/audio_decoder_stream.cc2
-rw-r--r--src/lib/ffmpeg_decoder.cc14
-rw-r--r--src/lib/subtitle_decoder.cc2
-rw-r--r--src/lib/video_decoder.cc2
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;