summaryrefslogtreecommitdiff
path: root/fftools
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2023-04-29 22:46:14 +0200
committerAnton Khirnov <anton@khirnov.net>2023-05-08 10:38:58 +0200
commitf5cfb2c5dfbc949a7ed2227f868f55834d20c28b (patch)
treeb95fc907644a6f35999affc807f6dbd72e49a094 /fftools
parent5673da4797a841539f323141c7e9241d15d24d9d (diff)
downloadffmpeg-f5cfb2c5dfbc949a7ed2227f868f55834d20c28b.tar.gz
fftools/ffmpeg: eliminate need_output()
Replace it by simply calling choose_output() earlier.
Diffstat (limited to 'fftools')
-rw-r--r--fftools/ffmpeg.c38
1 files changed, 10 insertions, 28 deletions
diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c
index d28536deb5..b1914822b4 100644
--- a/fftools/ffmpeg.c
+++ b/fftools/ffmpeg.c
@@ -1667,19 +1667,6 @@ static int transcode_init(void)
return 0;
}
-/* Return 1 if there remain streams where more output is wanted, 0 otherwise. */
-static int need_output(void)
-{
- for (OutputStream *ost = ost_iter(NULL); ost; ost = ost_iter(ost)) {
- if (ost->finished)
- continue;
-
- return 1;
- }
-
- return 0;
-}
-
/**
* Select the output stream to process.
*
@@ -2044,22 +2031,11 @@ discard_packet:
*
* @return 0 for success, <0 for error
*/
-static int transcode_step(void)
+static int transcode_step(OutputStream *ost)
{
- OutputStream *ost;
InputStream *ist = NULL;
int ret;
- 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;
- }
-
if (ost->filter && !ost->filter->graph->graph) {
if (ifilter_has_all_input_formats(ost->filter->graph)) {
ret = configure_filtergraph(ost->filter->graph);
@@ -2126,6 +2102,7 @@ static int transcode(void)
timer_start = av_gettime_relative();
while (!received_sigterm) {
+ OutputStream *ost;
int64_t cur_time= av_gettime_relative();
/* if 'q' pressed, exits */
@@ -2133,13 +2110,18 @@ static int transcode(void)
if (check_keyboard_interaction(cur_time) < 0)
break;
- /* check if there's any stream where output is still needed */
- if (!need_output()) {
+ ret = choose_output(&ost);
+ if (ret == AVERROR(EAGAIN)) {
+ reset_eagain();
+ av_usleep(10000);
+ continue;
+ } else if (ret < 0) {
av_log(NULL, AV_LOG_VERBOSE, "No more output streams to write to, finishing.\n");
+ ret = 0;
break;
}
- ret = transcode_step();
+ ret = transcode_step(ost);
if (ret < 0 && ret != AVERROR_EOF) {
av_log(NULL, AV_LOG_ERROR, "Error while filtering: %s\n", av_err2str(ret));
break;