diff --git a/ffmpeg.c b/ffmpeg.c index 91e4734e8a..2c17525286 100644 --- a/ffmpeg.c +++ b/ffmpeg.c @@ -2147,6 +2147,8 @@ static int output_packet(InputStream *ist, const AVPacket *pkt) if (!got_output) { continue; } + if (got_output && !pkt) + break; } /* handle stream copy */ @@ -2185,7 +2187,7 @@ static int output_packet(InputStream *ist, const AVPacket *pkt) do_streamcopy(ist, ost, pkt); } - return 0; + return got_output; } static void print_sdp(void) @@ -3315,12 +3317,14 @@ static int process_input(int file_index) if (exit_on_error) exit_program(1); } - ifile->eof_reached = 1; for (i = 0; i < ifile->nb_streams; i++) { ist = input_streams[ifile->ist_index + i]; - if (ist->decoding_needed) - output_packet(ist, NULL); + if (ist->decoding_needed) { + ret = output_packet(ist, NULL); + if (ret>0) + return 0; + } /* mark all outputs that don't go through lavfi as finished */ for (j = 0; j < nb_output_streams; j++) { @@ -3332,6 +3336,7 @@ static int process_input(int file_index) } } + ifile->eof_reached = 1; return AVERROR(EAGAIN); }