* avi: clean up. Some standard file (ie with 1 RIFF chunk ) has OpenDML
[vlc.git] / modules / demux / avi / libavi.h
index e44693b..f6d3f60 100644 (file)
@@ -2,7 +2,7 @@
  * libavi.h : LibAVI library 
  ******************************************************************************
  * Copyright (C) 2001 VideoLAN
- * $Id: libavi.h,v 1.5 2002/12/04 15:47:31 fenrir Exp $
+ * $Id: libavi.h,v 1.10 2003/04/27 13:55:51 fenrir Exp $
  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  * 
  * This program is free software; you can redistribute it and/or modify
@@ -46,6 +46,7 @@
 #define AVIFOURCC_LIST         VLC_FOURCC('L','I','S','T')
 #define AVIFOURCC_JUNK         VLC_FOURCC('J','U','N','K')
 #define AVIFOURCC_AVI          VLC_FOURCC('A','V','I',' ')
+#define AVIFOURCC_AVIX         VLC_FOURCC('A','V','I','X')
 #define AVIFOURCC_WAVE         VLC_FOURCC('W','A','V','E')
 #define AVIFOURCC_INFO         VLC_FOURCC('I','N','F','O')
 
@@ -58,6 +59,8 @@
 #define AVIFOURCC_strh         VLC_FOURCC('s','t','r','h')
 #define AVIFOURCC_strf         VLC_FOURCC('s','t','r','f')
 #define AVIFOURCC_strd         VLC_FOURCC('s','t','r','d')
+#define AVIFOURCC_strn         VLC_FOURCC('s','t','r','n')
+#define AVIFOURCC_indx         VLC_FOURCC('i','n','d','x')
 
 #define AVIFOURCC_rec          VLC_FOURCC('r','e','c',' ')
 #define AVIFOURCC_auds         VLC_FOURCC('a','u','d','s')
     /* AngelPotion stuff */
 #define FOURCC_AP41         VLC_FOURCC('A','P','4','1')
 
-    /* ?? */
+    /* 3IVX */
 #define FOURCC_3IV1         VLC_FOURCC('3','I','V','1')
+#define FOURCC_3iv1         VLC_FOURCC('2','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')
+
     /* H263 and H263i */
 #define FOURCC_H263         VLC_FOURCC('H','2','6','3')
 #define FOURCC_h263         VLC_FOURCC('h','2','6','3')
@@ -191,8 +202,8 @@ typedef struct avi_chunk_list_s
 typedef struct avi_chunk_idx1_s
 {
     AVI_CHUNK_COMMON
-    int i_entry_count;
-    int i_entry_max;
+    unsigned int i_entry_count;
+    unsigned int i_entry_max;
     idx1_entry_t *entry;
 
 } avi_chunk_idx1_t;
@@ -237,12 +248,14 @@ typedef struct avi_chunk_strh_s
 typedef struct avi_chunk_strf_auds_s
 {
     AVI_CHUNK_COMMON
+    int             i_cat;
     WAVEFORMATEX    *p_wf;
 } avi_chunk_strf_auds_t;
 
 typedef struct avi_chunk_strf_vids_s
 {
     AVI_CHUNK_COMMON
+    int              i_cat;
     BITMAPINFOHEADER *p_bih;
 } avi_chunk_strf_vids_t;
 
@@ -250,6 +263,11 @@ typedef union avi_chunk_strf_u
 {
     avi_chunk_strf_auds_t   auds;
     avi_chunk_strf_vids_t   vids;
+    struct
+    {
+        AVI_CHUNK_COMMON
+        int i_cat;
+    }                       common;
 } avi_chunk_strf_t;
 
 typedef struct avi_chunk_strd_s
@@ -258,6 +276,51 @@ typedef struct avi_chunk_strd_s
     uint8_t  *p_data;
 } avi_chunk_strd_t;
 
+
+#define AVI_INDEX_OF_INDEXES    0x00
+#define AVI_INDEX_OF_CHUNKS     0x01
+#define AVI_INDEX_IS_DATA       0x80
+
+#define AVI_INDEX_2FIELD        0x01
+typedef struct
+{
+    uint32_t i_offset;
+    uint32_t i_size;
+} indx_std_entry_t;
+
+typedef struct
+{
+    uint32_t i_offset;
+    uint32_t i_size;
+    uint32_t i_offsetfield2;
+} indx_field_entry_t;
+
+typedef struct
+{
+    uint64_t i_offset;
+    uint32_t i_size;
+    uint32_t i_duration;
+} indx_super_entry_t;
+
+typedef struct avi_chunk_indx_s
+{
+    AVI_CHUNK_COMMON
+    int16_t i_longsperentry;
+    int8_t  i_indexsubtype;
+    int8_t  i_indextype;
+    int32_t i_entriesinuse;
+    vlc_fourcc_t i_id;
+
+    int64_t i_baseoffset;
+
+    union
+    {
+        indx_std_entry_t    *std;
+        indx_field_entry_t  *field;
+        indx_super_entry_t  *super;
+    } idx;
+} avi_chunk_indx_t;
+
 typedef struct avi_chunk_STRING_s
 {
     AVI_CHUNK_COMMON
@@ -274,6 +337,7 @@ typedef union avi_chunk_u
     avi_chunk_strh_t    strh;
     avi_chunk_strf_t    strf;
     avi_chunk_strd_t    strd;
+    avi_chunk_indx_t    indx;
     avi_chunk_STRING_t  strz;
 } avi_chunk_t;
 
@@ -288,7 +352,7 @@ int     AVI_TestFile( input_thread_t *p_input );
 off_t   AVI_TellAbsolute( input_thread_t *p_input );
 int     AVI_SeekAbsolute( input_thread_t *p_input, off_t i_pos);
 int     AVI_ReadData( input_thread_t *p_input, uint8_t *p_buff, int i_size );
-int     AVI_SkipBytes( input_thread_t *p_input, int i_count );
+int     AVI_SkipBytes( input_thread_t *p_input, int64_t i_count );
 
 int     _AVI_ChunkRead( input_thread_t *p_input,
                         avi_chunk_t *p_chk,