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

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 _MPAPKTPARSE_H_
  36. #define _MPAPKTPARSE_H_
  37. class CHXTimestampConverter;
  38. /*
  39.  * CMpaPacketParser: Basic, unformatted MPEG Audio streams
  40.  */
  41. class CMpaPacketParser : public CPacketParser
  42. {
  43. public:
  44.     CMpaPacketParser();
  45.     virtual ~CMpaPacketParser();
  46.     /*
  47.      *  CPacketParser methods
  48.      */
  49.     HX_RESULT   AddPacket       (IHXPacket* pPacket, INT32 streamOffsetTime);
  50.     HX_RESULT   RenderAll       (void);
  51.     void        RestartStream   (void);
  52. protected:
  53.     virtual inline BOOL ParseHeaders(UCHAR*& pBuffer, UINT32& ulSize)
  54.     {
  55.         return TRUE;
  56.     }
  57.     virtual void    HandlePacketLoss() {};
  58.     IHXPacket*     m_pPacket;
  59.     BOOL            m_bPacketLoss;
  60.     INT32           m_lStreamOffsetTime;    
  61. };
  62. /*
  63.  * C2250PacketParser: RFC 2250 streams (audio or system)
  64.  */
  65. class C2250PacketParser : public CMpaPacketParser
  66. {
  67. public:
  68.     C2250PacketParser() : CMpaPacketParser() {m_pTsConvert=NULL;}
  69.     virtual ~C2250PacketParser();
  70.     void    PostSeek(UINT32 time);
  71. protected:
  72.     BOOL ParseHeaders(UCHAR*& pBuffer, UINT32& ulSize);
  73.     void HandlePacketLoss();
  74.     CHXTimestampConverter* m_pTsConvert;
  75. };
  76. #ifdef DEMUXER
  77. /*
  78.  * CSysPacketParser: System streams
  79.  */
  80. class CSysPacketParser : public CMpaPacketParser
  81. {
  82. public:
  83.     CSysPacketParser(BOOL bMPEG2, IHXRegistry* pRegistry);
  84.     virtual ~CSysPacketParser() {}
  85.     inline void PostSeek(UINT32 timeAfterSeek)
  86.     {        
  87.         CMpaPacketParser::PostSeek(timeAfterSeek);
  88.         m_ulPlayTime = timeAfterSeek;
  89.         m_llLastPts = 0;
  90.     }
  91. protected:
  92.     virtual inline BOOL ParseHeaders(UCHAR*& pBuffer, UINT32& ulSize)
  93.     {
  94.         return Demux(pBuffer, ulSize, m_ulDecBufBytes);
  95.     }
  96.     BOOL    Demux(UCHAR*& pBuffer, UINT32& ulSize, UINT32 ulFragSize);
  97.     CDemuxer*    m_pDemuxer;
  98.     IHXRegistry* m_pRegistry;
  99.     INT64           m_llLastPts;
  100.     INT64           m_llFirstPts;
  101.     UINT32          m_ulPlayTime; 
  102.     BOOL            m_bCheckVcdBug;     // Check once for vcd pts bug
  103.     BOOL            m_bVcdBug;          // Encoded pts refer to first
  104.                                         // byte in packet.
  105. };
  106. class C2250SysPacketParser : public C2250PacketParser, 
  107.                              public CSysPacketParser
  108. {
  109. public:
  110.     C2250SysPacketParser(BOOL bMPEG2, IHXRegistry* pRegistry) : 
  111.         CSysPacketParser(bMPEG2, pRegistry), C2250PacketParser() {}
  112.       
  113.     ~C2250SysPacketParser() {}
  114. protected:
  115.     virtual inline BOOL ParseHeaders(UCHAR*& pBuffer, UINT32& ulSize)
  116.     {
  117.         return C2250PacketParser::ParseHeaders(pBuffer, ulSize) ?
  118.             CSysPacketParser::ParseHeaders(pBuffer, ulSize) : 
  119.             FALSE;
  120.     }
  121. };
  122. #endif // DEMUXER
  123. #endif //_MPAPKTPARSE_H_