AVI_private.h
上传用户:super_houu
上传日期:2008-09-21
资源大小:4099k
文件大小:10k
源码类别:

DVD

开发平台:

Others

  1. /****************************************************************************************
  2.  *  Copyright (c) 2003 ZORAN Corporation, All Rights Reserved
  3.  *  THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF ZORAN CORPORATION
  4.  *
  5.  *  File: $Workfile: AVI_private.h $             
  6.  *
  7.  * Description:
  8.  * ============
  9.  * Private methods/structures used for AVI clip.
  10.  *
  11.  * Log:
  12.  * ====
  13.  ****************************************************************************************
  14.  * Updates:
  15.  ****************************************************************************************
  16.  * $Log: /I76/I76_Common/I76_Reference/Playcore/Nav_Clips/AVI_private.h $
  17.  * 
  18.  * 23    3/24/04 5:32p Robinj
  19.  * Add ADPCM_*_AUDIO_SID and WAV*_AUDIO_SID
  20.  * 
  21.  * 22    3/21/04 8:49p Lotan
  22.  * merge 4 with certification DB
  23.  * 
  24.  * 21    3/10/04 4:24p Lotan
  25.  * Merge with Divx Certification DB 3
  26.  * 
  27.  * 20    3/08/04 4:14p Hamadk
  28.  * Merging with DivX certification DB - Optimized AVI file info memory
  29.  * 
  30.  * 19    3/04/04 10:22p Lotan
  31.  * Second merge with Divx Certification DB,
  32.  * including 2x16 SDram
  33.  * 
  34.  * 18    3/01/04 6:29p Lotan
  35.  * merge with Divx certification DB
  36.  *
  37.  * From Divx Certification DB
  38.  * - Added support for different I spaces in the IDX for different clips
  39.  * Corrected the max num of entries of idx saved on the scpad
  40.  * Increased time between saved I frames in the Scpad
  41.  
  42.  * 17    2/27/04 7:07p Robinj
  43.  * Add "bIsIndexNotFound" in "AVIFileInfo"
  44.  * 
  45.  * 
  46.  * 15    2/15/04 11:58p Rond
  47.  * added few audio and subtitle streams
  48.  * 
  49.  * 14    2/11/04 12:41a Lotan
  50.  * new Divx DRM handling method.
  51.  * 
  52.  * 12    1/29/04 5:34p Hamadk
  53.  * Added VirtualDub software ID
  54.  * 
  55.  * 11    1/13/04 12:11 Hamadk
  56.  * Merged with CES DB
  57.  * 
  58.  * 10    12/25/03 11:11 Hamadk
  59.  * Added macro
  60.  * 
  61.  * 9     12/18/03 19:09 Hamadk
  62.  * Added function declaration
  63.  * 
  64.  * 8     12/11/03 10:06 Eyalr
  65.  * 
  66.  * 7     11/18/03 9:29 Eyalr
  67.  * added SID for Decoder & UI
  68.  * 
  69.  * 6     11/06/03 15:16 Eyalr
  70.  * added new features for Divx
  71.  * 
  72.  * 5     10/22/03 19:01 Hamadk
  73.  * Added dependency
  74.  * 
  75.  * 4     10/12/03 15:11 Hamadk
  76.  * Added functions declarations
  77.  * 
  78.  * 3     10/02/03 10:32 Hamadk
  79.  * Added FF/FB support
  80.  * 
  81.  * 2     9/29/03 8:16 Hamadk
  82.  * 
  83.  ****************************************************************************************/
  84. #include "Config.h" // Global Configuration - do not remove!
  85. #ifndef __AVI_PRIVATE_H_
  86. #define __AVI_PRIVATE_H_
  87. #include "IncludeSysDefs.h"
  88. #include "DecoderDecoder.h"
  89. #include "PlaycoreNav_ClipsMpeg4ClipsCommon.h"
  90. /////////////////////////////////////////////////////////////////////////////
  91. // Constants and Enumerations
  92. #define RIFF_ID "RIFF"
  93. #define AVI_FILE_ID "AVI "
  94. #define AVI_HEADER_START_ID "hdrl"
  95. #define AVI_CHAR_SET_ID "CSET"
  96. #define AVI_INFO_LIST_ID "INFO"
  97. #define AVI_MAIN_HEADER_ID "avih"
  98. #define AVI_STREAM_HEADER_START_ID "strl"
  99. #define AVI_STREAM_HEADER_ID "strh"
  100. #define AVI_STREAM_FORMAT_ID "strf"
  101. #define AVI_STREAM_HEADER_DATA_ID "strd"
  102. #define AVI_LIST_FOURCC_ID "LIST"
  103. #define AVI_MOVIE_LIST_ID "movi"
  104. #define AVI_IDX_CHUNK_ID "idx1"
  105. #define AVI_ISET_CHUNK_ID "ISFT"
  106. #define AVI_NANDUB_ID "Nandub v1.0rc2"
  107. #define AVI_VIRTUALDUB_ID "VirtualDubMod 1.5.1.1a"
  108. #define AVI2_ID "AVIX"
  109. #define AVI2_HEADER_START_ID "odml"
  110. #define AVI2_HEADER_ID "dmlh"
  111. #define AVI2_INDEX_ID "indx"
  112. #define VIDEO_STREAM_TYPE_ID "vids"
  113. #define AUDIO_STREAM_TYPE_ID "auds"
  114. #define TEXT_STREAM_TYPE_ID "txts"
  115. #define AVI_HEADER_OFFSET 12
  116. #define AVI_ID_OFFSET 8
  117. #define SIZE_FIELD_LENGTH 4         
  118. #define LIST_TYPE_FIELD_LENGTH 4
  119. #define NANDUB_ID_LENGTH 15
  120. #define VIRTUALDUB_ID_LENGTH 22
  121. #if defined(SDRAM_2X16MBITS) && !defined(NEW_2X16M_MAPPING)
  122. #define MAX_NUMBER_OF_IDX_ENTRIES  2350
  123. #else
  124. #define MAX_NUMBER_OF_IDX_ENTRIES  10000
  125. #endif
  126. #define FIFO_WRAPAOURND  0x3F
  127. #define FIFO_LEN  (FIFO_WRAPAOURND+1)
  128. #ifdef AVI_MALLOC_SIZE_DOWN
  129. #define NUM_OF_IDX_ENTRIES_CACHE    32
  130. #else
  131. #define NUM_OF_IDX_ENTRIES_CACHE    128
  132. #endif
  133. #define IDX_TABLE_LONG_TIME_DIFFERANCE    2000 /* In msec */
  134. #define IDX_TABLE_SHORT_TIME_DIFFERANCE   500 /* In msec */
  135. #define IDX_LONG_I_DIFF_THRESHOLD   150000UL /* Number of frames */
  136. typedef enum
  137. {
  138.    EInvalid,
  139.    EVids, 
  140.    EAuds, 
  141.    ETxts,
  142.    EStrl,
  143.    EStrh,
  144.    EStrf,
  145.    EStrd
  146. } EFourCCType;
  147. typedef enum
  148. {
  149. AVI_VIDEO_STREAM,
  150. AVI_AUDIO_STREAM,
  151. AVI_TEXT_STREAM,
  152. AVI_SUBTITLE_STREAM
  153. } AVI_STREAM_TYPE;
  154. /////////////////////////////////////////////////////////////////////////////
  155. // Common Structures
  156. /*
  157. typedef struct 
  158. {
  159. DWORD  dwFileLocation;
  160. DWORD  dwClipStartLBA;
  161. WORD   wClipStartOffset;
  162. WORD   wClipEndOffset;
  163. UINT32 ulTotalBlocksCnt;
  164. BOOL   bIsNandub;
  165. BOOL   bIsIndexProcessed;
  166. BOOL   bHasIndex;
  167. UINT8  divXVersion;
  168. // UINT8  uiAudioStreamID[MAX_AUDS_PER_CLIP];
  169. // UINT8  uiVideoStreamID;
  170. // <<< Robin_0903_2004
  171. #ifndef DIVX_SUPPORT_MULTI_SUBTITLE
  172. UINT8  uiSubtitleStreamID[MAX_SUB_PER_CLIP];
  173. #endif
  174. // >>> Robin_0903_2004
  175. BOOL   bDrmOn;
  176. } AVIFileInfo;
  177. */
  178. typedef struct 
  179. {
  180.     DWORD  dwMicroSecPerFrame;
  181.     DWORD  dwMaxBytesPerSec;
  182.     DWORD  dwReserved1;
  183.     DWORD  dwFlags;
  184.     DWORD  dwTotalFrames;
  185.     DWORD  dwInitialFrames;
  186.     DWORD  dwStreams;
  187.     DWORD  dwSuggestedBufferSize;
  188.     DWORD  dwWidth;
  189.     DWORD  dwHeight;
  190.     DWORD  dwScale;
  191.     DWORD  dwRate;
  192.     DWORD  dwStart;
  193.     DWORD  dwLength;
  194. } AVIMainHeader;
  195. typedef struct 
  196. {
  197. FOURCC fccType;
  198. FOURCC fccHandler;
  199.     DWORD   dwFlags;
  200.     WORD    wPriority;
  201. WORD    wLanguage;
  202.     DWORD   dwInitialFrames;
  203.     DWORD   dwScale;
  204.     DWORD   dwRate;
  205.     DWORD   dwStart;
  206.     DWORD   dwLength;
  207.     DWORD   dwSuggestedBufferSize;
  208.     DWORD   dwQuality;
  209.     DWORD   dwSampleSize;
  210. struct 
  211. {
  212. short int top;
  213. short int bottom;
  214. short int left;
  215. short int right;
  216. } rcFrame;
  217. } AVIStreamHeader;
  218. typedef struct
  219. {
  220.     DWORD  dwSize;
  221.     LONG   lWidth;
  222.     LONG   lHeight;
  223.     WORD   wPlanes;
  224.     WORD   wBitCount;
  225.     DWORD  dwCompression;
  226.     DWORD  dwSizeImage;
  227.     LONG   lXPelsPerMeter;
  228.     LONG   lYPelsPerMeter;
  229.     DWORD  dwClrUsed;
  230.     DWORD  dwClrImportant;
  231. } BitMapInfoHeader;
  232. typedef struct 
  233.     WORD  wFormatTag; 
  234.     WORD  wChannels; 
  235.     DWORD dwSamplesPerSec; 
  236.     DWORD dwAvgBytesPerSec; 
  237.     WORD  wBlockAlign; 
  238.     WORD  wBitsPerSample; 
  239.     WORD  wSize; 
  240. } WaveFormatEX;
  241. typedef struct 
  242. {
  243.         WaveFormatEX    wfx;
  244. WORD            wSamplesPerBlock;
  245. } ADPCMWAVEFORMAT;
  246. typedef struct 
  247. {
  248.         WaveFormatEX    wfx;
  249.     DWORD dwSamplesPerBlock;
  250.     WORD wEncoderOptions;
  251.     DWORD dwSuperBlockAlign;
  252. } WMAWAVEFORMAT;
  253. typedef union
  254. {
  255. WaveFormatEX wave;
  256. #ifdef  D_ENABLE_ADPCM_SUPPORT
  257. ADPCMWAVEFORMAT adpcm;
  258. #endif
  259. #ifdef D_ENABLE_DIVX_WMA_SUPPORT
  260. WMAWAVEFORMAT wma;
  261. #endif
  262. } WaveFormat;
  263. typedef struct 
  264. {
  265. FOURCC fccType;
  266. FOURCC fccHandler;
  267. DWORD  dwScale;
  268.     DWORD  dwRate;
  269. DWORD  dwLength;
  270. } StreamHeadInfo;
  271. /*
  272. typedef struct 
  273. {
  274. LONG  lWidth;
  275.     LONG  lHeight;
  276.     DWORD dwCompression;
  277. } BitmapInfo;
  278. typedef struct 
  279. {
  280. WORD wFormatTag; 
  281.     DWORD dwSamplesPerSec; 
  282. #ifdef D_ENABLE_ADPCM_SUPPORT
  283. WORD  wSamplesPerBlock;
  284. WORD   wBitsPerSample;
  285. #endif
  286. #if (defined(D_ENABLE_DIVX_WMA_SUPPORT) || defined(D_ENABLE_ADPCM_SUPPORT))
  287. WORD  wChannels; 
  288. WORD  wBlockAlign;
  289. #endif
  290.      DWORD dwAvgBytesPerSec; 
  291. #ifdef D_ENABLE_DIVX_WMA_SUPPORT
  292.      WORD wEncoderOptions;
  293. #endif
  294. } WaveFormatInfo;
  295. */
  296. /*
  297. typedef struct
  298. {
  299. StreamHeadInfo _aviStreamHeader;
  300. AVI_STREAM_TYPE _aviStreamType;
  301. union
  302. {
  303. BitmapInfo    _bitMapInfoHeader;
  304. WaveFormatInfo _waveFormat;
  305. } _aviStreamFormat;
  306. } AVIStreamInfo;
  307. */
  308. /*
  309. typedef struct 
  310. {
  311. UINT8 _streamID;
  312. StreamHeadInfo _aviStreamHeader;
  313. BitmapInfo    _bitMapInfoHeader;
  314. } AVIVideoStreamInfo;
  315. typedef struct 
  316. {
  317. UINT8 _streamID;
  318. StreamHeadInfo _aviStreamHeader;
  319. WaveFormatInfo _waveFormat;
  320. } AVIAudioStreamInfo;
  321. typedef struct  
  322. {
  323. WORD wVersion;
  324. //STR sDRMInfo;
  325. } DRMInfo;
  326. */
  327. typedef struct 
  328. {
  329. BYTE aFOURCCBuff[FOURCC_FIELD_LENGTH];
  330. UINT32 ulSize;
  331. BYTE* pData;
  332. BOOL bIsList;
  333. } FOURCCInfo;
  334. typedef struct
  335. {
  336.     char ucChunkID[4];
  337.     DWORD  dwFlags;
  338.     DWORD  dwChunkOffset;
  339.     DWORD  dwChunkLength;
  340. } AVIIndexEntry;
  341. typedef struct
  342. {
  343.     DWORD dwAudioChunksOffsets;
  344.     DWORD dwAudioChunksLengths;
  345.     DWORD dwAudioChunksFrames;
  346. } IdxFIFOElement;
  347. typedef struct 
  348. {
  349. UINT32 ulVideoFrameNumber;
  350. UINT32 ulVideoChunkOffset;
  351. UINT32 ulVideoChunkSize;
  352.     UINT32 ulAudioChunkOffset;
  353. UINT32 ulAudioChunkDelta;
  354. // Robin_1003_2004_D
  355.     UINT16 uiSkipVideoChunks;
  356.     UINT16 uiSkipAudioChunks;
  357. } IndexEntry;
  358. /////////////////////////////////////////////////////////////////////////////
  359. // Private Services
  360. BOOL _getNextFOURCC(DWORD dwClipStartAddr, DWORD dwOffset, FOURCCInfo* forccInfo);
  361. BOOL _searchForFORCC(DWORD dwClipStartAddr, DWORD* pdwOffset, 
  362.  LPSTR fourccName, FOURCCInfo* pFourccInfo, BOOL bReadFOURCCData);
  363. BOOL _aquireAVIStreamsInfo(DWORD dwClipStartAddr, DWORD dwOffset, DWORD *dwStrdOffset);
  364. BOOL _acquireAVIInfo(DWORD dwClipStartAddr);
  365. BOOL _getIdxEntry(DWORD dwClipStartAddr, DWORD dwOffset, DWORD ulIdxSize, 
  366.   AVIIndexEntry* pCurrEntry, BOOL bFirstTime, UINT32 ulLeftIdxSize);
  367. // Robin_1003_2004_D
  368. BOOL _saveIdxEntry(UINT32 ulVidFrameNumber, DWORD dwVidChunkOffset, DWORD dwVidChunkSize,
  369.    DWORD dwAudioChunkOffset, DWORD dwAudioChunkDelta, UINT16 uiSkipVideoChunks, UINT16 uiSkipAudioChunks);
  370. BOOL _aquireAndProcessIdx(DWORD dwClipStartAddr, UINT8 uiVideoStreamNum, UINT8 uiAudioStreamNum, DWORD* dwFirstChunkOffset);
  371. BOOL _aviProcessTimeToAddressInfo(DWORD dwClipStartAddr, WORD wTime);
  372. BOOL _aviScan(INT8 iIndexIncrement, BOOL bContinue);
  373. EFourCCType StringToFourCC(char* fourCCstring);
  374. BOOL _getAdjacentIFrames(DWORD dwClipStartAddr, WORD wCurrTime, 
  375.  UINT32* ulFirstIFrame, UINT32* ulSecondIFrame,
  376.  WORD* wFirstITime, WORD* wSecondITime,
  377.  UINT32* ulFirstIIdx, UINT32* ulSecondIIdx);
  378. BOOL _getNextIFrames(DWORD dwClipStartAddr, UINT32 ulRequestedFrameNumber, 
  379. UINT32* ulNextIIdx, WORD* wNextITime);
  380. #endif // __AVI_PRIVATE_H_