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

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 _QTTRKMGR_H_
  36. #define _QTTRKMGR_H_
  37. /****************************************************************************
  38.  *  Includes
  39.  */
  40. #include "qtatoms.h"
  41. class CQTFileFormat;
  42. class CQTPacketAssembler;
  43. class CQTTrack;
  44. class CQTPacketizerFactory;
  45. /****************************************************************************
  46.  *  Globals
  47.  */
  48. typedef enum
  49. {
  50.     QT_FTYPE_UNKNOWN,
  51.     QT_FTYPE_QT,
  52.     QT_FTYPE_MP4,
  53.     QT_FTYPE_EMC
  54. } QT_FTYPE;
  55. typedef enum
  56. {
  57.     QT_ETYPE_UNKNOWN,
  58.     QT_ETYPE_SERVER,
  59.     QT_ETYPE_CLIENT
  60. } QT_ETYPE;
  61. /****************************************************************************
  62.  * 
  63.  *  Class:
  64.  * CTrackManager
  65.  *
  66.  *  Purpose:
  67.  * Provides mapping of tracks to streams and maintains
  68.  *  collective information about the tracks including the
  69.  * tracks themselves.
  70.  */
  71. class CQTTrackManager
  72. {
  73. public:
  74.     /*
  75.      * Constructor/Destructor
  76.      */
  77.     CQTTrackManager(void);
  78.     ~CQTTrackManager();
  79.     /*
  80.      * Main Interface
  81.      */
  82.     HX_RESULT ManageTracks(CQTAtom *pRootAtom);
  83.     HX_RESULT ReadyTracks(BOOL bIgnoreHintTracks = FALSE,
  84.   BOOL bFallbackToTracks = FALSE);
  85.     HX_RESULT InitTracks(CQTFileFormat *pFileFormat,
  86.  CQTPacketAssembler *pPacketAssembler,
  87.  CQTPacketizerFactory* pPacketizerFactory,
  88.  const char* pProtocol = NULL);
  89.     HX_RESULT AddStreamToGroup(UINT16 uStreamNumber,
  90.        UINT16 uGroup, 
  91.        ULONG32 ulBitrate);
  92.     HX_RESULT SubscribeDefault(void);
  93.     HX_RESULT Subscribe(UINT16 uStreamNum);
  94.     HX_RESULT Unsubscribe(UINT16 uStreamNum);
  95.     HX_RESULT RemoveInactiveStreams(BOOL bLeaveReferences = FALSE);
  96.     void CloseTracks(void);
  97.     void ResetTracks(void);
  98.     UINT16  GetNumStreams(void)    { return m_uNumStreams; }
  99.     UINT16  GetNumTracks(void)     { return m_uNumTracks; }
  100.     UINT16  GetNumActiveStreams(void);
  101.     
  102.     CQTTrack* GetTrack(UINT16 uTrackIndex)
  103.     {
  104. return m_pTrackTable[uTrackIndex].m_pTrack;
  105.     }
  106.     CQTTrack* GetStreamTrack(UINT16 uStreamNumber)
  107.     {
  108. return m_pStreamToTrackMap[uStreamNumber].m_pQTTrack;
  109.     }
  110.     CQTTrack* GetTrackById(ULONG32 ulTrackID);
  111.     CQTAtom* GetTrackAtomById(ULONG32 ulTrackID);
  112.     BOOL IsStreamTrack(CQTTrack* pTrack);
  113.     BOOL IsStreamTrackActive(UINT16 uStreamNumber)
  114.     {
  115. return m_pStreamToTrackMap[uStreamNumber].m_bActive;
  116.     }
  117.     QT_FTYPE GetFType(void) { return m_FType; }
  118.     QT_ETYPE GetEType(void) { return m_EType; }
  119.     void SetEType(QT_ETYPE eEType)  { m_EType = eEType; }
  120.     BOOL IsHintsEnabled(void) { return m_bHintTracksActive; }
  121.     BOOL IsHinted(void) { return m_bHinted; }
  122.     static CQT_hdlr_Atom* GetTrackAtomHdlr(CQT_trak_Atom* pTrakAtom);
  123.     static CQT_stbl_Atom* GetTrackAtomStbl(CQT_trak_Atom* pTrakAtom);
  124.     static BOOL IsHintTrackAtom(CQT_trak_Atom* pTrakAtom);
  125.     static BOOL IsNonEmptyTrackAtom(CQT_trak_Atom* pTrakAtom);
  126.     
  127. private:
  128.     class CQTTrackTable
  129.     {
  130.     public:
  131. CQTTrackTable(void)
  132.     : m_uRefCount(0)
  133.     , m_pTrack(NULL)
  134.     , m_pTrackAtom(NULL)
  135. {
  136.     ;
  137. }
  138. ~CQTTrackTable();
  139. CQTTrack* m_pTrack;
  140. CQTAtom* m_pTrackAtom;
  141. UINT16 m_uRefCount;
  142.     };
  143.     class CQTStream
  144.     {
  145.     public:
  146. CQTStream(void)
  147.     : m_pQTTrack(NULL)
  148.     , m_bActive(FALSE)
  149.     , m_bGroupped(FALSE)
  150.     , m_uGroup(0)
  151.     , m_ulBitrate(0)
  152. {
  153.     ;
  154. }
  155. CQTTrack* m_pQTTrack;
  156. BOOL m_bActive;
  157. BOOL m_bGroupped;
  158. UINT16 m_uGroup;
  159. ULONG32 m_ulBitrate;
  160.     };
  161.     void DecideHintTrackActivation(BOOL bFallbackToTracks);
  162.     HX_RESULT CreateHintTrack(CQTAtom* pTrackAtom, 
  163.       UINT16 uTrackIdx,
  164.       UINT16& uStreamTrackCount);
  165.     void ReleaseTrack(CQTTrack* pQTTrack);
  166.     void AddTracks(CQTAtom* pRootAtom);
  167.     void DeleteTrackAtomList(void);
  168.     void Clear(void);    
  169.     UINT16 GetTrackStreamNum(CQTTrack* pTrack);
  170.     UINT16 m_uNumTracks;
  171.     UINT16 m_uNumStreams;
  172.     BOOL m_bHinted;
  173.     BOOL m_bHintTracksActive;
  174.     QT_FTYPE m_FType;
  175.     QT_ETYPE m_EType;
  176.     BOOL m_bSubscriptionWindowClosed;
  177.     CQTTrackTable* m_pTrackTable;
  178.     CQTStream* m_pStreamToTrackMap;
  179.     CHXSimpleList* m_pTrackAtomList;
  180.     CHXSimpleList* m_pHintTrackIdxList;
  181.     CQT_iods_Atom* m_pIodsAtom;
  182.     CQT_ftyp_Atom* m_pFtypAtom;
  183. };
  184. #endif  // _QTTRKMGR_H_