summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2015-08-31 14:31:08 +0100
committerCarl Hetherington <cth@carlh.net>2015-08-31 14:31:08 +0100
commit6c334975aaf31f87dd0283f391671df441022751 (patch)
tree0c556e9e377d0657554ebc65e151abaae0d187c8 /src/lib
parent695c407ce0f469fb462db3de9d715d86a1ae6af5 (diff)
Bail early from subtitle finding if there are no subtitle streams.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/ffmpeg_examiner.cc11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/lib/ffmpeg_examiner.cc b/src/lib/ffmpeg_examiner.cc
index 78d97d21e..6ed7b06fe 100644
--- a/src/lib/ffmpeg_examiner.cc
+++ b/src/lib/ffmpeg_examiner.cc
@@ -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;
+ }
}
}