avi_type.h
上传用户:poi891205
上传日期:2013-07-15
资源大小:9745k
文件大小:8k
源码类别:

DVD

开发平台:

C/C++

  1. #ifndef __AVI_TYPES_H
  2. #define __AVI_TYPES_H
  3. #include "types.h"
  4. typedef UINT32 FOURCC;
  5. // structure for avi stream table
  6. typedef struct _strm_table
  7. {
  8. BYTE strm_num;
  9. UINT32 strm_offset;
  10. } STRM_TABLE;
  11. typedef struct _cset
  12. {
  13. UINT16 wCodePage __attribute__ ((packed));
  14. UINT16 wCountryCode __attribute__ ((packed));
  15. UINT16 wLanguageCode __attribute__ ((packed));
  16. UINT16 wDialect __attribute__ ((packed));
  17. } CSET, *PCSET, TEXTINFO, *PTEXTINFO;
  18. typedef struct _rect
  19. {
  20.     UINT32 left __attribute__ ((packed));
  21.     UINT32 top __attribute__ ((packed));
  22.     UINT32 right __attribute__ ((packed));
  23.     UINT32 bottom __attribute__ ((packed));
  24. } RECT, *PRECT;
  25. typedef struct _colorrgb
  26. {
  27. BYTE bRed __attribute__ ((packed));
  28. BYTE bGreen __attribute__ ((packed));
  29. BYTE bBlue __attribute__ ((packed));
  30. } CLRRGB;
  31. typedef struct tagPALETTEENTRY
  32. {
  33. BYTE peRed __attribute__ ((packed));
  34. BYTE peGreen __attribute__ ((packed));
  35. BYTE peBlue __attribute__ ((packed));
  36. BYTE peFlags __attribute__ ((packed));
  37. } PALETTEENTRY, *PPALETTEENTRY;
  38. typedef struct
  39. {
  40. BYTE bFirstEntry __attribute__ ((packed)); // first entry to change
  41. BYTE bNumEntries __attribute__ ((packed)); // # entries to change (0 if 256)
  42. UINT16 wFlags __attribute__ ((packed)); // Mostly to preserve alignment...
  43. PALETTEENTRY peNew[] __attribute__ ((packed)); // New color specifications
  44. } AVIPALCHANGE;
  45. typedef struct _bitmapinfoheader
  46. {
  47. UINT32 biSize __attribute__ ((packed));
  48. INT32 biWidth __attribute__ ((packed));
  49. INT32 biHeight __attribute__ ((packed));
  50. UINT16 biPlanes __attribute__ ((packed));
  51. UINT16 biBitCount __attribute__ ((packed));
  52. UINT32 biCompression __attribute__ ((packed));
  53. UINT32 biSizeImage __attribute__ ((packed));
  54. INT32 biXPelsPerMeter __attribute__ ((packed));
  55. INT32 biYPelsPerMeter __attribute__ ((packed));
  56. UINT32 biClrUsed __attribute__ ((packed));
  57. UINT32 biClrImportant __attribute__ ((packed));
  58. } BITMAPINFOHEADER;
  59. typedef struct _supbipmapheader
  60. {
  61. UINT16 wWidth __attribute__ ((packed));
  62. UINT16 wHeight __attribute__ ((packed));
  63. UINT16 wLeft __attribute__ ((packed));
  64. UINT16 wTop __attribute__ ((packed));
  65. UINT16 wRight __attribute__ ((packed));
  66. UINT16 wBottom __attribute__ ((packed));
  67. UINT16 wFoffset __attribute__ ((packed));
  68. CLRRGB CBackground __attribute__ ((packed));
  69. CLRRGB CPattern __attribute__ ((packed));
  70. CLRRGB CEmphasis1 __attribute__ ((packed));
  71. CLRRGB CEmphasis2 __attribute__ ((packed));
  72. } SUPBITMAPHEADER;
  73. // main AVI header list
  74. typedef struct _mainaviheader
  75. {
  76. UINT32 dwMicroSecPerFrame __attribute__ ((packed)); // frame display rate (or 0L)
  77. UINT32 dwMaxBytesPerSec __attribute__ ((packed)); // max. transfer rate
  78. UINT32 dwPaddingGranularity __attribute__ ((packed));
  79. UINT32 dwFlags __attribute__ ((packed));
  80. UINT32 dwTotalFrames __attribute__ ((packed)); // # frames in file
  81. UINT32 dwInitialFrames __attribute__ ((packed));
  82. UINT32 dwStreams __attribute__ ((packed));
  83. UINT32 dwSuggestedBufferSize __attribute__ ((packed));
  84. UINT32 dwWidth __attribute__ ((packed));
  85. UINT32 dwHeight __attribute__ ((packed));
  86. UINT32 dwScale __attribute__ ((packed));
  87. UINT32 dwRate __attribute__ ((packed));
  88. UINT32 dwStart __attribute__ ((packed));
  89. UINT32 dwlength __attribute__ ((packed));
  90. } MainAVIHeader, *PMainAVIHeader;
  91. // stream header
  92. typedef struct _avistreamheader
  93. {
  94. FOURCC fccType __attribute__ ((packed));
  95. FOURCC fccHandler __attribute__ ((packed));
  96. UINT32 dwFlags __attribute__ ((packed));
  97. UINT16 wPriority __attribute__ ((packed));
  98. UINT16 wLanguage __attribute__ ((packed));
  99. UINT32 dwInitialFrames __attribute__ ((packed));
  100. UINT32 dwScale __attribute__ ((packed));
  101. UINT32 dwRate __attribute__ ((packed)); // dwRate / dwScale == samples/second
  102. UINT32 dwStart __attribute__ ((packed));
  103. UINT32 dwLength __attribute__ ((packed));
  104. UINT32 dwSuggestedBufferSize __attribute__ ((packed));
  105. UINT32 dwQuality __attribute__ ((packed));
  106. UINT32 dwSampleSize __attribute__ ((packed));
  107. RECT rcFrame __attribute__ ((packed));
  108. } AVIStreamHeader, *PAVIStreamHeader;
  109. // idx1 structure
  110. typedef struct _aviindexentry
  111. {
  112. UINT32 ckid __attribute__ ((packed));
  113. UINT32 dwFlags __attribute__ ((packed));
  114. UINT32 dwChunkOffset __attribute__ ((packed)); // Position of chunk
  115. UINT32 dwChunkLength __attribute__ ((packed)); // Length of chunk
  116. } AVIINDEXENTRY, *PAVIINDEXENTRY;
  117. // base index form 'indx'
  118. typedef struct _avioldindex
  119. {
  120. FOURCC fcc __attribute__ ((packed));
  121. UINT32 cb __attribute__ ((packed));
  122. UINT16 wLongsPerEntry __attribute__ ((packed)); // must be sizeof(aIndex[0])/sizeof(DWORD)
  123. BYTE bIndexSubType __attribute__ ((packed)); // must be 0
  124. BYTE bIndexType __attribute__ ((packed)); // must be AVI_INDEX_OF_CHUNKS
  125. UINT32 nEntriesInUse __attribute__ ((packed)); // index of first unused member in aIndex array
  126. UINT32 dwChunkID __attribute__ ((packed)); // fcc of what is indexed
  127. UINT32 dwReserved[3] __attribute__ ((packed)); // meaning differs for each index type/subtype. 0 if unused
  128. struct _aviindex_entry {
  129. UINT32 asw;
  130. } aIndex[];
  131. } AVIOLDINDEX, *PAVIOLDINDEX;
  132. // AVI standard index chunk
  133. typedef struct _avistdindex_chunk
  134. {
  135. FOURCC fcc; // 'ix##'
  136. UINT32 cb;
  137. UINT16 wLongsPerEntry; // must be sizeof(aIndex[0])/sizeof(DWORD)
  138. BYTE bIndexSubType; // must be 0
  139. BYTE bIndexType; // must be AVI_INDEX_OF_CHUNKS
  140. UINT32 nEntriesInUse; // index of first unused member in aIndex array
  141. UINT32 dwChunkID; // '##dc' or '##db' or '##wb' etc..
  142. UINT64 qwBaseOffset; // all dwOffsets in aIndex array are relative to this
  143. UINT32 dwReserved3; // must be 0
  144. struct _avistdindex_entry {
  145. UINT32 dwOffset; // qwBaseOffset + this is absolute file offset
  146. UINT32 dwSize; // bit 31 is set if tis is NOT a keyframe
  147. } aIndex[];
  148. } AVISTDINDEX, *PAVISTDINDEX;
  149. // AVI field index chunk
  150. typedef struct _avifieldindex_chunk
  151. {
  152. FOURCC fcc; // 'ix##'
  153. UINT32 cb;
  154. UINT16 wLongsPerEntry; // must be 3 (size of each entry in aIndex array)
  155. BYTE bIndexSubType; // AVI_INDEX_2FIELD
  156. BYTE bIndexType; // must be AVI_INDEX_OF_CHUNKS
  157. UINT32 nEntriesInUse; //
  158. UINT32 dwChunkID; // '##dc' or '##db'
  159. UINT64 qwBaseOffset; // all dwOffsets in aIndex array are relative to this
  160. UINT32 dwReserved3; // must be 0
  161. struct _avifieldindex_entry {
  162. UINT32 dwOffset; // qwBaseOffset + this is absolute file offset
  163. UINT32 dwSize; // size of all fields (bit 31 set for NON-keyframes)
  164. UINT32 dwOffsetField2; // offset to second field
  165. } aIndex[];
  166. } AVIFIELDINDEX, *PAVIFIELDINDEX;
  167. // AVI super index chunk
  168. typedef struct _avisuperindex_chunk
  169. {
  170. FOURCC fcc; // 'indx'
  171. UINT32 cb;
  172. UINT16 wLongsPerEntry; // must be 4 (size of each entry in aIndex array)
  173. BYTE bIndexSubType; // must be 0 or AVI_INDEX_2FIELD
  174. BYTE bIndexType; // must be AVI_INDEX_OFINDEXES
  175. UINT32 nEntriesInUse; //
  176. UINT32 dwChunkID; // '##dc' or '##db' or '##wb' etc..
  177. UINT32 dwReserved[3]; // must be 0
  178. struct _avisuperindex_entry {
  179. UINT64 qwOffset; // absolute file offset, offset is unused entry??
  180. UINT32 dwSize; // size of index chunk at this offset
  181. UINT32 dwDuration; // time span in stream ticks
  182. UINT32 dwOffsetField2; // offset to second field
  183. } aIndex[];
  184. } AVISUPERINDEX, *PAVISUPERINDEX;
  185. typedef struct _avi_video_info
  186. {
  187. BYTE version_str[6];
  188. UINT16 width;
  189. UINT16 height;
  190. } avi_video_info;
  191. #endif // __AVI_TYPES_H