summaryrefslogtreecommitdiff
path: root/fftools/ffmpeg.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2023-04-29 22:35:37 +0200
committerAnton Khirnov <anton@khirnov.net>2023-05-08 10:38:58 +0200
commit5673da4797a841539f323141c7e9241d15d24d9d (patch)
treeff29b68e5c5078ca3df65ccbe96bc494943672a3 /fftools/ffmpeg.c
parentf009f849617ab0c2015d2a748892d55b37d378c0 (diff)
downloadffmpeg-5673da4797a841539f323141c7e9241d15d24d9d.tar.gz
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.
Diffstat (limited to 'fftools/ffmpeg.c')
-rw-r--r--fftools/ffmpeg.c41
1 files 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;
}