[FFmpeg-devel] Question on the “decode_failed” logic in ffmpeg.c:

Reimar Döffinger Reimar.Doeffinger at gmx.de
Thu Jul 13 20:56:47 EEST 2017


On 13.07.2017, at 14:10, "Geek.Song" <ffmpeg at gmail.com> wrote:

> On Wed, Jul 12, 2017 at 1:50 PM, Steven Liu <lingjiujianke at gmail.com> wrote:
>> 2017-07-12 12:32 GMT+08:00 Geek.Song <ffmpeg at gmail.com>:
>>> In ffmpeg.c:
>>> //
>>> // @ static int process_input_packet(InputStream *ist, const AVPacket
>>> *pkt, int no_eof)
>>> //
>>> if (ret < 0) {
>>>            if (decode_failed) {
>>>                av_log(NULL, AV_LOG_ERROR, "Error while decoding
>>> stream #%d:%d: %s\n",
>>>                       ist->file_index, ist->st->index, av_err2str(ret));
>>>            } else {
>>>                av_log(NULL, AV_LOG_FATAL, "Error while processing the decoded "
>>>                       "data for stream #%d:%d\n", ist->file_index,
>>> ist->st->index);
>>>            }
>>>            if (!decode_failed || exit_on_error)
>>>                exit_program(1);
>>>            break;
>>> }
>>> 
>>> 
>>> why is:
>>> if (!decode_failed || exit_on_error)
>>>    exit_program(1);
>>> 
>>> I think it should be:
>> If it should be :if (decode_failed || exit_on_error)
>> maybe only if (exit_on_error) than that, isn't it?
> 
> NO.
> 
> They are not identical.

Does that mean you know the answer to your question?
Otherwise: decode errors are fairly normal (e.g. packet loss when streaming via UDP, corruption from satellite or aerial transmissions, scratches in media like DVD).
The "solution" to them is to ignore them.
The other errors are fatal, because they "should never happen", will probably just happen again if we ignore them and the code wouldn't know know what to do about them.


More information about the ffmpeg-devel mailing list