[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