RTP Audio System  2.0.0
advancedaudioencoder.h
Go to the documentation of this file.
00001 // ##########################################################################
00002 // ####                                                                  ####
00003 // ####                      RTP Audio Server Project                    ####
00004 // ####                    ============================                  ####
00005 // ####                                                                  ####
00006 // #### Advanced Audio Encoder                                           ####
00007 // ####                                                                  ####
00008 // ####           Copyright (C) 1999-2012 by Thomas Dreibholz            ####
00009 // ####                                                                  ####
00010 // #### Contact:                                                         ####
00011 // ####    EMail: dreibh@iem.uni-due.de                                  ####
00012 // ####    WWW:   https://www.nntb.no/~dreibh/rtpaudio                ####
00013 // ####                                                                  ####
00014 // #### ---------------------------------------------------------------- ####
00015 // ####                                                                  ####
00016 // #### This program is free software: you can redistribute it and/or    ####
00017 // #### modify it under the terms of the GNU General Public License as   ####
00018 // #### published by the Free Software Foundation, either version 3 of   ####
00019 // #### the License, or (at your option) any later version.              ####
00020 // ####                                                                  ####
00021 // #### This program is distributed in the hope that it will be useful,  ####
00022 // #### but WITHOUT ANY WARRANTY; without even the implied warranty of   ####
00023 // #### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    ####
00024 // #### GNU General Public License for more details.                     ####
00025 // ####                                                                  ####
00026 // #### You should have received a copy of the GNU General Public        ####
00027 // #### License along with this program.  If not, see                    ####
00028 // #### <http://www.gnu.org/licenses/>.                                  ####
00029 // ####                                                                  ####
00030 // ##########################################################################
00031 // $Id: advancedaudioencoder.h 1286 2011-12-18 13:43:16Z dreibh $
00032 
00033 
00034 #ifndef ADVANCEDAUDIOENCODER_H
00035 #define ADVANCEDAUDIOENCDOER_H
00036 
00037 
00038 #include "tdsystem.h"
00039 #include "audioencoderinterface.h"
00040 #include "audioreaderinterface.h"
00041 #include "audioquality.h"
00042 
00043 
00053 class AdvancedAudioEncoder : public AudioEncoderInterface,
00054                              public AudioQuality
00055 {
00056    // ====== Constructor/Destructor =========================================
00057    public:
00063    AdvancedAudioEncoder(AudioReaderInterface* audioReader);
00064 
00068    ~AdvancedAudioEncoder();
00069 
00070 
00071    // ====== EncoderInterface implementation ================================
00077    const card16 getTypeID() const;
00078 
00084    const char* getTypeName() const;
00085 
00091    void activate();
00092 
00098    void deactivate();
00099 
00105    void reset();
00106 
00112    bool checkInterval(card64& time, bool& newRUList);
00113 
00119    bool prepareNextFrame(const cardinal headerSize,
00120                          const cardinal maxPacketSize,
00121                          const cardinal flags);
00122 
00128    cardinal getNextPacket(EncoderPacket* encoderPacket);
00129 
00130 
00131    // ====== Settings ========================================================
00137    double getFrameRate() const;
00138 
00144    AbstractQoSDescription* getQoSDescription(
00145                               const cardinal pktHeaderSize,
00146                               const cardinal pktMaxSize,
00147                               const card64   offset);
00148 
00154    void updateQuality(const AbstractQoSDescription* aqd);
00155 
00156 
00157    // ====== Private data ===================================================
00158    private:
00159    AudioReaderInterface* Source;
00160 
00161    card64       FramePosition;                       // Current frame
00162    card64       FrameMaxPosition;
00163    AudioQuality FrameQualitySetting;
00164    card8*       FrameBufferLL;
00165    card8*       FrameBufferRL;
00166    card8*       FrameBufferLU;
00167    card8*       FrameBufferRU;
00168    cardinal     FrameBufferPosLL;
00169    cardinal     FrameBufferPosRL;
00170    cardinal     FrameBufferPosLU;
00171    cardinal     FrameBufferPosRU;
00172    cardinal     FrameFragmentLL;
00173    cardinal     FrameFragmentRL;
00174    cardinal     FrameFragmentLU;
00175    cardinal     FrameFragmentRU;
00176    cardinal     FrameBufferSizeLL;
00177    cardinal     FrameBufferSizeRL;
00178    cardinal     FrameBufferSizeLU;
00179    cardinal     FrameBufferSizeRU;
00180    cardinal     FrameLayerLL;
00181    cardinal     FrameLayerRL;
00182    cardinal     FrameLayerLU;
00183    cardinal     FrameLayerRU;
00184 
00185    integer      MediaInfoCounter;
00186 
00187    card64       TotalByteRateLimit;
00188    card64       ByteRateLimitL1;
00189    card64       ByteRateLimitL2;
00190    card64       ByteRateLimitL3;
00191    cardinal     NetworkQualityDecrement;
00192    cardinal     SendError;
00193    cardinal     SentError;
00194    card8        ErrorCode;
00195 };
00196 
00197 
00198 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines