changeset 1202:44d9a5286ce8 libavformat

add uncompressed picture support
author bcoudurier
date Sat, 29 Jul 2006 15:19:31 +0000
parents 765706a01179
children d5a57cac339e
files mxf.c
diffstat 1 files changed, 28 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/mxf.c	Sat Jul 29 14:00:47 2006 +0000
+++ b/mxf.c	Sat Jul 29 15:19:31 2006 +0000
@@ -583,6 +583,29 @@
     return -1;
 }
 
+static void mxf_read_metadata_pixel_layout(ByteIOContext *pb, MXFDescriptor *descriptor)
+{
+    int code;
+
+    do {
+        code = get_byte(pb);
+        dprintf("pixel layout: code 0x%x\n", code);
+        switch (code) {
+        case 0x52: /* R */
+            descriptor->bits_per_sample += get_byte(pb);
+            break;
+        case 0x47: /* G */
+            descriptor->bits_per_sample += get_byte(pb);
+            break;
+        case 0x42: /* B */
+            descriptor->bits_per_sample += get_byte(pb);
+            break;
+        default:
+            get_byte(pb);
+        }
+    } while (code != 0); /* SMPTE 377M E.2.46 */
+}
+
 static int mxf_read_metadata_generic_descriptor(MXFContext *mxf, KLVPacket *klv)
 {
     ByteIOContext *pb = &mxf->fc->pb;
@@ -631,6 +654,9 @@
         case 0x3D01:
             descriptor->bits_per_sample = get_be32(pb);
             break;
+        case 0x3401:
+            mxf_read_metadata_pixel_layout(pb, descriptor);
+            break;
         default:
             url_fskip(pb, size);
         }
@@ -669,6 +695,7 @@
     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x02,0x02,0x02,0x00 },    CODEC_ID_DVVIDEO }, /* DVCPRO25 PAL */
     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x02,0x01,0x02,0x00 },    CODEC_ID_DVVIDEO }, /* DV25 IEC PAL */
   //{ { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x03,0x01,0x01,0x00 },     CODEC_ID_JPEG2K }, /* JPEG2000 Codestream */
+    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x01,0x7F,0x00,0x00,0x00 },   CODEC_ID_RAWVIDEO }, /* Uncompressed */
     /* SoundEssenceCompression */
     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x01,0x7F,0x00,0x00,0x00 },  CODEC_ID_PCM_S16LE },
     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x07,0x04,0x02,0x02,0x01,0x7E,0x00,0x00,0x00 },  CODEC_ID_PCM_S16BE }, /* From Omneon MXF file */
@@ -786,6 +813,7 @@
         if (st->codec->codec_type == CODEC_TYPE_VIDEO) {
             st->codec->width = descriptor->width;
             st->codec->height = descriptor->height;
+            st->codec->bits_per_sample = descriptor->bits_per_sample; /* Uncompressed */
         } else if (st->codec->codec_type == CODEC_TYPE_AUDIO) {
             st->codec->channels = descriptor->channels;
             st->codec->bits_per_sample = descriptor->bits_per_sample;