RTP Audio System
2.0.0
|
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