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

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 _MP3MISC_H_
  36. #define _MP3MISC_H_
  37. typedef enum
  38. {
  39.     eNone,
  40.     eID3v1,
  41.     eID3v2,
  42.     eShoutCast,
  43.     eIceCast,
  44.     eOther
  45. } eHeaderType;
  46. class CAudioInfoBase;
  47. class CMp3Misc
  48. {
  49. public:
  50.     CMp3Misc();
  51.     virtual ~CMp3Misc();
  52.     void        SetParent(CAudioInfoBase* pFmt) {m_pFmt = pFmt;}
  53.     virtual 
  54.     BOOL        CheckForHeaders(UINT8 *pBuf,
  55.                                 UINT32 dwSize,
  56.                                 INT32 &lHeaderSize);
  57.     void        GetId3v1Values(UINT8 *pBuf,
  58.                                UINT32 ulSize);
  59.     void        GetId3Entry(UINT8 *pBuf,
  60.                             UINT8 *pEntry,
  61.                             int nEntryLen);
  62.     void        GetId3EntryAndAdvance(UINT8*  pStr,
  63.                                       UINT32  ulLen,
  64.                                       UINT8*& rpBuf,
  65.                                       UINT32& rulSize);
  66.     
  67.     void        GetId3v2Values(UINT8 *pBuf,
  68.                                UINT32 ulSize,
  69.                                int nVersion);
  70.     void        GetId3v2_3Entry(UINT8 *pBuf,
  71.                                 UINT8 *pEntry,
  72.                                 UINT32 &count);
  73.     void        GetId3v2_2Entry(UINT8 *pBuf,
  74.                                 UINT8 *pEntry,
  75.                                 UINT32 &count);
  76.     void        GetId3v2_XEntry(UINT8* pBuf, UINT8* pEntry, UINT32& count,
  77.                                 INT32 a, INT32 b, INT32 c);
  78.     UINT8*      GetId3Title(int &nLen);
  79.     UINT8*      GetId3Artist(int &nLen);
  80.     UINT8*      GetId3Album(int &nLen);
  81.     UINT8*      GetId3Genre(int &nLen);
  82.     UINT8*      GetId3String(UINT8* pStr, int& nLen);
  83.     void        PrepareString(UINT8*& rpStr);
  84.     int         GetMetaOffset() {return m_nMetaOffset;}
  85.     int         GetMetaRepeat() {return m_nMetaRepeat;}
  86.     
  87.     void        SetGenreInfo(INT32 ID3v1genre,
  88.                              char *pGenre);
  89.     eHeaderType GetHeaderType();
  90. protected:
  91.     // Offsets to m_aId3Values
  92.     enum
  93.     {
  94.         eTitleLen   = 30,
  95.         eArtistLen  = 30,
  96.         eAlbumLen   = 30,
  97.         eYearLen    = 4,
  98.         eCommentLen = 30,
  99.         eGenreLen   = 1
  100.     };
  101.     CAudioInfoBase* m_pFmt;
  102.     UINT8       *m_pTitle,
  103.                 *m_pArtist,
  104.                 *m_pAlbum,
  105.                 *m_pYear,
  106.                 *m_pGenre;
  107.     INT32       m_nMetaRepeat,
  108.                 m_nMetaOffset;
  109.     
  110.     eHeaderType m_eHeaderType;  // Type of mp3 header in stream
  111.     UINT32 GetTagLength(UINT8* pBuf, UINT32 ulLen);
  112. };
  113. #define MP3_TAG_ID3  0x00494433  // 'I' 'D' '3'
  114. #define MP3_TAG_TAG  0x00544147  // 'T' 'A' 'G'
  115. #define MP3_TAG_ICY  0x00494359  // 'I' 'C' 'Y'
  116. #define MP3_TAG_jpg  0x006A7067  // 'j' 'p' 'g'
  117. #define MP3_TAG_bmp  0x00626D70  // 'b' 'm' 'p'
  118. #define MP3_TAG_TT2  0x54543200  // 'T' 'T' '2'
  119. #define MP3_TAG_TP1  0x54503100  // 'T' 'P' '1'
  120. #define MP3_TAG_TAL  0x54414C00  // 'T' 'A' 'L'
  121. #define MP3_TAG_TYE  0x54594500  // 'T' 'Y' 'E'
  122. #define MP3_TAG_TCO  0x54434F00  // 'T' 'C' 'O'
  123. #define MP3_TAG_TIT2 0x54495432  // 'T' 'I' 'T' '2'
  124. #define MP3_TAG_TPE1 0x54504531  // 'T' 'P' 'E' '1'
  125. #define MP3_TAG_TALB 0x54414C42  // 'T' 'A' 'L' 'B'
  126. #define MP3_TAG_TYER 0x54594552  // 'T' 'Y' 'E' 'R'
  127. #define MP3_TAG_TCON 0x54434F4E  // 'T' 'C' 'O' 'N'
  128. #endif