RTP Audio System
2.0.0
|
00001 // ########################################################################## 00002 // #### #### 00003 // #### RTP Audio Server Project #### 00004 // #### ============================ #### 00005 // #### #### 00006 // #### Audio Decoder 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: audiodecoderrepository.h 1286 2011-12-18 13:43:16Z dreibh $ 00032 00033 00034 #ifndef AUDIODECODERREPOSITORY_H 00035 #define AUDIODECODERREPOSITORY_H 00036 00037 00038 #include "tdsystem.h" 00039 #include "audiodecoderinterface.h" 00040 #include "decoderrepositoryinterface.h" 00041 #include "audioquality.h" 00042 00043 00044 #include <map> 00045 00046 00054 class AudioDecoderRepository : virtual public DecoderRepositoryInterface, 00055 virtual public AudioDecoderInterface 00056 { 00057 public: 00058 // ====== Constructor/Destructor ========================================= 00062 AudioDecoderRepository(); 00063 00067 ~AudioDecoderRepository(); 00068 00069 00070 // ====== Repository functionality ======================================= 00077 bool addDecoder(AudioDecoderInterface* decoder); 00078 00084 void removeDecoder(AudioDecoderInterface* decoder); 00085 00091 bool selectDecoderForTypeID(const card16 typeID); 00092 00097 inline void setAutoDelete(const bool on); 00098 00104 DecoderInterface* getCurrentDecoder() const; 00105 00111 AudioDecoderInterface* getCurrentAudioDecoder() const; 00112 00113 00114 // ====== DecoderInterface implementation ================================ 00120 const card16 getTypeID() const; 00121 00127 const char* getTypeName() const; 00128 00134 void activate(); 00135 00141 void deactivate(); 00142 00148 void reset(); 00149 00155 void getMediaInfo(MediaInfo& mediaInfo) const; 00156 00162 card8 getErrorCode() const; 00163 00169 card64 getPosition() const; 00170 00176 card64 getMaxPosition() const; 00177 00183 bool checkNextPacket(DecoderPacket* decoderPacket); 00184 00190 void handleNextPacket(const DecoderPacket* decoderPacket); 00191 00192 00193 // ====== AudioDecoderInterface implementation =========================== 00199 card8 getChannels() const; 00200 00206 card8 getBits() const; 00207 00213 card16 getSamplingRate() const; 00214 00215 00221 card16 getByteOrder() const; 00222 00223 00229 cardinal getBytesPerSecond() const; 00230 00236 cardinal getBitsPerSample() const; 00237 00243 AudioQuality getWantedQuality() const; 00244 00250 void setWantedQuality(const AudioQualityInterface& wantedQuality); 00251 00252 00253 // ====== Private data =================================================== 00254 private: 00255 std::multimap<const card16,AudioDecoderInterface*> Repository; 00256 AudioDecoderInterface* Decoder; 00257 bool AutoDelete; 00258 }; 00259 00260 00261 #include "audiodecoderrepository.icc" 00262 00263 00264 #endif