[FFmpeg-devel] [PATCH 2/3] avformat/mov: skip hoov box if strict >= normal
Zhao Zhili
quinkblack at foxmail.com
Fri Dec 24 11:58:22 EET 2021
The samples I have got have hoov and moov both. Unknown boxes
should be skipped according to the spec. So don't treat hoov as
moov in normal mode.
For backward compatible, a log message has been added to notice
the user to relax the striction if moov doesn't exist.
Fix #8883.
---
libavformat/mov.c | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/libavformat/mov.c b/libavformat/mov.c
index ea2f010aa0..63483740a0 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -7324,10 +7324,11 @@ 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') && c->moov_retry) ||
- a.type == MKTAG('h','o','o','v')) &&
- a.size >= 8 &&
- c->fc->strict_std_compliance < FF_COMPLIANCE_STRICT) {
+ if (((a.type == MKTAG('f','r','e','e') && c->moov_retry &&
+ c->fc->strict_std_compliance < FF_COMPLIANCE_STRICT) ||
+ (a.type == MKTAG('h','o','o','v') &&
+ c->fc->strict_std_compliance < FF_COMPLIANCE_NORMAL)) &&
+ a.size >= 8) {
uint32_t type;
avio_skip(pb, 4);
type = avio_rl32(pb);
@@ -7340,6 +7341,10 @@ static int mov_read_default(MOVContext *c, AVIOContext *pb, MOVAtom atom)
a.type = MKTAG('m','o','o','v');
}
}
+ if (a.type == MKTAG('h','o','o','v') &&
+ c->fc->strict_std_compliance >= FF_COMPLIANCE_NORMAL)
+ av_log(c->fc, AV_LOG_INFO,
+ "Skip hoov atom, try decrease -strict if moov doesn't exist.\n");
if (atom.type != MKTAG('r','o','o','t') &&
atom.type != MKTAG('m','o','o','v')) {
if (a.type == MKTAG('t','r','a','k') ||
--
2.31.1
More information about the ffmpeg-devel
mailing list