changeset 2952:e4ef7c3d3492 libavformat

correctly handle sony mpeg4 extradata
author bcoudurier
date Sat, 19 Jan 2008 19:58:48 +0000
parents 03fb674660c1
children c498cb28447a
files mxf.c
diffstat 1 files changed, 6 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mxf.c	Sat Jan 19 19:51:55 2008 +0000
+++ b/mxf.c	Sat Jan 19 19:58:48 2008 +0000
@@ -180,6 +180,7 @@
 static const uint8_t mxf_crypto_source_container_ul[]      = { 0x06,0x0e,0x2b,0x34,0x01,0x01,0x01,0x09,0x06,0x01,0x01,0x02,0x02,0x00,0x00,0x00 };
 static const uint8_t mxf_encrypted_triplet_key[]           = { 0x06,0x0e,0x2b,0x34,0x02,0x04,0x01,0x07,0x0d,0x01,0x03,0x01,0x02,0x7e,0x01,0x00 };
 static const uint8_t mxf_encrypted_essence_container[]     = { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x07,0x0d,0x01,0x03,0x01,0x02,0x0b,0x01,0x00 };
+static const uint8_t mxf_sony_mpeg4_extradata[]            = { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x01,0x0e,0x06,0x06,0x02,0x02,0x01,0x00,0x00 };
 
 #define IS_KLV_KEY(x, y) (!memcmp(x, y, sizeof(y)))
 
@@ -553,7 +554,7 @@
     } while (code != 0); /* SMPTE 377M E.2.46 */
 }
 
-static int mxf_read_generic_descriptor(MXFDescriptor *descriptor, ByteIOContext *pb, int tag, int size)
+static int mxf_read_generic_descriptor(MXFDescriptor *descriptor, ByteIOContext *pb, int tag, int size, UID uid)
 {
     switch(tag) {
     case 0x3F01:
@@ -601,12 +602,15 @@
     case 0x3401:
         mxf_read_pixel_layout(pb, descriptor);
         break;
-    case 0x8201: /* Private tag used by SONY C0023S01.mxf */
+    default:
+        /* Private uid used by SONY C0023S01.mxf */
+        if (IS_KLV_KEY(uid, mxf_sony_mpeg4_extradata)) {
         descriptor->extradata = av_malloc(size);
         if (!descriptor->extradata)
             return -1;
         descriptor->extradata_size = size;
         get_buffer(pb, descriptor->extradata, size);
+        }
         break;
     }
     return 0;