changeset 4080:8ddf05b864a4 libavformat

parse pasp atom and set sample aspect ratio, warn if transformation matrix differs from pasp, based on a patch by Skal.
author bcoudurier
date Thu, 11 Dec 2008 22:24:56 +0000
parents 82cbec030af5
children 3d6e7901bf05
files mov.c
diffstat 1 files changed, 17 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/mov.c	Thu Dec 11 20:06:56 2008 +0000
+++ b/mov.c	Thu Dec 11 22:24:56 2008 +0000
@@ -430,6 +430,22 @@
     return 0;
 }
 
+static int mov_read_pasp(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+{
+    const int num = get_be32(pb);
+    const int den = get_be32(pb);
+    AVStream * const st = c->fc->streams[c->fc->nb_streams-1];
+    if (den != 0) {
+        if ((st->sample_aspect_ratio.den && den != st->sample_aspect_ratio.den) ||
+            (st->sample_aspect_ratio.num && num != st->sample_aspect_ratio.num))
+            av_log(c->fc, AV_LOG_WARNING,
+                   "sample aspect ratio already set, overriding by 'pasp' atom\n");
+        st->sample_aspect_ratio.num = num;
+        st->sample_aspect_ratio.den = den;
+    }
+    return 0;
+}
+
 /* this atom contains actual media data */
 static int mov_read_mdat(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
 {
@@ -1754,6 +1770,7 @@
 { MKTAG('S','M','I',' '), mov_read_smi }, /* Sorenson extension ??? */
 { MKTAG('a','l','a','c'), mov_read_extradata }, /* alac specific atom */
 { MKTAG('a','v','c','C'), mov_read_glbl },
+{ MKTAG('p','a','s','p'), mov_read_pasp },
 { MKTAG('s','t','b','l'), mov_read_default },
 { MKTAG('s','t','c','o'), mov_read_stco },
 { MKTAG('s','t','s','c'), mov_read_stsc },