[FFmpeg-cvslog] fftools/ffmpeg: merge choose_output() and got_eagain()

Anton Khirnov git at videolan.org
Mon May 8 11:49:21 EEST 2023


ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Sat Apr 29 22:35:37 2023 +0200| [5673da4797a841539f323141c7e9241d15d24d9d] | committer: Anton Khirnov

fftools/ffmpeg: merge choose_output() and got_eagain()

These two functions are a part of a single logical action - determining
which, if any, output stream needs to be processed next. Keeping them
separate is a historical artifact that obscures what is actually being
done.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=5673da4797a841539f323141c7e9241d15d24d9d
---

 fftools/ffmpeg.c | 41 +++++++++++++++++++----------------------
 1 file changed, 19 insertions(+), 22 deletions(-)

diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c
index afdb049f4e..d28536deb5 100644
--- a/fftools/ffmpeg.c
+++ b/fftools/ffmpeg.c
@@ -1683,9 +1683,11 @@ static int need_output(void)
 /**
  * Select the output stream to process.
  *
- * @return  selected output stream, or NULL if none available
+ * @retval 0 an output stream was selected
+ * @retval AVERROR(EAGAIN) need to wait until more input is available
+ * @retval AVERROR_EOF no more streams need output
  */
-static OutputStream *choose_output(void)
+static int choose_output(OutputStream **post)
 {
     int64_t opts_min = INT64_MAX;
     OutputStream *ost_min = NULL;
@@ -1704,15 +1706,19 @@ static OutputStream *choose_output(void)
                     ost->initialized, ost->inputs_done, ost->finished);
         }
 
-        if (!ost->initialized && !ost->inputs_done && !ost->finished)
-            return ost->unavailable ? NULL : ost;
-
+        if (!ost->initialized && !ost->inputs_done && !ost->finished) {
+            ost_min = ost;
+            break;
+        }
         if (!ost->finished && opts < opts_min) {
             opts_min = opts;
-            ost_min  = ost->unavailable ? NULL : ost;
+            ost_min  = ost;
         }
     }
-    return ost_min;
+    if (!ost_min)
+        return AVERROR_EOF;
+    *post = ost_min;
+    return ost_min->unavailable ? AVERROR(EAGAIN) : 0;
 }
 
 static void set_tty_echo(int on)
@@ -1800,14 +1806,6 @@ static int check_keyboard_interaction(int64_t cur_time)
     return 0;
 }
 
-static int got_eagain(void)
-{
-    for (OutputStream *ost = ost_iter(NULL); ost; ost = ost_iter(ost))
-        if (ost->unavailable)
-            return 1;
-    return 0;
-}
-
 static void reset_eagain(void)
 {
     int i;
@@ -2052,13 +2050,12 @@ static int transcode_step(void)
     InputStream  *ist = NULL;
     int ret;
 
-    ost = choose_output();
-    if (!ost) {
-        if (got_eagain()) {
-            reset_eagain();
-            av_usleep(10000);
-            return 0;
-        }
+    ret = choose_output(&ost);
+    if (ret == AVERROR(EAGAIN)) {
+        reset_eagain();
+        av_usleep(10000);
+        return 0;
+    } else if (ret < 0) {
         av_log(NULL, AV_LOG_VERBOSE, "No more inputs to read from, finishing.\n");
         return AVERROR_EOF;
     }



More information about the ffmpeg-cvslog mailing list