fftools/ffmpeg: eliminate need_output()

Replace it by simply calling choose_output() earlier.
pull/389/head
Anton Khirnov 2 years ago
parent 5673da4797
commit f5cfb2c5df
  1. 38
      fftools/ffmpeg.c

@ -1667,19 +1667,6 @@ static int transcode_init(void)
return 0; 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. * Select the output stream to process.
* *
@ -2044,22 +2031,11 @@ discard_packet:
* *
* @return 0 for success, <0 for error * @return 0 for success, <0 for error
*/ */
static int transcode_step(void) static int transcode_step(OutputStream *ost)
{ {
OutputStream *ost;
InputStream *ist = NULL; InputStream *ist = NULL;
int ret; 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 (ost->filter && !ost->filter->graph->graph) {
if (ifilter_has_all_input_formats(ost->filter->graph)) { if (ifilter_has_all_input_formats(ost->filter->graph)) {
ret = configure_filtergraph(ost->filter->graph); ret = configure_filtergraph(ost->filter->graph);
@ -2126,6 +2102,7 @@ static int transcode(void)
timer_start = av_gettime_relative(); timer_start = av_gettime_relative();
while (!received_sigterm) { while (!received_sigterm) {
OutputStream *ost;
int64_t cur_time= av_gettime_relative(); int64_t cur_time= av_gettime_relative();
/* if 'q' pressed, exits */ /* if 'q' pressed, exits */
@ -2133,13 +2110,18 @@ static int transcode(void)
if (check_keyboard_interaction(cur_time) < 0) if (check_keyboard_interaction(cur_time) < 0)
break; break;
/* check if there's any stream where output is still needed */ ret = choose_output(&ost);
if (!need_output()) { 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"); av_log(NULL, AV_LOG_VERBOSE, "No more output streams to write to, finishing.\n");
ret = 0;
break; break;
} }
ret = transcode_step(); ret = transcode_step(ost);
if (ret < 0 && ret != AVERROR_EOF) { if (ret < 0 && ret != AVERROR_EOF) {
av_log(NULL, AV_LOG_ERROR, "Error while filtering: %s\n", av_err2str(ret)); av_log(NULL, AV_LOG_ERROR, "Error while filtering: %s\n", av_err2str(ret));
break; break;

Loading…
Cancel
Save