[FFmpeg-devel] [PATCH] mov: fix decode of fragments that overlap in time

John Stebbins stebbins at jetheaddev.com
Tue Oct 10 02:22:13 EEST 2017

On 10/09/2017 02:40 PM, Carl Eugen Hoyos wrote:
> 2017-10-09 22:09 GMT+02:00 John Stebbins <jstebbins at jetheaddev.com>:
>> +    // This shouldn't happen
>> +    return NULL;
> As in: This cannot happen and should be an assert()
> or this does not happen for valid files and should print
> an error?
> Same below.

In theory, there are a couple of scenarios where this could happen.  They all involve the moov being at the end of the
file after a moof. ffmpeg errors out with AVERROR_INVALIDDATA in several other scenarios if it detects this condition. 
E.g. in mov_read_trun and several other places, it does this:

    for (i = 0; i < c->fc->nb_streams; i++) {
        if (c->fc->streams[i]->id == frag->track_id) {
            st = c->fc->streams[i];
    if (!st) {
        av_log(c->fc, AV_LOG_ERROR, "could not find corresponding track id %u\n", frag->track_id);

The spec says moov *should* come before moof, but does not require it. So this isn't technically invalid data.  But
ffmpeg doesn't currently support moov after moof, so I figured I was safe in not supporting it in this patch.  I could
add code similar to the above AVStream checking in a few key places (which would print an error) and that would make
those "shouldn't happen" into impossible conditions where an assert would be warranted.

John      GnuPG fingerprint: D0EC B3DB C372 D1F1 0B01  83F0 49F1 D7B2 60D4 D0F7

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20171009/920a810f/attachment.sig>

More information about the ffmpeg-devel mailing list