1 #ifndef __AVIFILE_H
2 #define __AVIFILE_H
3 
4 #include "avi_def.h"
5 
6 //#define DEBUGINFO //信息打印开关
7 
8 /** big_endian */
9 // #define RIFF_ID      0x52494646
10 // #define AVI_ID       0x41564920
11 // #define LIST_ID      0x4c495354
12 // #define hdrl_ID      0x6864726c
13 // #define avih_ID      0x61766968
14 // #define strl_ID      0x7374726c
15 // #define strh_ID      0x73747268
16 // #define strf_ID      0x73747266
17 // #define movi_ID      0x6d6f7669
18 // #define mjpg_ID     0x4D4A5047
19 // #define vids_ID     0x76696473
20 // #define auds_ID     0x61756473
21 
22 /** little_endian */
23 #define RIFF_ID     _REV(0x52494646)
24 #define AVI_ID      _REV(0x41564920)
25 #define LIST_ID     _REV(0x4c495354)
26 #define hdrl_ID     _REV(0x6864726c)
27 #define avih_ID     _REV(0x61766968)
28 #define strl_ID     _REV(0x7374726c)
29 #define strh_ID     _REV(0x73747268)
30 #define strf_ID     _REV(0x73747266)
31 #define movi_ID     _REV(0x6d6f7669)
32 #define mjpg_ID     _REV(0x4D4A5047)
33 #define vids_ID     _REV(0x76696473)
34 #define auds_ID     _REV(0x61756473)
35 
36 typedef struct
37 {
38     uint32_t  RIFFchunksize;
39     uint32_t  LISTchunksize;
40     uint32_t  avihsize;
41     uint32_t  strlsize;
42     uint32_t  strhsize;
43 
44     uint32_t movi_start; //数据块的起始位置
45     uint32_t movi_size;
46 
47     uint16_t vids_fps;
48     uint16_t vids_width;
49     uint16_t vids_height;
50 
51     uint16_t auds_channels;
52     uint16_t auds_sample_rate;
53     uint16_t auds_bits;
54 
55     AVI_HDRL_LIST avi_hd;
56 } AVI_TypeDef;
57 
58 #define  MAKEWORD(ptr)  (uint32_t)(((uint32_t)*((uint8_t*)(ptr))<<8)|(uint32_t)*(uint8_t*)((ptr)+1))
59 #define  MAKEuint32_t(ptr)  (uint32_t)(((uint32_t)*(uint8_t*)(ptr)|(((uint32_t)*(uint8_t*)(ptr+1))<<8)|\
60                         (((uint32_t)*(uint8_t*)(ptr+2))<<16)|(((uint32_t)*(uint8_t*)(ptr+3))<<24)))
61 
62 
63 int AVI_Parser(const uint8_t *buffer, uint32_t length);
64 uint8_t AVIH_Parser(uint8_t *buffer);
65 
66 #endif
67 
68