avformat/mov: ignore old infe box versions

Some files with no image items have them, and were working prior to the recent
HEIF parsing overhaul.
Ignore such boxes instead, to recover the old behavior.

Fixes a regression since d9fed9df2a.

Tested-by: Wu Jianhua <toqsxw@outlook.com>
Signed-off-by: James Almer <jamrial@gmail.com>
(cherry picked from commit 5b9db32ccc)
release/7.0
James Almer 10 months ago
parent 8dfafe5366
commit ed55219edd
  1. 13
      libavformat/mov.c

@ -8128,8 +8128,8 @@ static int mov_read_infe(MOVContext *c, AVIOContext *pb, MOVAtom atom, int idx)
size -= 4;
if (version < 2) {
av_log(c->fc, AV_LOG_ERROR, "infe: version < 2 not supported\n");
return AVERROR_PATCHWELCOME;
avpriv_report_missing_feature(c->fc, "infe version < 2");
return 1;
}
item_id = version > 2 ? avio_rb32(pb) : avio_rb16(pb);
@ -8200,6 +8200,8 @@ static int mov_read_iinf(MOVContext *c, AVIOContext *pb, MOVAtom atom)
ret = mov_read_infe(c, pb, infe, i);
if (ret < 0)
return ret;
if (ret)
return 0;
}
c->found_iinf = 1;
@ -9495,14 +9497,15 @@ static int mov_read_header(AVFormatContext *s)
av_log(s, AV_LOG_ERROR, "error reading header\n");
return err;
}
} while ((pb->seekable & AVIO_SEEKABLE_NORMAL) && !mov->found_moov && !mov->found_iloc && !mov->moov_retry++);
if (!mov->found_moov && !mov->found_iloc) {
} while ((pb->seekable & AVIO_SEEKABLE_NORMAL) &&
!mov->found_moov && (!mov->found_iloc || !mov->found_iinf) && !mov->moov_retry++);
if (!mov->found_moov && !mov->found_iloc && !mov->found_iinf) {
av_log(s, AV_LOG_ERROR, "moov atom not found\n");
return AVERROR_INVALIDDATA;
}
av_log(mov->fc, AV_LOG_TRACE, "on_parse_exit_offset=%"PRId64"\n", avio_tell(pb));
if (mov->found_iloc) {
if (mov->found_iloc && mov->found_iinf) {
for (i = 0; i < mov->nb_heif_item; i++) {
HEIFItem *item = &mov->heif_item[i];
MOVStreamContext *sc;

Loading…
Cancel
Save