qtatoms.cpp
上传用户: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. /****************************************************************************
  36.  *  Includes
  37.  */
  38. #include "qtatoms.h"
  39. #ifndef QTCONFIG_SPEED_OVER_SIZE
  40. #include "qtatoms_inline.h"
  41. #endif // QTCONFIG_SPEED_OVER_SIZE
  42. /****************************************************************************
  43.  *  The atom factory
  44.  */
  45. CQTAtom* CreateQTAtom(QTAtomType AtomType,
  46.       ULONG32 ulOffset,
  47.       ULONG32 ulSize, 
  48.       CQTAtom *pParent,
  49.       ULONG32 ulAtomID,
  50.       UINT16 uChildCount)
  51. {
  52.     switch (AtomType)
  53.     {
  54.     case QT_trak:
  55. return new CQT_trak_Atom(ulOffset, ulSize, pParent);
  56.     case QT_tkhd:
  57. return new CQT_tkhd_Atom(ulOffset, ulSize, pParent);
  58.     case QT_mdia:
  59. return new CQT_mdia_Atom(ulOffset, ulSize, pParent);
  60.     case QT_mdhd:
  61. return new CQT_mdhd_Atom(ulOffset, ulSize, pParent);
  62.     case QT_hdlr:
  63. return new CQT_hdlr_Atom(ulOffset, ulSize, pParent);
  64.     case QT_edts:
  65. return new CQT_edts_Atom(ulOffset, ulSize, pParent);
  66.     case QT_elst:
  67. return new CQT_elst_Atom(ulOffset, ulSize, pParent);
  68.     case QT_udta:
  69. return new CQT_udta_Atom(ulOffset, ulSize, pParent);
  70.     case QT_minf:
  71. return new CQT_minf_Atom(ulOffset, ulSize, pParent);
  72.     case QT_dinf:
  73. return new CQT_dinf_Atom(ulOffset, ulSize, pParent);
  74.     case QT_dref:
  75. return new CQT_dref_Atom(ulOffset, ulSize, pParent);
  76.     case QT_stbl:
  77. return new CQT_stbl_Atom(ulOffset, ulSize, pParent);
  78.     case QT_stts:
  79. return new CQT_stts_Atom(ulOffset, ulSize, pParent);
  80.     case QT_ctts:
  81. return new CQT_ctts_Atom(ulOffset, ulSize, pParent);
  82.     case QT_stss:
  83. return new CQT_stss_Atom(ulOffset, ulSize, pParent);
  84.     case QT_stsd:
  85. return new CQT_stsd_Atom(ulOffset, ulSize, pParent);
  86.     case QT_stsz:
  87. return new CQT_stsz_Atom(ulOffset, ulSize, pParent);
  88.     case QT_stsc:
  89. return new CQT_stsc_Atom(ulOffset, ulSize, pParent);
  90.     case QT_stco:
  91. return new CQT_stco_Atom(ulOffset, ulSize, pParent);
  92.     case QT_name:
  93. return new CQT_name_Atom(ulOffset, ulSize, pParent);
  94.     case QT_moov:
  95. return new CQT_moov_Atom(ulOffset, ulSize, pParent);
  96.     case QT_mvhd:
  97. return new CQT_mvhd_Atom(ulOffset, ulSize, pParent);
  98.     case QT_ftyp:
  99. return new CQT_ftyp_Atom(ulOffset, ulSize, pParent);
  100. #ifndef QTCONFIG_3GPPCLIENT_ATOMSET_ONLY
  101.     case QT_tref:
  102. return new CQT_tref_Atom(ulOffset, ulSize, pParent);
  103.     case QT_hint:
  104. return new CQT_hint_Atom(ulOffset, ulSize, pParent);
  105.     case QT_hinf:
  106. return new CQT_hinf_Atom(ulOffset, ulSize, pParent);
  107.     case QT_hnti:
  108. return new CQT_hnti_Atom(ulOffset, ulSize, pParent);
  109.     case QT_sdp:
  110. return new CQT_sdp_Atom(ulOffset, ulSize, pParent);
  111.     case QT_trpy:
  112. return new CQT_trpy_Atom(ulOffset, ulSize, pParent);
  113.     case QT_nump:
  114. return new CQT_nump_Atom(ulOffset, ulSize, pParent);
  115.     case QT_tpyl:
  116. return new CQT_tpyl_Atom(ulOffset, ulSize, pParent);
  117.     case QT_payt:
  118. return new CQT_payt_Atom(ulOffset, ulSize, pParent);
  119.     case QT_rtp:
  120. return new CQT_rtp_Atom(ulOffset, ulSize, pParent);
  121.     case QT_iods:
  122. return new CQT_iods_Atom(ulOffset, ulSize, pParent);
  123. #endif // QTCONFIG_3GPPCLIENT_ATOMSET_ONLY
  124.     /***
  125. // /-->> XXXEH- UNFINISHED code; much of this won't need to be handled here:
  126.     case QT_tx3g:  // / TextSampleEntry
  127. // return new CQT_tx3g_Atom(ulOffset, ulSize, pParent);
  128.     case QT_ftab:  // / FontTableBox
  129. // return new CQT_ftab_Atom(ulOffset, ulSize, pParent);
  130.     case QT_styl:  // / TextStyleBox
  131. // return new CQT_styl_Atom(ulOffset, ulSize, pParent);
  132.     case QT_hlit:  // / TextHighlightBox
  133. // return new CQT_hlit_Atom(ulOffset, ulSize, pParent);
  134.     case QT_hclr:  // / TextHighlightColorBox
  135. // return new CQT_hclr_Atom(ulOffset, ulSize, pParent);
  136.     case QT_krok:  // / TextKaraokeBox
  137. // return new CQT_krok_Atom(ulOffset, ulSize, pParent);
  138.     case QT_href:  // / TextHyperTextBox
  139. // return new CQT_href_Atom(ulOffset, ulSize, pParent);
  140.     case QT_tbox:  // / TextboxBox
  141. // return new CQT_tbox_Atom(ulOffset, ulSize, pParent);
  142.     case QT_blnk:  // / BlinkBox
  143. // return new CQT_blnk_Atom(ulOffset, ulSize, pParent);
  144. HX_ASSERT(0);
  145. break;
  146. // / <<--  end UNFINISHED code.
  147.     ***/
  148.     default:
  149. /* nothing to do */
  150. break;
  151.     }
  152.     return NULL;
  153. }
  154. CQT_stsd_Atom::TextSampleEntry::TextSampleEntry(ArrayEntry* pPackedEntry,
  155.                UINT32 ulSzOfPackedEntry)
  156. {
  157. #if defined(NEED_DATA_IN_TEXTSAMPLEENTRY_FOR_MP4FF)
  158.     UINT8* pUnpkdEntryData = (UINT8*)pPackedEntry;
  159.     UINT32 ulByteCount = 0;
  160.     UINT16 ui = 0;
  161.     memcpy(this, pUnpkdEntryData, sizeof(ArrayEntry));
  162.     if (ulSzOfPackedEntry < sizeof(TextSampleEntry))
  163.     {
  164. goto done;
  165.     }
  166.     ulByteCount += sizeof(ArrayEntry);
  167.     ulDisplayFlags = GetUL32(&pUnpkdEntryData[ulByteCount]);
  168.     ulByteCount += 4;
  169.     horizontalJustification = pUnpkdEntryData[ulByteCount];
  170.     ulByteCount += 1;
  171.     verticalJustification = pUnpkdEntryData[ulByteCount];
  172.     ulByteCount += 1;
  173.     memcpy(&uBackgroundColorRGBA, &pUnpkdEntryData[ulByteCount], 4); /* Flawfinder: ignore */
  174.     ulByteCount += 4;
  175.     defaultTextBox.top = (INT16)GetUI16(&pUnpkdEntryData[ulByteCount]);
  176.     ulByteCount += 2;
  177.     defaultTextBox.left = (INT16)GetUI16(&pUnpkdEntryData[ulByteCount]);
  178.     ulByteCount += 2;
  179.     defaultTextBox.bottom = (INT16)GetUI16(&pUnpkdEntryData[ulByteCount]);
  180.     ulByteCount += 2;
  181.     defaultTextBox.right = (INT16)GetUI16(&pUnpkdEntryData[ulByteCount]);
  182.     ulByteCount += 2;
  183.     defaultStyle.startChar =  (INT16)GetUI16(&pUnpkdEntryData[ulByteCount]);
  184.     ulByteCount += 2;
  185.     defaultStyle.endChar =  (INT16)GetUI16(&pUnpkdEntryData[ulByteCount]);
  186.     ulByteCount += 2;
  187.     defaultStyle.fontID =  (INT16)GetUI16(&pUnpkdEntryData[ulByteCount]);
  188.     ulByteCount += 2;
  189.     defaultStyle.faceStyleFlags = pUnpkdEntryData[ulByteCount];
  190.     ulByteCount += 1;
  191.     defaultStyle.fontSize = pUnpkdEntryData[ulByteCount];
  192.     ulByteCount += 1;
  193.     memcpy(&defaultStyle.textColorRGBA, &pUnpkdEntryData[ulByteCount], 4); /* Flawfinder: ignore */
  194.     ulByteCount += 4;
  195.     fontTable.ulFontTableSizeInBytes = GetUL32(&pUnpkdEntryData[ulByteCount]);
  196.     ulByteCount += 4;
  197.     memcpy(&fontTable.FTAB, &pUnpkdEntryData[ulByteCount], 4);
  198.     HX_ASSERT(!strncmp((const char*)fontTable.FTAB, (const char*)"ftab", 4)); /* Flawfinder: ignore */
  199.     ulByteCount += 4;
  200.     fontTable.entryCount = GetUI16(&pUnpkdEntryData[ulByteCount]);
  201.     ulByteCount += 2;
  202.     fontTable.pFontEntries = new FontRecord[fontTable.entryCount];
  203.     for (ui = 0; ui < fontTable.entryCount  &&
  204.     ulByteCount<=ulSzOfPackedEntry; ui++)
  205.     {
  206. fontTable.pFontEntries[ui].fontID = GetUI16(&pUnpkdEntryData[ulByteCount]);
  207. ulByteCount += 2;
  208. fontTable.pFontEntries[ui].fontNameLength = pUnpkdEntryData[ulByteCount];
  209. ulByteCount += 1;
  210. fontTable.pFontEntries[ui].pFont =
  211. new UINT8[fontTable.pFontEntries[ui].fontNameLength+1];
  212. memcpy(fontTable.pFontEntries[ui].pFont, &pUnpkdEntryData[ulByteCount], /* Flawfinder: ignore */
  213. fontTable.pFontEntries[ui].fontNameLength);
  214. (fontTable.pFontEntries[ui].pFont)[fontTable.pFontEntries[ui].fontNameLength] = '';
  215. ulByteCount += fontTable.pFontEntries[ui].fontNameLength;
  216.     }
  217.     HX_ASSERT(ulSzOfPackedEntry == ulByteCount);
  218. done:
  219.     return;
  220. #endif // /defined(NEED_DATA_IN_TEXTSAMPLEENTRY_FOR_MP4FF)
  221. }
  222. CQT_stsd_Atom::FontTableBox::~FontTableBox()
  223. {
  224. #if defined(NEED_DATA_IN_TEXTSAMPLEENTRY_FOR_MP4FF)
  225.     if (pFontEntries  &&  entryCount)
  226.     {
  227. for (UINT16 ui = entryCount-1; ui; ui--)
  228. {
  229.     if (pFontEntries[ui].pFont)
  230.     {
  231. delete [] (pFontEntries[ui].pFont);
  232.     }
  233. }
  234. delete pFontEntries;
  235. pFontEntries = NULL;
  236.     }
  237. #endif // /defined(NEED_DATA_IN_TEXTSAMPLEENTRY_FOR_MP4FF)
  238. }