Source: audioencoderrepository.h


Annotated List
Files
Globals
Hierarchy
Index
// ##########################################################################
// ####                                                                  ####
// ####                      RTP Audio Server Project                    ####
// ####                    ============================                  ####
// ####                                                                  ####
// #### Audio Encoder Repository                                         ####
// ####                                                                  ####
// #### Version 1.00  --  February 04, 2001                              ####
// ####                                                                  ####
// #### Copyright (C) 1999  Thomas Dreibholz                             ####
// ####               2000  Universität Bonn, Abt. IV                    ####
// ####               2001  EMail: Dreibholz@bigfoot.com                 ####
// ####                     WWW:   http://www.bigfoot.com/~dreibholz     ####
// ####                                                                  ####
// ##########################################################################


#ifndef AUDIOENCODERREPOSITORY_H
#define AUDIOENCODERREPOSITORY_H


#include "system.h"
#include "synchronizable.h"
#include "encoderrepositoryinterface.h"
#include "audioencoderinterface.h"


#include <multimap.h>
#include <algo.h>


namespace Coral {


/**
  * This class is a repository for audio encoders.
  *
  * @short   Audio Encoder Repository
  * @author  Thomas Dreibholz (Dreibholz@bigfoot.com)
  * @version 1.0
  */
class AudioEncoderRepository : virtual public EncoderRepositoryInterface,
                               virtual public AudioEncoderInterface
{ 
   // ====== Constructor/Destructor =========================================
   public:
   /**
     * Constructor.
     */
   AudioEncoderRepository();
   
   /**
     * Destructor.
     */
   ~AudioEncoderRepository();
   
   
   // ====== Repository functionality =======================================
   /**
     * Add audio encoder to repository.
     *
     * @param encoder New audio encoder to be added.
     * @return true, if encoder has been added; false, if not.
     */
   bool addEncoder(AudioEncoderInterface* encoder);
   
   /**
     * Remove audio encoder from repository.
     *
     * @param encoder Audio encoder to be removed.
     */
   void removeEncoder(AudioEncoderInterface* encoder);
   
   /**
     * selectEncoderForTypeID() implementation of EncoderRepositoryInterface.
     *
     * @see EncoderRepositoryInterface#selectEncoderForTypeID
     */
   bool selectEncoderForTypeID(const card16 typeID);
   
   /**
     * Set AutoDelete mode. If true, all encoders will be deleted with delete
     * operator by the destructor.
     */
   inline void setAutoDelete(const bool on);
   
   /**
     * getCurrentEncoder() implementation of EncoderRepositoryInterface.
     *
     * @see EncoderRepositoryInterface#getCurrentEncoder
     */
   EncoderInterface* getCurrentEncoder() const;
   
   /**
     * Get AudioEncoderInterface of the current encoder.
     *
     * @return Current encoder's AudioEncoderInterface.
     */
   AudioEncoderInterface* getCurrentAudioEncoder() const;


   // ====== EncoderInterface implementation ================================
   /**
     * getTypeID() implementation of EncoderInterface.
     *
     * @see EncoderInterface#getTypeID
     */
   const card16 getTypeID() const;
   
   /**
     * getTypeName implementation of EncoderInterface.
     *
     * @see EncoderInterface#getTypeName
     */
   const char* getTypeName() const;
   
   /**
     * activate() implementation of EncoderInterface.
     *
     * @see EncoderInterface#activate
     */
   void activate();

   /**
     * deactivate() implementation of EncoderInterface.
     *
     * @see EncoderInterface#deactivate
     */
   void deactivate();

   /**
     * reset() implementation of EncoderInterface.
     *
     * @see EncoderInterface#reset
     */
   void reset();

   /**
     * prepareNextFrame() implementation of EncoderInterface.
     *
     * @see EncoderInterface#prepareNextFrame
     */
   bool prepareNextFrame(const cardinal headerSize,
                         const cardinal maxPacketSize,
                         const cardinal flags);
   
   /**
     * getNextPacket() implementation of EncoderInterface.
     *
     * @see EncoderInterface#getNextPacket
     */   
   cardinal getNextPacket(EncoderPacket* encoderPacket);

   /**
     * adaptQuality() implementation of EncoderInterface.
     *
     * @see EncoderInterface#adaptQuality
     */
   void adaptQuality(const double   fractionLost,
                     const cardinal layer);


   /**
     * getTransportInfo() implementation of EncoderInterface.
     *
     * @see EncoderInterface#getTransportInfo
     */
   void getTransportInfo(TransportInfo& transportInfo,
                         const cardinal headerSize,
                         const cardinal maxPacketSize,
                         const bool     calculateLevels) const;

   /**
     * setTransportInfo() implementation of EncoderInterface.
     *
     * @see EncoderInterface#setTransportInfo
     */
   void setTransportInfo(TransportInfo& transportInfo,
                         const cardinal headerSize,
                         const cardinal maxPacketSize,
                         const bool     calculateLevels);

   
   // ====== AudioEncoderInterface implementation ===========================
   /**
     * getSamplingRate() implementation of AudioEncoderInterface
     *
     * @see AudioEncoderInterface#getSamplingRate
     */
   card16 getSamplingRate() const;

   /**
     * getBits() implementation of AudioEncoderInterface
     *
     * @see AudioEncoderInterface#getBits
     */
   card8 getBits() const;

   /**
     * getChannels() implementation of AudioEncoderInterface
     *
     * @see AudioEncoderInterface#getChannels
     */
   card8 getChannels() const;


   /**
     * getByteOrder() Implementation of AudioEncoderInterface.
     *
     * @see AudioEncoderInterface#getByteOrder
     */
   card16 getByteOrder() const;
   

   /**
     * getBytesPerSecond() implementation of AudioEncoderInterface.
     *
     * @see AudioEncoderInterface#getBytesPerSecond
     */
   cardinal getBytesPerSecond() const;

   /**
     * getBitsPerSample() implementation of AudioEncoderInterface.
     *
     * @see AudioEncoderInterface#getBitsPerSample
     */
   cardinal getBitsPerSample() const;   


   /**
     * setSamplingRate() implementation of AudioEncoderInterface
     *
     * @see AudioEncoderInterface#setSamplingRate
     */
   card16 setSamplingRate(const card16 rate);

   /**
     * setBits() implementation of AudioEncoderInterface
     *
     * @see AudioEncoderInterface#setBits
     */
   card8 setBits(const card8 bits);

   /**
     * setChannels() implementation of AudioEncoderInterface
     *
     * @see AudioEncoderInterface#setChannels
     */
   card8 setChannels(const card8 channels);


   /**
     * setByteOrder() Implementation of AudioEncoderInterface.
     *
     * @see AudioEncoderInterface#setByteOrder
     */
   card16 setByteOrder(const card16 byteOrder);


   // ====== Private data ===================================================
   private:
   multimap<const card16,AudioEncoderInterface*> AudioEncoderRepository;
   AudioEncoderInterface*                        Encoder;
   bool                                          AutoDelete;
};


}


#include "audioencoderrepository.icc"


#endif

Generated by: viper@odin on Sun Feb 4 18:54:51 2001, using kdoc 2.0a22.