diff mbox series

[FFmpeg-devel,05/10] fftools/ffmpeg_mux_init: simplify inner loop in map_auto_{video, audio}

Message ID 20221117101640.6789-5-anton@khirnov.net
State Accepted
Commit 86e2ffedfe343f8e2878db84fefef0d85ebfe0dc
Headers show
Series [FFmpeg-devel,01/10] fftools/ffmpeg: move freeing an input stream into a separate function | expand

Checks

Context Check Description
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Anton Khirnov Nov. 17, 2022, 10:16 a.m. UTC
Skip unusable streams early and do not compute any scores for them.
---
 fftools/ffmpeg_mux_init.c | 21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)
diff mbox series

Patch

diff --git a/fftools/ffmpeg_mux_init.c b/fftools/ffmpeg_mux_init.c
index e460e7603f..6db70cc852 100644
--- a/fftools/ffmpeg_mux_init.c
+++ b/fftools/ffmpeg_mux_init.c
@@ -869,15 +869,18 @@  static void map_auto_video(Muxer *mux, const OptionsContext *o)
         for (int i = 0; i < ifile->nb_streams; i++) {
             int score;
             ist = input_streams[ifile->ist_index + i];
+
+            if (ist->user_set_discard == AVDISCARD_ALL ||
+                ist->st->codecpar->codec_type != AVMEDIA_TYPE_VIDEO)
+                continue;
+
             score = ist->st->codecpar->width * ist->st->codecpar->height
                        + 100000000 * !!(ist->st->event_flags & AVSTREAM_EVENT_FLAG_NEW_PACKETS)
                        + 5000000*!!(ist->st->disposition & AV_DISPOSITION_DEFAULT);
-            if (ist->user_set_discard == AVDISCARD_ALL)
-                continue;
             if((qcr!=MKTAG('A', 'P', 'I', 'C')) && (ist->st->disposition & AV_DISPOSITION_ATTACHED_PIC))
                 score = 1;
-            if (ist->st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO &&
-                score > file_best_score) {
+
+            if (score > file_best_score) {
                 if((qcr==MKTAG('A', 'P', 'I', 'C')) && !(ist->st->disposition & AV_DISPOSITION_ATTACHED_PIC))
                     continue;
                 file_best_score = score;
@@ -913,13 +916,15 @@  static void map_auto_audio(Muxer *mux, const OptionsContext *o)
         for (int i = 0; i < ifile->nb_streams; i++) {
             int score;
             ist = input_streams[ifile->ist_index + i];
+
+            if (ist->user_set_discard == AVDISCARD_ALL ||
+                ist->st->codecpar->codec_type != AVMEDIA_TYPE_AUDIO)
+                continue;
+
             score = ist->st->codecpar->ch_layout.nb_channels
                     + 100000000 * !!(ist->st->event_flags & AVSTREAM_EVENT_FLAG_NEW_PACKETS)
                     + 5000000*!!(ist->st->disposition & AV_DISPOSITION_DEFAULT);
-            if (ist->user_set_discard == AVDISCARD_ALL)
-                continue;
-            if (ist->st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO &&
-                score > file_best_score) {
+            if (score > file_best_score) {
                 file_best_score = score;
                 file_best_idx = ifile->ist_index + i;
             }