* mp4: parse another box.
[vlc.git] / modules / demux / mp4 / libmp4.h
index b79d7f8..eef7a1a 100644 (file)
@@ -2,7 +2,7 @@
  * libmp4.h : LibMP4 library for mp4 module for vlc
  *****************************************************************************
  * Copyright (C) 2001 VideoLAN
- * $Id: libmp4.h,v 1.6 2003/02/18 23:34:14 gbazin Exp $
+ * $Id: libmp4.h,v 1.14 2003/07/19 15:12:10 fenrir Exp $
  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  * 
  * This program is free software; you can redistribute it and/or modify
@@ -24,6 +24,7 @@
 
 #define FOURCC_ftyp VLC_FOURCC( 'f', 't', 'y', 'p' )
 #define FOURCC_moov VLC_FOURCC( 'm', 'o', 'o', 'v' )
+#define FOURCC_foov VLC_FOURCC( 'f', 'o', 'o', 'v' )
 #define FOURCC_cmov VLC_FOURCC( 'c', 'm', 'o', 'v' )
 #define FOURCC_dcom VLC_FOURCC( 'd', 'c', 'o', 'm' )
 #define FOURCC_cmvd VLC_FOURCC( 'c', 'm', 'v', 'd' )
@@ -82,7 +83,7 @@
 #define FOURCC_vide VLC_FOURCC( 'v', 'i', 'd', 'e' )
 #define FOURCC_soun VLC_FOURCC( 's', 'o', 'u', 'n' )
 #define FOURCC_hint VLC_FOURCC( 'h', 'i', 'n', 't' )
-    
+
 #define FOURCC_dpnd VLC_FOURCC( 'd', 'p', 'n', 'd' )
 #define FOURCC_ipir VLC_FOURCC( 'i', 'p', 'i', 'r' )
 #define FOURCC_mpod VLC_FOURCC( 'm', 'p', 'o', 'd' )
 #define FOURCC_isom VLC_FOURCC( 'i', 's', 'o', 'm' )
 #define FOURCC_esds VLC_FOURCC( 'e', 's', 'd', 's' )
 
-#define FOURCC_zlib VLC_FOURCC( 'z', 'l', 'i', 'b' )
-#define FOURCC_SVQ1 VLC_FOURCC( 'S', 'V', 'Q', '1' )
 #define FOURCC__mp3 VLC_FOURCC( '.', 'm', 'p', '3' )
+#define FOURCC_ms02 VLC_FOURCC( 'm', 's', 0x0, 0x02 )
+#define FOURCC_ms11 VLC_FOURCC( 'm', 's', 0x0, 0x11 )
 #define FOURCC_ms55 VLC_FOURCC( 'm', 's', 0x0, 0x55 )
+#define FOURCC_twos VLC_FOURCC( 't', 'w', 'o', 's' )
+#define FOURCC_sowt VLC_FOURCC( 's', 'o', 'w', 't' )
+#define FOURCC_QDMC VLC_FOURCC( 'Q', 'D', 'M', 'C' )
+#define FOURCC_QDM2 VLC_FOURCC( 'Q', 'D', 'M', '2' )
+#define FOURCC_ima4 VLC_FOURCC( 'i', 'm', 'a', '4' )
+#define FOURCC_IMA4 VLC_FOURCC( 'I', 'M', 'A', '4' )
+#define FOURCC_dvi  VLC_FOURCC( 'd', 'v', 'i', ' ' )
+#define FOURCC_MAC3 VLC_FOURCC( 'M', 'A', 'C', '3' )
+#define FOURCC_MAC6 VLC_FOURCC( 'M', 'A', 'C', '6' )
+#define FOURCC_alaw VLC_FOURCC( 'a', 'l', 'a', 'w' )
+#define FOURCC_ulaw VLC_FOURCC( 'u', 'l', 'a', 'w' )
+#define FOURCC_Qclp VLC_FOURCC( 'Q', 'c', 'l', 'p' )
+#define FOURCC_samr VLC_FOURCC( 's', 'a', 'm', 'r' )
+
+#define FOURCC_zlib VLC_FOURCC( 'z', 'l', 'i', 'b' )
+#define FOURCC_SVQ1 VLC_FOURCC( 'S', 'V', 'Q', '1' )
+#define FOURCC_SVQ3 VLC_FOURCC( 'S', 'V', 'Q', '3' )
+#define FOURCC_ZyGo VLC_FOURCC( 'Z', 'y', 'G', 'o' )
 #define FOURCC_3IV1 VLC_FOURCC( '3', 'I', 'V', '1' )
+#define FOURCC_3iv1 VLC_FOURCC( '3', 'i', 'v', '1' )
 #define FOURCC_3IV2 VLC_FOURCC( '3', 'I', 'V', '2' )
