RTP Audio System  2.0.0
audiodecoderrepository.h
Go to the documentation of this file.
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines