From 9e025d3f85f9d6d855b3d5e6c90bca0eac3a3d49 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Fri, 16 Oct 2015 14:38:44 +0100 Subject: Avoid decoding other packets when looking for subs. The "accumulation" of, for example, video data when we are looking for audio data is an *optimisation* to reduce the number of seeks. It should not be necessary for correctness (the output should be right even if we never kept anything except what we were looking for). Doing this accumulation is not always an optimisation; sometimes not doing it is better. Avoiding it when going back for subtitles is one of these cases. --- src/lib/subtitle_decoder.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/lib/subtitle_decoder.cc') diff --git a/src/lib/subtitle_decoder.cc b/src/lib/subtitle_decoder.cc index a95964f47..30b8661ae 100644 --- a/src/lib/subtitle_decoder.cc +++ b/src/lib/subtitle_decoder.cc @@ -79,7 +79,7 @@ SubtitleDecoder::get (list const & subs, list const & sp, * (a) give us what we want, or * (b) hit the end of the decoder. */ - while (!pass () && (subs.empty() || (subs.back().period().to < sp.back().to))) {} + while (!pass(PASS_REASON_SUBTITLE) && (subs.empty() || (subs.back().period().to < sp.back().to))) {} /* Now look for what we wanted in the data we have collected */ /* XXX: inefficient */ -- cgit v1.2.3 From ad7ed1d8be8ce4cf55cbcadb3a6576e8c95f9877 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Fri, 16 Oct 2015 15:05:29 +0100 Subject: Update comment. --- src/lib/subtitle_decoder.cc | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) (limited to 'src/lib/subtitle_decoder.cc') diff --git a/src/lib/subtitle_decoder.cc b/src/lib/subtitle_decoder.cc index 30b8661ae..85b814d58 100644 --- a/src/lib/subtitle_decoder.cc +++ b/src/lib/subtitle_decoder.cc @@ -63,14 +63,7 @@ SubtitleDecoder::get (list const & subs, list const & sp, return list (); } - /* Seek if what we want is before what we have, or a more than a little bit after. - Be careful with the length of this `little bit'; consider the case where the last - subs were just less than this little bit B ago. Then we will not seek, but instead - pass() for nearly B seconds; if we are a FFmpegDecoder then this will generate B's - worth of video which will stack up. If B + the pre-roll is bigger than the maximum - number of frames that the VideoDecoder will keep then we will get an assertion - failure in VideoDecoder. - */ + /* 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); } -- cgit v1.2.3