amr-depack.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.  
  36. #ifndef AMR_DEPACK_H
  37. #define AMR_DEPACK_H
  38. #include "hxtypes.h"
  39. #include "amr_flavor.h"
  40. #include "amr_frame_info.h"
  41. #include "amr_block_buf.h"
  42. class Bitstream;
  43. class AMRTOCInfo;
  44. typedef void (*OnFrameCB)(void* pUserData, 
  45.   ULONG32 ulTime,
  46.   const UINT8* pData, ULONG32 ulSize,
  47.   BOOL bPreviousLoss);
  48. class AMRDepack
  49. {
  50. public:
  51.     AMRDepack();
  52.     ~AMRDepack();
  53.     BOOL Init(AMRFlavor flavor,
  54.       BOOL    bOctetAlign,
  55.       ULONG32 ulModeSet,
  56.       ULONG32 ulChangePeriod,
  57.       BOOL    bChangeNeighbor,
  58.       ULONG32 ulMaxPtime,
  59.       BOOL    bHasCRC,
  60.       BOOL    bRobustSort,
  61.       ULONG32 ulMaxInterleave,
  62.       ULONG32 ulPtime,
  63.       ULONG32 ulChannels,
  64.       OnFrameCB pFrameCB,
  65.       void* pUserData);
  66.     BOOL Reset(); // Completely reset the depacketizer state
  67.     BOOL Flush(); // Indicates end of stream
  68.     BOOL OnPacket(ULONG32 ulTime, 
  69.   const UINT8* pData, ULONG32 ulSize, 
  70.   BOOL bMarker);
  71.     BOOL OnLoss(ULONG32 ulNumPackets); // called to indicate lost packets
  72.     void SetTSSampleRate(ULONG32 ulTSSampleRate);
  73. protected:
  74.     BOOL UpdateIleavInfo(ULONG32 ulILL, ULONG32 ulILP, ULONG32 ulTime);
  75.     void GetTOCInfo(Bitstream& bs, AMRTOCInfo& tocInfo);
  76.     void SkipCRCInfo(Bitstream& bs, const AMRTOCInfo& tocInfo);
  77.     void UpdateBlockCount(ULONG32 ulBlockCount);
  78.     // Copies linear frame data to m_blockBuf
  79.     void LinearCopy(Bitstream& bs, ULONG32 ulStartBlock, ULONG32 ulBlockInc,
  80.     const AMRTOCInfo& tocInfo);
  81.     ULONG32 GetFrameBlock(Bitstream& bs,
  82.   UINT8* pStart, 
  83.   const AMRTOCInfo& tocInfo,
  84.   ULONG32 ulStartEntry,
  85.   ULONG32 ulChannels);
  86.     // Copies robust sorted frame data to m_blockBuf
  87.     void SortedCopy(Bitstream& bs, ULONG32 ulStartBlock, ULONG32 ulBlockInc,
  88.     const AMRTOCInfo& tocInfo);
  89.     void DispatchBlocks(ULONG32 ulTimestamp);
  90.     void DispatchFrameBlock(ULONG32 ulTimestamp,
  91.     const UINT8* pFrame, ULONG32 ulFrameSize);
  92.     
  93.     ULONG32 GetFrameBits(UINT32 frameType) const;
  94.     ULONG32 GetMaxFrameBits() const;
  95. private:
  96.     AMRFlavor m_flavor;
  97.     ULONG32   m_ulTimestampInc;
  98.     BOOL      m_bOctetAlign;
  99.     ULONG32   m_ulModeSet;
  100.     BOOL      m_bHasCRC;
  101.     BOOL      m_bRobustSort;
  102.     ULONG32   m_ulMaxInterleave;
  103.     ULONG32   m_ulPtime;
  104.     ULONG32   m_ulChannels;
  105.     void*     m_pUserData;
  106.     OnFrameCB m_pCallback;
  107.     BOOL      m_bPacketsLost;
  108.     BOOL      m_bLastTimeValid;
  109.     ULONG32   m_ulLastTimestamp;
  110.     ULONG32   m_ulIleavIndex;
  111.     ULONG32   m_ulIleavLength;
  112.     ULONG32   m_ulIleavBlockCount;
  113.     ULONG32   m_ulIleavBaseTime;
  114.     AMRBlockBuffer m_blockBuf;
  115. };
  116. inline
  117. ULONG32 AMRDepack::GetFrameBits(UINT32 frameType) const
  118. {
  119.     return CAMRFrameInfo::FrameBits(m_flavor, frameType);
  120. }
  121. inline
  122. ULONG32 AMRDepack::GetMaxFrameBits() const
  123. {
  124.     return CAMRFrameInfo::MaxFrameBits(m_flavor);
  125. }
  126. #endif // AMR_DEPACK_H