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

DVD

开发平台:

Others

  1. /****************************************************************************************
  2.  *  Copyright (c) 2004 ZORAN Corporation, All Rights Reserved
  3.  *  THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF ZORAN CORPORATION
  4.  *
  5.  *  File: $Workfile: MP4.h $             
  6.  *
  7.  * Description: 
  8.  * ============
  9.  *  Management of MP4 Clips
  10.  * 
  11.  * Log:
  12.  * ====
  13.  * $Revision: #1 $
  14.  * $Change: 24403 $ 
  15.  * Last Modified by $Author: robin.jiang $ at $DateTime: 2004/08/02 15:02:11 $ 
  16.  ****************************************************************************************
  17.  * Updates:
  18.  ****************************************************************************************
  19.  * $Log: /I76/I76_Common/I76_Reference/Playcore/Nav_Clips/MP4.h $
  20.  *
  21.  * 1 8/2/2004 RobinJ
  22.  * Created
  23.  *
  24.  ****************************************************************************************/
  25. #ifdef IS_MP4_CAPABLE
  26. #include "Config.h" // Global Configuration - do not remove!
  27. #ifndef __MP4_H_
  28. #define __MP4_H_
  29. #include "IncludeSysDefs.h"
  30. #include "PlaycoreFileSysFileSystem.h"
  31. #include "Decoderdecoder.h"
  32. /////////////////////////////////////////////////////////////////////////////
  33. // Constants and Enumerations
  34. #define MP4_ESDS_ID "esds"
  35. #define MP4_ES_DESCR_Tag 0x03
  36. #define MP4_DEC_CONFIG_DESCR_Tag 0x04
  37. #define MP4_DEC_SPECIFIC_DESCR_Tag 0x05
  38. #define MP4_VIDEO_TRACK_HANDLER_TYPE "vide"
  39. #define MP4_AUDIO_TRACK_HANDLER_TYPE "soun"
  40. #define MP4_SUBPICTURE_TRACK_HANDLER_TYPE "subp"
  41. #define MP4_SUBTITLE_TRACK_HANDLER_TYPE "subt"
  42. #define MP4_ODSM_TRACK_HANDLE_TYPE "odsm"
  43. #define MP4_BIFS_TRACK_HANDLE_TYPE "sdsm"
  44. #define MP4_USER_TYPE_ID "uuid"
  45. #define MP4_FILE_TYPE_ID "ftyp"
  46. #define MP4_MOVIE_ID "moov" // contrainer
  47. #define MP4_MOVIE_HEADER_ID "mvhd" // FULLBOX
  48. #define MP4_TRACK_ID "trak" // contrainer
  49. #define MP4_TRACK_HEADER_ID "tkhd" // FULLBOX
  50. #define MP4_TRACK_REFERENCE_ID "tref"
  51. #define MP4_EDIT__ID "edts" // contrainer
  52. #define MP4_EDIT_LIST_ID "elst" //FULLBOX
  53. #define MP4_MEDIA_ID "mdia" // contrainer
  54. #define MP4_MEDIA_HEADER_ID "mdhd" // FULLBOX
  55. #define MP4_HANDLER_REFERENCE_ID "hdlr" // FULLBOX
  56. #define MP4_MEDIA_INFOMATION_ID "minf" // container
  57. #define MP4_VIDEO_MEDIA_HEADER_ID "vmhd" //FULLBOX
  58. #define MP4_SOUND_MEDIA_HEADER_ID "smhd" // FULLBOX
  59. #define MP4_HINT_MEDIA_HEADER_ID "hmhd" // FULLBOX
  60. #define MP4_DATA_INFOMATION_ID "dinf" //container
  61. #define MP4_DATA_URL_ID "url " // FULLBOX
  62. #define MP4_DATA_URN_ID "urn " // FULLBOX
  63. #define MP4_DATA_REFERENCE_ID "dref" // FULLBOX
  64. #define MP4_SAMPLE_TABLE_ID "stbl" // container
  65. #define MP4_SAMPLE_DESCRIPTION_ID "stsd" // FULLBOX
  66. #define MP4_DECODING_TIME_TO_SAMPLE_ID "stts" // FULLBOX
  67. #define MP4_COMPOSITION_TIME_TO_SAMPLE_ID "ctts" // FULLBOX
  68. #define MP4_SAMPLE_TO_CHUNK_ID "stsc" // FULLBOX
  69. #define MP4_SAMPLE_SIZE_ID "stsz" // FULLBOX
  70. #define MP4_COMPACT_SAMPLE_SIZE_ID "stz2" // FULLBOX
  71. #define MP4_CHUNK_OFFSET_ID "stco" // FULLBOX
  72. #define MP4_64BIT_CHUNK_OFFSET_ID "co64" // FULLBOX
  73. #define MP4_SYNC_SAMPLE_ID "stss" // FULLBOX
  74. #define MP4_SHADOW_SYNC_SAMPLE_ID "stsh" // FULLBOX
  75. #define MP4_PADDING_BITS_ID "padb" // FULLBOX
  76. #define MP4_DEGRADATION_PRIORITY_ID "stdp" // FULLBOX
  77. #define MP4_MOVIE_EXTENDS_ID "mvex"
  78. #define MP4_TRACK_EXTENDS_ID "trex" // FULLBOX
  79. #define MP4_MOVIE_FRAGMENT_ID "moof"
  80. #define MP4_MOVIE_FRAGMENT_HEADER_ID  "mfhd" // FULLBOX
  81. #define MP4_TRACK_FRAGEMENT_ID "traf"
  82. #define MP4_TRACK_FRAGMENT_HEADER_ID "tfhd" // FULLBOX
  83. #define MP4_TRACK_FRAGMENT_RUN_ID "trun" // FULLBOX
  84. #define MP4_MEDIA_DATA_ID "mdat"
  85. #define MP4_FREE_ID "free"
  86. #define MP4_SKIP_ID "skip"
  87. #define MP4_USER_DATA_ID "udta"
  88. #define MP4_COPYRIGHT_ID "cprt" // FULLBOX
  89. #define MP4_CHAPTER_LIST_ID "chpl"
  90. #define MP4_NERO_DRM_ID "ndrm"
  91. #define NERO_DIGITAL_MOBIE "ndsm"
  92. #define NERO_DIGITAL_PORTABLE "ndsp"
  93. #define NERO_DIGITAL_STANDARD "ndss"
  94. #define NERO_DIGITAL_CINEMA "ndsc"
  95. #define NERO_DIGITAL_HDTV "ndsh"
  96. #define NERO_DIGITAL_MOBIE_AVC "ndxm"
  97. #define NERO_DIGITAL_PORTABLE_AVC "ndxp"
  98. #define NERO_DIGITAL_STANDARD_AVC "ndxs"
  99. #define NERO_DIGITAL_CINEMA_AVC "ndxc"
  100. #define NERO_DIGITAL_HDTV_AVC "ndxh"
  101. typedef enum
  102. {
  103. CODEC_TYPE_VIDEO = 1,
  104. CODEC_TYPE_AUDIO,
  105. CODEC_TYPE_SUBPICTURE,
  106. CODEC_TYPE_SUBTITLE,
  107. CODEC_TYPE_RESERVED,
  108. CODEC_TYPE_UNKNOWN
  109. } MP4_CODEC_TYPE;
  110. /////////////////////////////////////////////////////////////////////////////
  111. // Common Structures
  112. typedef struct
  113. {
  114. UINT32 ulType;
  115. UINT32 ulSize;
  116. } MP4Box;
  117. typedef struct
  118. {
  119. DWORD dwSTSCOffsetInFile;
  120. DWORD dwSTSCStartAddr; // sample to chunk
  121. DWORD dwSTSCEntryCount;
  122. DWORD dwSTCOOffsetInFile;
  123. DWORD dwSTCOStartAddr; // chunk offset
  124. DWORD dwSTCOEntryCount;
  125. DWORD dwSTSZOffsetInFile; // sample size
  126. DWORD dwSTSZSampleSize; // 
  127. DWORD dwSTSZEntryCount;
  128. DWORD dwSTSSOffsetInFile;
  129. DWORD dwSTSSStartAddr; // sync sample
  130. DWORD dwSTSSEntryCount;
  131. DWORD dwSTTSOffsetInFile;
  132. DWORD dwSTTSStartAddr; // time to sample
  133. DWORD dwSTTSEntryCount;
  134. DWORD dwChunkSizeStartAddr; // store chunk offset & addr
  135. DWORD dwSyncEntryStartAddr; // store sync entry, if subtitle, use store sample offset/size/time 
  136. BOOL    bCompactSampeSize;
  137. BOOL bCO64;
  138. BOOL bPackSTSC;
  139. BOOL bPackSTCO;
  140. BOOL bPackSTSZ;
  141. } MP4StreamSampleTableAddr;
  142. typedef struct
  143. {
  144. MP4StreamSampleTableAddr mp4StreamSampleTableAddr;
  145. } MP4StreamSampleTableAddrEX;
  146. #define STSC 0x1
  147. #define STCO 0x2
  148. #define STSZ 0x4
  149. #define STSS 0x8
  150. #define STTS 0x10
  151. #define AUDIO_SAMPLETABLE_VALID (STSC | STCO | STSZ | STTS)
  152. #define VIDEO_SAMPLETABLE_VALID (AUDIO_SAMPLETABLE_VALID | STSS)
  153. #define SUB_SAMPLETABLE_VALID (AUDIO_SAMPLETABLE_VALID | STTS)
  154. #define SAMPLE_TABLE_START_ADDR ((IS_DVD_PHYSICAL_MEDIA ? (OSD_BUFFER_SIZE_DVD_AUX + VCB_SIZE_DVD_AUX) : (OSD_BUFFER_SIZE_CD_AUX + VCB_SIZE_CD_AUX) ) * 512UL)
  155. #define MAX_SAMPLE_TABLE_BUFFER_SIZE 256
  156. #define MP4_CHUNK_OFFSET_BUFF_SIZE    4
  157. #define MP4_CHUNK_SIZE_BUFF_SIZE 4
  158. #define MP4_SYNC_SAMPLE_BUFF_SIZE 4
  159. #define MP4_SYNC_ENTRY_BUFF_SIZE 2
  160. #define MP4_SUBTITLE_SAMPLE_ENTRY_BUFF_SIZE 2
  161. #define MP4_NOT_USED_STREAM_ID 0xff
  162. #define MP4_NO_DUMMY_CHUNK 1
  163. #define MP4_PACK_STCO 1
  164. // RB_1124_2004, ensure the max chunk size less than VCB size
  165. #ifdef SDRAM_2X16MBITS
  166. #define MP4_MAX_CHUNK_SIZE 0x20000UL // 128KB
  167. #else
  168. #define MP4_MAX_CHUNK_SIZE 0x80000UL // 512KB
  169. #endif
  170. typedef struct
  171. {
  172. #ifndef MP4_NO_DUMMY_CHUNK
  173. DWORD dwStreamChunkSizeAddr;
  174. #endif
  175. DWORD dwStreamChunkOffsetAddr;
  176. DWORD dwStreamChunkTotal;
  177. DWORD dwStreamChunkNumber;
  178. // BOOL bStreamChunkFlag;
  179. DWORD dwStreamChunkOffset;
  180. DWORD OffsetBuff[MP4_CHUNK_SIZE_BUFF_SIZE];
  181. #ifndef MP4_NO_DUMMY_CHUNK
  182. DWORD SizeBuff[MP4_CHUNK_SIZE_BUFF_SIZE];
  183. #endif
  184. #ifdef MP4_PACK_STCO
  185. DWORD dwPrevChunkOffset;
  186. BOOL bPackSTCO;
  187. #endif
  188. } MP4StreamChunkSizeBuff;
  189. typedef struct
  190. {
  191. DWORD dwSampleCount;
  192. DWORD dwSampleDelta;
  193. } MP4TimeToSampleEntry;
  194. typedef struct
  195. {
  196. DWORD dwFirstChunk;
  197. DWORD dwSamplePerChunk;
  198. DWORD dwIndex;
  199. } MP4SampleToChunkEntry;
  200. typedef struct
  201. {
  202. DWORD dwChunkOffset;
  203. DWORD dwSampleSize;
  204. DWORD dwSampleEndTime;
  205. } MP4SubtitleSampleEntry;
  206. typedef struct
  207. {
  208. DWORD dwSyncSampleNumber;
  209. DWORD dwSyncChunkOffset;
  210. DWORD dwOffsetofChunk;
  211. DWORD dwSyncSampleSize;
  212. // DWORD dwSyncSampleOffset;
  213. } MP4VideoSyncEntry;
  214. typedef struct 
  215. {
  216. DWORD dwSyncChunkOffset;
  217. DWORD dwOffsetofChunk;
  218. // DWORD dwSyncSampleOffset;
  219. } MP4AudioSyncEntry;
  220. /////////////////////////////////////////////////////////////////////////////
  221. // Public Services
  222. BOOL MP4Clip_isKindOf(LPCWSTR i_pszFilename);
  223. void MP4Clip_continueScanning(void);
  224. void MP4Clip_construct(struct Clip_TAG *o_pThis, const FindData *i_pFileInfo);
  225. void MP4Clip_performErrorHandling(const struct Clip_TAG *i_pThis);
  226. void MP4Clip_subtitleArrived();
  227. #endif // __MP4_H_
  228. #endif