diff options
author | Anton Khirnov <anton@khirnov.net> | 2015-05-06 13:55:38 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2015-06-27 16:45:41 +0200 |
commit | 9a5e4fbec870c7d466b7a0aec92c70778efc96b5 (patch) | |
tree | 737e30bdaedd25475baf50e19b31fb058f405f39 /avconv.c | |
parent | b114f6d48a06a4dad6882bc83e07463905f004c4 (diff) | |
download | ffmpeg-9a5e4fbec870c7d466b7a0aec92c70778efc96b5.tar.gz |
avconv: do not stop processing the input packet on decoding error
We still want to flush the filters on EOF and possibly apply streamcopy.
Diffstat (limited to 'avconv.c')
-rw-r--r-- | avconv.c | 24 |
1 files changed, 12 insertions, 12 deletions
@@ -1358,7 +1358,7 @@ static int send_filter_eof(InputStream *ist) } /* pkt = NULL means EOF (needed to flush decoder buffers) */ -static int process_input_packet(InputStream *ist, const AVPacket *pkt) +static void process_input_packet(InputStream *ist, const AVPacket *pkt) { int i; int got_output; @@ -1415,11 +1415,17 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt) ret = transcode_subtitles(ist, &avpkt, &got_output); break; default: - return -1; + return; + } + + if (ret < 0) { + av_log(NULL, AV_LOG_ERROR, "Error while decoding stream #%d:%d\n", + ist->file_index, ist->st->index); + if (exit_on_error) + exit_program(1); + break; } - if (ret < 0) - return ret; // touch data and size only if not EOF if (pkt) { avpkt.data += ret; @@ -1466,7 +1472,7 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt) do_streamcopy(ist, ost, pkt); } - return 0; + return; } static void print_sdp(void) @@ -2481,13 +2487,7 @@ static int process_input(void) } } - ret = process_input_packet(ist, &pkt); - if (ret < 0) { - av_log(NULL, AV_LOG_ERROR, "Error while decoding stream #%d:%d\n", - ist->file_index, ist->st->index); - if (exit_on_error) - exit_program(1); - } + process_input_packet(ist, &pkt); discard_packet: av_free_packet(&pkt); |