mp4desc.h
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:9k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s): 
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */ 
  35. #ifndef _MP4DESC_H
  36. #define _MP4DESC_H
  37. /****************************************************************************
  38.  *  Defines
  39.  */
  40. // MPEG4 Object Type Indication Values
  41. #define MP4OBJ_FORBIDDEN 0x00
  42. #define MP4OBJ_SYSTEMS_ISO_IEC_14496_1_A 0x01
  43. #define MP4OBJ_SYSTEMS_ISO_IEC_14496_1_B 0x02
  44. #define MP4OBJ_VISUAL_ISO_IEC_14496_2_C 0x20
  45. #define MP4OBJ_AUDIO_ISO_IEC_14496_3_D 0x40
  46. #define MP4OBJ_VISUAL_ISO_IEC_13818_2_Simple 0x60
  47. #define MP4OBJ_VISUAL_ISO_IEC_13818_2_Main 0x61
  48. #define MP4OBJ_VISUAL_ISO_IEC_13818_2_SNR 0x62
  49. #define MP4OBJ_VISUAL_ISO_IEC_13818_2_Spatial 0x63
  50. #define MP4OBJ_VISUAL_ISO_IEC_13818_2_High 0x64
  51. #define MP4OBJ_VISUAL_ISO_IEC_13818_2_422 0x65
  52. #define MP4OBJ_AUDIO_ISO_IEC_13818_7_Main 0x66
  53. #define MP4OBJ_AUDIO_ISO_IEC_13818_7_LC 0x67
  54. #define MP4OBJ_AUDIO_ISO_IEC_13818_7_SSR 0x68
  55. #define MP4OBJ_AUDIO_ISO_IEC_13818_3 0x69
  56. #define MP4OBJ_VISUAL_ISO_IEC_11172_2 0x6A
  57. #define MP4OBJ_VISUAL_ISO_IEC_11172_3 0x6B
  58. #define MP4OBJ_VISUAL_ISO_IEC_10918_1 0x6C
  59. // MPEG4 Stream Type Values
  60. #define MP4STRM_FORBIDDEN 0x00
  61. #define MP4STRM_OBJECT_DESCRIPTOR 0x01
  62. #define MP4STRM_CLOCK_REFERENCE 0x02
  63. #define MP4STRM_SCENE_DESCRIPTION 0x03
  64. #define MP4STRM_VISUAL 0x04
  65. #define MP4STRM_AUDIO 0x05
  66. #define MP4STRM_MPEG7 0x06
  67. #define MP4STRM_IPMP 0x07
  68. #define MP4STRM_OBJECT_CONTENT_INFO 0x08
  69. #define MP4STRM_MPEGJ 0x09
  70. /****************************************************************************
  71.  *  Includes
  72.  */
  73. #include "hxcom.h"
  74. #include "hxtypes.h"
  75. #include "hxslist.h"
  76. #include "ihxpckts.h"
  77. #include "bitstuff.h"
  78. /****************************************************************************
  79.  *  Globals
  80.  */
  81. /****************************************************************************
  82.  *  Descriptor Class Definitions
  83.  */
  84. /****************************************************************************
  85.  *  Base Descriptor
  86.  */
  87. class MP4BaseDescriptor
  88. {
  89. public:
  90.     typedef enum
  91.     {
  92. DTYP_UNKNOWN,
  93. DTYP_ESTREAM,
  94. DTYP_EXTENSION,
  95. DTYP_LANGUAGE,
  96. DTYP_DECODER_CONFIG,
  97. DTYP_DECODER_INFO_SHORT,
  98. DTYP_SL_CONFIG,
  99. DTYP_IPI_PTR,
  100. DTYP_ID_DATASET,
  101. DTYP_QOS
  102.     } DescType;
  103.     typedef enum
  104.     {
  105. SIZE_HEADER_INCLUSIVE     = 0x01
  106.     } Flag;
  107.     
  108.     virtual HX_RESULT Unpack(UINT8* &pData, 
  109.      ULONG32 &ulSize, 
  110.      ULONG32 ulFlags = 0) = 0;
  111.     static DescType GetDescType(UINT8 uTag);
  112.     
  113.     UINT8 m_uTag;
  114.     ULONG32 m_ulFlags;
  115.     
  116. protected:
  117.     MP4BaseDescriptor(UINT8 uTag = 0) 
  118. : m_uTag(uTag)
  119. , m_ulFlags(0)
  120.     {
  121. ;
  122.     }
  123.     
  124.     ~MP4BaseDescriptor()
  125.     {
  126. ;
  127.     }
  128.     static UINT8 GetTag(UINT8* &pData, 
  129. ULONG32 &ulDataSize, 
  130. BOOL bAdvance = FALSE);
  131.     static ULONG32 GetSize(UINT8* &pData, 
  132.    ULONG32 &ulSize, 
  133.    BOOL bAdvance = FALSE);
  134. };
  135. /****************************************************************************
  136.  *  ExtensionDescriptorArray
  137.  */
  138. class ExtensionDescriptorArray : public MP4BaseDescriptor
  139. {
  140. public:
  141.     UINT8 uEntryCount;
  142.     ULONG32 ulLength;
  143.     UINT8* pData;
  144. };
  145. /****************************************************************************
  146.  *  LanguageDescriptor
  147.  */
  148. class LanguageDescriptor : public MP4BaseDescriptor
  149. {
  150. public:
  151.     UINT8 uLength;
  152.     ULONG32 ulCode;
  153. };
  154. class IPI_DescPointer
  155. {
  156. public:
  157.     UINT8 uLength;
  158.     UINT16 uIPI_ES_ID;
  159. };
  160. class IP_IdentificationDataSet
  161. {
  162. public:
  163.     UINT8 uLength;
  164.     UINT8* pData;
  165. };
  166. class QoS_Descriptor
  167. {
  168. public:
  169.     UINT8 uLength;
  170.     UINT8* pData;
  171. };
  172. /****************************************************************************
  173.  *  DecoderSpecifcInfo
  174.  */
  175. class DecoderSpecifcInfo : public MP4BaseDescriptor
  176. {
  177. public:
  178.     DecoderSpecifcInfo(void);
  179.     
  180.     ~DecoderSpecifcInfo();
  181.     
  182.     HX_RESULT Unpack(UINT8* &pData, 
  183.      ULONG32 &ulSize, 
  184.      ULONG32 ulFlags = 0);
  185.     
  186.     ULONG32 m_ulLength;
  187.     UINT8* m_pData;
  188. };
  189. class DecoderConfigDescriptor : public MP4BaseDescriptor
  190. {
  191. public:
  192.     DecoderConfigDescriptor(void);
  193.     
  194.     ~DecoderConfigDescriptor();
  195.     
  196.     HX_RESULT Unpack(UINT8* &pData, 
  197.      ULONG32 &ulSize,
  198.      ULONG32 ulFlags = 0);
  199.     
  200.     UINT8 m_uLength;
  201.     UINT8 m_uObjectProfileIndication;
  202.     UINT8 m_uStreamType;
  203.     BOOL m_bUpStream;
  204.     BOOL m_bReservedBit;
  205.     ULONG32 m_ulBufferSizeDB;
  206.     ULONG32 m_ulMaxBitrate;
  207.     ULONG32 m_ulAvgBitrate;
  208.     DecoderSpecifcInfo* m_pDecSpecificInfo; // MBO: Should support array later
  209. };
  210. /****************************************************************************
  211.  *  SLConfigPredefined
  212.  */
  213. class SLConfigPredefined
  214. {
  215. public:
  216.     SLConfigPredefined(void)
  217.     {
  218. ;
  219.     }
  220.     
  221.     ~SLConfigPredefined()
  222.     {
  223. ;
  224.     }
  225.     
  226.     HX_RESULT Unpack(UINT8* &pData, 
  227.      ULONG32 &ulSize,
  228.      ULONG32 ulFlags = 0);
  229.     
  230.     BOOL m_bUseAccessUnitStartFlag;
  231.     BOOL m_bUseAccessUnitEndFlag;
  232.     BOOL m_bUseRandomAccessPointFlag;
  233.     BOOL m_bUsePaddingFlag;
  234.     BOOL m_bUseTimeStampsFlag;
  235.     BOOL m_bUseWallClockTimeStampFlag;
  236.     BOOL m_bUseIdleFlag;
  237.     BOOL m_bDurationFlag;
  238.     ULONG32 m_ulTimeStampResolution;
  239.     ULONG32 m_ulOCRResolution;
  240.     UINT8 m_uTimeStampLength; // must be less than 64
  241.     UINT8 m_uOCRLength; // must be less than 64
  242.     UINT8 m_AU_Length; // must be less than 32
  243.     UINT8 m_uInstantBitrateLength;
  244.     UINT8 m_uDegradationPriorityLength;
  245.     UINT8 m_uSeqNumLength;
  246.     ULONG32 m_ulTimeScale;
  247.     UINT16 m_uAccessUnitDuration;
  248.     UINT16 m_uCompositionUnitDuration;
  249.     double m_dWallClockTimeStamp;
  250.     UINT64 m_ullStartDecodingTimeStamp;
  251.     UINT64 m_ullStartCompositionTimeStamp;
  252. };
  253. class SLConfigDescriptor : public MP4BaseDescriptor
  254. {
  255. public:
  256.     SLConfigDescriptor(void);
  257.     
  258.     ~SLConfigDescriptor();
  259.     
  260.     HX_RESULT Unpack(UINT8* &pData, 
  261.      ULONG32 &ulSize,
  262.      ULONG32 ulFlags = 0);
  263.     
  264.     UINT8   m_uLength;
  265.     UINT8   m_uPredefined;
  266.     SLConfigPredefined*  m_pPredefined;
  267.     BOOL    m_bOCRstreamFlag;
  268.     UINT8   m_uReserved;
  269.     UINT16  m_OCR_ES_Id;
  270. };
  271. /****************************************************************************
  272.  *  ES_Descriptor
  273.  */
  274. class ES_Descriptor : public MP4BaseDescriptor
  275. {
  276. public:
  277.     ES_Descriptor(void);
  278.     
  279.     ~ES_Descriptor();
  280.     
  281.     HX_RESULT Unpack(UINT8* &pData, 
  282.      ULONG32 &ulSize,
  283.      ULONG32 ulFlags = 0);
  284.     
  285.     UINT16 m_uLength;
  286.     UINT16 m_uESid;
  287.     BOOL m_bStreamDependenceFlag;
  288.     BOOL m_bURLflag;
  289.     BOOL m_bOCRStreamFlag;
  290.     UINT8 m_uStreamPriority;
  291.     UINT16 m_uDependsOn_ES_ID;
  292.     UINT8* m_pURLString;
  293.     UINT16 m_uOCR_ES_ID;
  294.     ExtensionDescriptorArray* m_pExtDescrArray;
  295.     LanguageDescriptor* m_pLangDescr;
  296.     DecoderConfigDescriptor* m_pDecConfigDescr;
  297.     SLConfigDescriptor* m_pSLConfigDescr;
  298.     IPI_DescPointer* m_pIPIPtr;
  299.     IP_IdentificationDataSet* m_pIPIDS;
  300.     QoS_Descriptor* m_pQOSDescr;
  301. };
  302. #endif // _MP4DESC_H