[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