On Thu, Aug 8, 2019 at 10:28 PM Vittorio Giovara <vittorio.giov...@gmail.com> wrote:
> Some broken apps generate files that have a fake box named 'hoov' > instead of a proper 'moov' one. This is speculation but it seems like > this box contains data to be modified later (eg as file grows in size, > data gets re-written) and its name is supposed to be changed to 'moov' > once it can be used as a 'moov', but for some reason this step is skipped. > > Since this is not the first time this happens ('moov' boxes can be found > in 'free' ones) extend the existing hacks to search for the moov in such > boxes and skip the moov_retry since it needs to be found right away. > --- > libavformat/mov.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > This code is ugly, tips for improving it are welcome, or a full > rejection is ok too. Unfortunately I cannot share the sample, but VLC > is able to play it. > Vittorio > > diff --git a/libavformat/mov.c b/libavformat/mov.c > index 24de5429d1..0c2986b72e 100644 > --- a/libavformat/mov.c > +++ b/libavformat/mov.c > @@ -6800,10 +6800,10 @@ static int mov_read_default(MOVContext *c, > AVIOContext *pb, MOVAtom atom) > if (atom.size >= 8) { > a.size = avio_rb32(pb); > a.type = avio_rl32(pb); > - if (a.type == MKTAG('f','r','e','e') && > + if (((a.type == MKTAG('f','r','e','e') && c->moov_retry) || > + a.type == MKTAG('h','o','o','v')) && > a.size >= 8 && > - c->fc->strict_std_compliance < FF_COMPLIANCE_STRICT && > - c->moov_retry) { > + c->fc->strict_std_compliance < FF_COMPLIANCE_STRICT) { > uint8_t buf[8]; > uint32_t *type = (uint32_t *)buf + 1; > if (avio_read(pb, buf, 8) != 8) > @@ -6811,7 +6811,7 @@ static int mov_read_default(MOVContext *c, > AVIOContext *pb, MOVAtom atom) > avio_seek(pb, -8, SEEK_CUR); > if (*type == MKTAG('m','v','h','d') || > *type == MKTAG('c','m','o','v')) { > - av_log(c->fc, AV_LOG_ERROR, "Detected moov in a free > atom.\n"); > + av_log(c->fc, AV_LOG_ERROR, "Detected moov in a free > or hoov atom.\n"); > a.type = MKTAG('m','o','o','v'); > } > } > -- > ping? -- Vittorio _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".