Ap4RtpHint.h

Go to the documentation of this file.
00001 /*****************************************************************
00002 |
00003 |    AP4 - RTP Hint Objects
00004 |
00005 |    Copyright 2002-2005 Gilles Boccon-Gibod & Julien Boeuf
00006 |
00007 |
00008 |    This file is part of Bento4/AP4 (MP4 Atom Processing Library).
00009 |
00010 |    Unless you have obtained Bento4 under a difference license,
00011 |    this version of Bento4 is Bento4|GPL.
00012 |    Bento4|GPL is free software; you can redistribute it and/or modify
00013 |    it under the terms of the GNU General Public License as published by
00014 |    the Free Software Foundation; either version 2, or (at your option)
00015 |    any later version.
00016 |
00017 |    Bento4|GPL is distributed in the hope that it will be useful,
00018 |    but WITHOUT ANY WARRANTY; without even the implied warranty of
00019 |    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00020 |    GNU General Public License for more details.
00021 |
00022 |    You should have received a copy of the GNU General Public License
00023 |    along with Bento4|GPL; see the file COPYING.  If not, write to the
00024 |    Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
00025 |    02111-1307, USA.
00026 |
00027  ****************************************************************/
00028 
00029 #ifndef _AP4_RTP_HINT_H_
00030 #define _AP4_RTP_HINT_H_
00031 
00032 /*----------------------------------------------------------------------
00033 |   includes
00034 +---------------------------------------------------------------------*/
00035 #include "Ap4Types.h"
00036 #include "Ap4List.h"
00037 #include "Ap4DataBuffer.h"
00038 #include "Ap4Interfaces.h"
00039 
00040 /*----------------------------------------------------------------------
00041 |   forward declarations
00042 +---------------------------------------------------------------------*/
00043 class AP4_ByteStream;
00044 class AP4_RtpConstructor;
00045 class AP4_RtpPacket;
00046 
00047 /*----------------------------------------------------------------------
00048 |   AP4_RtpSampleData
00049 +---------------------------------------------------------------------*/
00050 class AP4_RtpSampleData
00051 {
00052 public:
00053     // constructors and destructor
00054     AP4_RtpSampleData(AP4_ByteStream& stream, AP4_UI32 size);
00055     AP4_RtpSampleData() {}
00056     virtual ~AP4_RtpSampleData();
00057 
00058     // methods
00059     virtual AP4_Result          AddPacket(AP4_RtpPacket* packet);
00060     virtual AP4_Size            GetSize();
00061     virtual AP4_ByteStream*     ToByteStream();
00062     
00063     // accessors
00064     AP4_List<AP4_RtpPacket>& GetPackets() {
00065         return m_Packets;
00066     }
00067     const AP4_DataBuffer& GetExtraData() const {
00068         return m_ExtraData;
00069     }
00070 
00071 protected:
00072     // members
00073     AP4_List<AP4_RtpPacket>     m_Packets;
00074     AP4_DataBuffer              m_ExtraData;
00075 };
00076 
00077 /*----------------------------------------------------------------------
00078 |   AP4_RtpPacket
00079 +---------------------------------------------------------------------*/
00080 class AP4_RtpPacket : public AP4_Referenceable
00081 {
00082 public:
00083     // constructor and destructor
00084     AP4_RtpPacket(AP4_ByteStream& stream);
00085     AP4_RtpPacket(int  relative_time,
00086                   bool p_bit,
00087                   bool x_bit,
00088                   bool m_bit,
00089                   AP4_UI08 payload_type,
00090                   AP4_UI16 sequence_seed,
00091                   int  time_stamp_offset = 0,
00092                   bool bframe_flag = false,
00093                   bool repeat_flag = false);
00094     ~AP4_RtpPacket();
00095 
00096     // methods
00097     AP4_Result Write(AP4_ByteStream& stream);
00098     AP4_Result AddConstructor(AP4_RtpConstructor* constructor);
00099     AP4_Size GetSize();
00100     AP4_Size GetConstructedDataSize();
00101 
00102     // Referenceable methods
00103     void AddReference();
00104     void Release();
00105     
00106     // Accessors
00107     int GetRelativeTime() const { return m_RelativeTime; }
00108     bool GetPBit() const { return m_PBit; }
00109     bool GetXBit() const { return m_XBit; }
00110     bool GetMBit() const { return m_MBit; }
00111     AP4_UI08 GetPayloadType() const { return m_PayloadType; }
00112     AP4_UI16 GetSequenceSeed() const { return m_SequenceSeed; }
00113     int  GetTimeStampOffset() const { return m_TimeStampOffset; }
00114     bool GetBFrameFlag() const { return m_BFrameFlag; }
00115     bool GetRepeatFlag() const { return m_RepeatFlag; }
00116     AP4_List<AP4_RtpConstructor>& GetConstructors() {
00117         return m_Constructors;
00118     }
00119 
00120 private:
00121     // members
00122     AP4_Cardinal                    m_ReferenceCount;                        
00123     int                             m_RelativeTime;
00124     bool                            m_PBit;
00125     bool                            m_XBit;
00126     bool                            m_MBit;
00127     AP4_UI08                        m_PayloadType;
00128     AP4_UI16                        m_SequenceSeed;
00129     int                             m_TimeStampOffset;
00130     bool                            m_BFrameFlag;
00131     bool                            m_RepeatFlag;
00132     AP4_List<AP4_RtpConstructor>    m_Constructors;
00133 };
00134 
00135 /*----------------------------------------------------------------------
00136 |   AP4_RtpContructor
00137 +---------------------------------------------------------------------*/
00138 class AP4_RtpConstructor : public AP4_Referenceable
00139 {
00140 public:
00141     // types
00142     typedef AP4_UI08 Type;
00143 
00144     // constructor & destructor
00145     AP4_RtpConstructor(Type type) : m_ReferenceCount(1), m_Type(type) {}
00146 
00147     // methods
00148     Type GetType() const { return m_Type; }
00149     AP4_Result Write(AP4_ByteStream& stream);
00150     virtual AP4_Size GetConstructedDataSize() = 0;
00151 
00152     // Referenceable methods
00153     void AddReference();
00154     void Release();
00155 
00156 protected:
00157     // methods
00158     virtual ~AP4_RtpConstructor() {}
00159     virtual AP4_Result DoWrite(AP4_ByteStream& stream) = 0;
00160 
00161     // members
00162     AP4_Cardinal m_ReferenceCount;
00163     Type         m_Type;
00164 };
00165 
00166 /*----------------------------------------------------------------------
00167 |   constructor size
00168 +---------------------------------------------------------------------*/
00169 const AP4_Size AP4_RTP_CONSTRUCTOR_SIZE = 16;
00170 
00171 /*----------------------------------------------------------------------
00172 |   constructor types
00173 +---------------------------------------------------------------------*/
00174 const AP4_RtpConstructor::Type AP4_RTP_CONSTRUCTOR_TYPE_NOOP        = 0;
00175 const AP4_RtpConstructor::Type AP4_RTP_CONSTRUCTOR_TYPE_IMMEDIATE   = 1;
00176 const AP4_RtpConstructor::Type AP4_RTP_CONSTRUCTOR_TYPE_SAMPLE      = 2;
00177 const AP4_RtpConstructor::Type AP4_RTP_CONSTRUCTOR_TYPE_SAMPLE_DESC = 3;
00178 
00179 /*----------------------------------------------------------------------
00180 |   AP4_NoopRtpConstructor
00181 +---------------------------------------------------------------------*/
00182 class AP4_NoopRtpConstructor : public AP4_RtpConstructor
00183 {
00184 public:
00185     // constructor
00186     AP4_NoopRtpConstructor(AP4_ByteStream& stream);
00187     AP4_NoopRtpConstructor() : AP4_RtpConstructor(AP4_RTP_CONSTRUCTOR_TYPE_NOOP) {}
00188 
00189     // methods
00190     virtual AP4_Size GetConstructedDataSize() { return 0; }
00191 
00192 protected:
00193     // methods
00194     virtual AP4_Result DoWrite(AP4_ByteStream& stream);
00195 };
00196 
00197 /*----------------------------------------------------------------------
00198 |   AP4_ImmediateRtpConstructor
00199 +---------------------------------------------------------------------*/
00200 class AP4_ImmediateRtpConstructor : public AP4_RtpConstructor
00201 {
00202 public:
00203     // constructor
00204     AP4_ImmediateRtpConstructor(AP4_ByteStream& stream);
00205     AP4_ImmediateRtpConstructor(const AP4_DataBuffer& data);
00206     
00207     // accessors
00208     const AP4_DataBuffer& GetData() const { return m_Data; }
00209 
00210     // methods
00211     virtual AP4_Size GetConstructedDataSize() { return m_Data.GetDataSize(); }
00212 
00213 protected:
00214     // methods
00215     virtual AP4_Result DoWrite(AP4_ByteStream& stream);
00216 
00217     // members
00218     AP4_DataBuffer m_Data;
00219 };
00220 
00221 /*----------------------------------------------------------------------
00222 |   AP4_SampleRtpConstructor
00223 +---------------------------------------------------------------------*/
00224 class AP4_SampleRtpConstructor : public AP4_RtpConstructor
00225 {
00226 public:
00227     // constructor
00228     AP4_SampleRtpConstructor(AP4_ByteStream& stream);
00229     AP4_SampleRtpConstructor(AP4_UI08 track_ref_index,
00230                              AP4_UI16 length,
00231                              AP4_UI32 sample_num,
00232                              AP4_UI32 sample_offset);
00233     
00234     // accessors
00235     AP4_UI08 GetTrackRefIndex() const { return m_TrackRefIndex; }
00236     AP4_UI16 GetLength() const { return m_Length; }
00237     AP4_UI32 GetSampleNum() const { return m_SampleNum; }
00238     AP4_UI32 GetSampleOffset() const { return m_SampleOffset; }
00239 
00240     // methods
00241     virtual AP4_Size GetConstructedDataSize() { return m_Length; }
00242 
00243 protected:
00244     // methods
00245     virtual AP4_Result DoWrite(AP4_ByteStream& stream);
00246 
00247     // members
00248     AP4_UI08    m_TrackRefIndex;
00249     AP4_UI16    m_Length;
00250     AP4_UI32    m_SampleNum;
00251     AP4_UI32    m_SampleOffset;
00252 };
00253 
00254 /*----------------------------------------------------------------------
00255 |   AP4_SampleDescRtpConstructor
00256 +---------------------------------------------------------------------*/
00257 class AP4_SampleDescRtpConstructor : public AP4_RtpConstructor
00258 {
00259 public:
00260     // constructor
00261     AP4_SampleDescRtpConstructor(AP4_ByteStream& stream);
00262     AP4_SampleDescRtpConstructor(AP4_UI08 track_ref_index,
00263                                  AP4_UI16 length,
00264                                  AP4_UI32 sample_desc_index,
00265                                  AP4_UI32 sample_desc_offset);
00266 
00267     // accessors
00268     AP4_UI08 GetTrackRefIndex() const { return m_TrackRefIndex; }
00269     AP4_UI16 GetLength() const { return m_Length; }
00270     AP4_UI32 GetSampleDescIndex() const { return m_SampleDescIndex; }
00271     AP4_UI32 GetSampleDescOffset() const { return m_SampleDescOffset; }
00272 
00273     // methods
00274     virtual AP4_Size GetConstructedDataSize() { return m_Length; }
00275         
00276 protected:
00277     // methods
00278     virtual AP4_Result DoWrite(AP4_ByteStream& stream);
00279 
00280     // members
00281     AP4_UI08    m_TrackRefIndex;
00282     AP4_UI16    m_Length;
00283     AP4_UI32    m_SampleDescIndex;
00284     AP4_UI32    m_SampleDescOffset;
00285 };
00286 
00287 /*----------------------------------------------------------------------
00288 |   AP4_RtpConstructorFactory
00289 +---------------------------------------------------------------------*/
00290 class AP4_RtpConstructorFactory 
00291 {
00292 public:
00293     static AP4_Result CreateConstructorFromStream(AP4_ByteStream& stream,
00294                                                   AP4_RtpConstructor*& constructor);
00295 };
00296 
00297 #endif // _AP4_RTP_HINT_H_

Generated on Thu Mar 15 16:06:11 2007 for Bento4 MP4 SDK by  doxygen 1.5.1-p1