+#define FOURCC_3iv2 VLC_FOURCC( '3', 'i', 'v', '2' )
+#define FOURCC_3IVD VLC_FOURCC( '3', 'I', 'V', 'D' )
+#define FOURCC_3ivd VLC_FOURCC( '3', 'i', 'v', 'd' )
+#define FOURCC_3VID VLC_FOURCC( '3', 'V', 'I', 'D' )
+#define FOURCC_3vid VLC_FOURCC( '3', 'v', 'i', 'd' )
 #define FOURCC_h263 VLC_FOURCC( 'h', '2', '6', '3' )
+#define FOURCC_s263 VLC_FOURCC( 's', '2', '6', '3' )
 #define FOURCC_DIVX VLC_FOURCC( 'D', 'I', 'V', 'X' )
 #define FOURCC_cvid VLC_FOURCC( 'c', 'v', 'i', 'd' )
 #define FOURCC_mjpa VLC_FOURCC( 'm', 'j', 'p', 'a' )
 #define FOURCC_mjpb VLC_FOURCC( 'm', 'j', 'q', 't' )
 #define FOURCC_mjqt VLC_FOURCC( 'm', 'j', 'h', 't' )
 #define FOURCC_mjht VLC_FOURCC( 'm', 'j', 'p', 'b' )
+#define FOURCC_VP31 VLC_FOURCC( 'V', 'P', '3', '1' )
+#define FOURCC_vp31 VLC_FOURCC( 'v', 'p', '3', '1' )
+
 #define FOURCC_dvc  VLC_FOURCC( 'd', 'v', 'c', ' ' )
 #define FOURCC_dvp  VLC_FOURCC( 'd', 'v', 'p', ' ' )
-#define FOURCC_twos VLC_FOURCC( 't', 'w', 'o', 's' )
+#define FOURCC_raw  VLC_FOURCC( 'r', 'a', 'w', ' ' )
 
 #define FOURCC_jpeg VLC_FOURCC( 'j', 'p', 'e', 'g' )
 
 #define FOURCC_rmqu VLC_FOURCC( 'r', 'm', 'q', 'u' )
 #define FOURCC_alis VLC_FOURCC( 'a', 'l', 'i', 's' )
 
+#define FOURCC_gmhd VLC_FOURCC( 'g', 'm', 'h', 'd' )
+
 /* Do you want some debug information on all read boxes ? */
 #define MP4_VERBOSE  1
 
@@ -326,14 +357,28 @@ typedef struct MP4_Box_data_sample_soun_s
     uint8_t  i_reserved1[6];
     uint16_t i_data_reference_index;
 
-    uint32_t i_reserved2[2];
+    //uint32_t i_reserved2[2];
+    uint16_t i_qt_version;
+    uint16_t i_qt_revision_level;
+    uint32_t i_qt_vendor;
+
     uint16_t i_channelcount;
     uint16_t i_samplesize;
     uint16_t i_predefined;
     uint16_t i_reserved3;
     uint16_t i_sampleratehi; /* timescale of track */
     uint16_t i_sampleratelo;
-    
+
+    /* for version 1 (i_reserved1[0] == 1) */
+    uint32_t i_sample_per_packet;
+    uint32_t i_bytes_per_packet;
+    uint32_t i_bytes_per_frame;
+    uint32_t i_bytes_per_sample;
+
+    /* XXX hack */
+    int     i_qt_description;
+    uint8_t *p_qt_description;
+
 } MP4_Box_data_sample_soun_t;
 
 typedef struct MP4_Box_data_sample_vide_s
@@ -341,9 +386,12 @@ typedef struct MP4_Box_data_sample_vide_s
     uint8_t  i_reserved1[6];
     uint16_t i_data_reference_index;
 
-    uint16_t i_predefined1;
-    uint16_t i_reserved2;
-    uint32_t i_predefined2[3];
+    uint16_t i_qt_version;
+    uint16_t i_qt_revision_level;
+    uint32_t i_qt_vendor;
+
+    uint32_t i_qt_temporal_quality;
+    uint32_t i_qt_spatial_quality;
 
     int16_t  i_width;
     int16_t  i_height;
@@ -351,14 +399,18 @@ typedef struct MP4_Box_data_sample_vide_s
     uint32_t i_horizresolution;
     uint32_t i_vertresolution;
 
-    uint32_t i_reserved3;
-    uint16_t i_predefined3;
-    
+    uint32_t i_qt_data_size;
+    uint16_t i_qt_frame_count;
+
     uint8_t  i_compressorname[32];
     int16_t  i_depth;
 
-    int16_t  i_predefined4;
-    
+    int16_t  i_qt_color_table;
+
+    /* XXX hack ImageDescription */
+    int     i_qt_image_description;
+    uint8_t *p_qt_image_description;
+
 } MP4_Box_data_sample_vide_t;
 
 typedef struct MP4_Box_data_sample_hint_s