Bail early from subtitle finding if there are no subtitle streams.
authorCarl Hetherington <cth@carlh.net>
Mon, 31 Aug 2015 13:31:08 +0000 (14:31 +0100)
committerCarl Hetherington <cth@carlh.net>
Mon, 31 Aug 2015 13:31:08 +0000 (14:31 +0100)
ChangeLog
src/lib/ffmpeg_examiner.cc

index b9087a1699a39553b51f744b8abb6fa64659bd88..d10b06c24a81584ce3ffdf53a3553e0a01e405a7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2015-08-31  Carl Hetherington  <cth@carlh.net>
 
+       * Stop very long searches for subtitles where
+       there are none.
+
        * Updated es_ES translation from Manuel AC.
 
 2015-08-30  Carl Hetherington  <cth@carlh.net>
index 78d97d21e52e4b4b9f5a12ed052ef33e711701d2..6ed7b06fea050cc33f04763978283025456fbb9e 100644 (file)
@@ -92,6 +92,7 @@ FFmpegExaminer::FFmpegExaminer (shared_ptr<const FFmpegContent> c, shared_ptr<Jo
         * where we should look for subtitles (video and audio are always present,
         * so they are ok).
         */
+
        while (true) {
                int r = av_read_frame (_format_context, &_packet);
                if (r < 0) {
@@ -108,10 +109,15 @@ FFmpegExaminer::FFmpegExaminer (shared_ptr<const FFmpegContent> c, shared_ptr<Jo
                        video_packet (context);
                }
 
+               bool got_all_audio = true;
+
                for (size_t i = 0; i < _audio_streams.size(); ++i) {
                        if (_audio_streams[i]->uses_index (_format_context, _packet.stream_index)) {
                                audio_packet (context, _audio_streams[i]);
                        }
+                       if (!_audio_streams[i]->first_audio) {
+                               got_all_audio = false;
+                       }
                }
 
                for (size_t i = 0; i < _subtitle_streams.size(); ++i) {
@@ -121,6 +127,11 @@ FFmpegExaminer::FFmpegExaminer (shared_ptr<const FFmpegContent> c, shared_ptr<Jo
                }
 
                av_free_packet (&_packet);
+
+               if (_first_video && got_all_audio && _subtitle_streams.empty ()) {
+                       /* All done */
+                       break;
+               }
        }
 }