RTP Audio System  2.0.0
audioencoderrepository.h
Go to the documentation of this file.
00001 // ##########################################################################
00002 // ####                                                                  ####
00003 // ####                      RTP Audio Server Project                    ####
00004 // ####                    ============================                  ####
00005 // ####                                                                  ####
00006 // #### Audio Encoder Repository                                         ####
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: audioencoderrepository.h 1286 2011-12-18 13:43:16Z dreibh $
00032 
00033 
00034 #ifndef AUDIOENCODERREPOSITORY_H
00035 #define AUDIOENCODERREPOSITORY_H
00036 
00037 
00038 #include "tdsystem.h"
00039 #include "synchronizable.h"
00040 #include "encoderrepositoryinterface.h"
00041 #include "audioencoderinterface.h"
00042 
00043 #include <map>
00044 
00045 
00053 class AudioEncoderRepository : virtual public EncoderRepositoryInterface,
00054                                virtual public AudioEncoderInterface
00055 {
00056    // ====== Constructor/Destructor =========================================
00057    public:
00061    AudioEncoderRepository();
00062 
00066    ~AudioEncoderRepository();
00067 
00068 
00069    // ====== Repository functionality =======================================
00076    bool addEncoder(AudioEncoderInterface* encoder);
00077 
00083    void removeEncoder(AudioEncoderInterface* encoder);
00084 
00090    bool selectEncoderForTypeID(const card16 typeID);
00091 
00096    inline void setAutoDelete(const bool on);
00097 
00103    EncoderInterface* getCurrentEncoder() const;
00104 
00110    AudioEncoderInterface* getCurrentAudioEncoder() const;
00111 
00112 
00113    // ====== EncoderInterface implementation ================================
00119    const card16 getTypeID() const;
00120 
00126    const char* getTypeName() const;
00127 
00133    void activate();
00134 
00140    void deactivate();
00141 
00147    void reset();
00148 
00154    bool checkInterval(card64& time, bool& newRUList);
00155 
00161    bool prepareNextFrame(const cardinal headerSize,
00162                          const cardinal maxPacketSize,
00163                          const cardinal flags);
00164 
00170    cardinal getNextPacket(EncoderPacket* encoderPacket);
00171 
00172 
00173 
00174    // ====== AudioEncoderInterface implementation ===========================
00180    card16 getSamplingRate() const;
00181 
00187    card8 getBits() const;
00188 
00194    card8 getChannels() const;
00195 
00196 
00202    card16 getByteOrder() const;
00203 
00204 
00210    cardinal getBytesPerSecond() const;
00211 
00217    cardinal getBitsPerSample() const;
00218 
00219 
00225    card16 setSamplingRate(const card16 rate);
00226 
00232    card8 setBits(const card8 bits);
00233 
00239    card8 setChannels(const card8 channels);
00240 
00241 
00247    card16 setByteOrder(const card16 byteOrder);
00248 
00249 
00250    // ====== Settings ========================================================
00256    double getFrameRate() const;
00257 
00263    AbstractQoSDescription* getQoSDescription(
00264                               const cardinal pktHeaderSize,
00265                               const cardinal pktMaxSize,
00266                               const card64   offset);
00267 
00273    void updateQuality(const AbstractQoSDescription* aqd);
00274 
00275 
00276    // ====== Private data ===================================================
00277    private:
00278    std::multimap<const card16,AudioEncoderInterface*> Repository;
00279    AudioEncoderInterface*                             Encoder;
00280    bool                                               AutoDelete;
00281 };
00282 
00283 
00284 #include "audioencoderrepository.icc"
00285 
00286 
00287 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines