diff --git a/darkice/trunk/src/AudioEncoder.h b/darkice/trunk/src/AudioEncoder.h index 1932dd6..7e5793b 100644 --- a/darkice/trunk/src/AudioEncoder.h +++ b/darkice/trunk/src/AudioEncoder.h @@ -80,10 +80,15 @@ class AudioEncoder : public Sink, public virtual Referable bool inBigEndian; /** - * Bit rate of the output. (bits/sec) + * Bit rate of the output in kbits/sec, for fixed bitrate encodings. */ unsigned int outBitrate; + /** + * Quality of the output, for variable bitrate encodings. + */ + double outQuality; + /** * Sample rate of the output. */ @@ -112,6 +117,7 @@ class AudioEncoder : public Sink, public virtual Referable unsigned int inChannel, bool inBigEndian, unsigned int outBitrate, + float outQuality, unsigned int outSampleRate, unsigned int outChannel ) throw ( Exception ) { @@ -120,6 +126,7 @@ class AudioEncoder : public Sink, public virtual Referable this->inChannel = inChannel; this->inBigEndian = inBigEndian; this->outBitrate = outBitrate; + this->outQuality = outQuality; this->outSampleRate = outSampleRate; this->outChannel = outChannel; } @@ -149,13 +156,13 @@ class AudioEncoder : public Sink, public virtual Referable } /** - * Constructor. + * Constructor for fixed bitrate encoding. * * @param inSampleRate sample rate of the input. * @param inBitsPerSample number of bits per sample of the input. * @param inChannel number of channels of the input. * @param inBigEndian shows if the input is big or little endian - * @param outBitrate bit rate of the output (bits/sec). + * @param outBitrate bit rate of the output (kbits/sec). * @param outSampleRate sample rate of the output. * If 0, inSampleRate is used. * @param outChannel number of channels of the output. @@ -166,7 +173,7 @@ class AudioEncoder : public Sink, public virtual Referable AudioEncoder ( unsigned int inSampleRate, unsigned int inBitsPerSample, unsigned int inChannel, - bool inBigEndian, + bool inBigEndian, unsigned int outBitrate, unsigned int outSampleRate = 0, unsigned int outChannel = 0 ) @@ -177,16 +184,51 @@ class AudioEncoder : public Sink, public virtual Referable inChannel, inBigEndian, outBitrate, + 0.0, outSampleRate ? outSampleRate : inSampleRate, outChannel ? outChannel : inChannel ); } /** - * Constructor. + * Constructor for variable bitrate encoding. + * + * @param inSampleRate sample rate of the input. + * @param inBitsPerSample number of bits per sample of the input. + * @param inChannel number of channels of the input. + * @param inBigEndian shows if the input is big or little endian + * @param outQuality the quality of the stream. + * @param outSampleRate sample rate of the output. + * If 0, inSampleRate is used. + * @param outChannel number of channels of the output. + * If 0, inChannel is used. + * @exception Exception + */ + inline + AudioEncoder ( unsigned int inSampleRate, + unsigned int inBitsPerSample, + unsigned int inChannel, + bool inBigEndian, + double outQuality, + unsigned int outSampleRate = 0, + unsigned int outChannel = 0 ) + throw ( Exception ) + { + init ( inSampleRate, + inBitsPerSample, + inChannel, + inBigEndian, + 0, + outQuality, + outSampleRate ? outSampleRate : inSampleRate, + outChannel ? outChannel : inChannel ); + } + + /** + * Constructor for fixed bitrate encoding. * * @param as get input sample rate, bits per sample and channels * from this AudioSource. - * @param outBitrate bit rate of the output (bits/sec). + * @param outBitrate bit rate of the output (kbits/sec). * @param outSampleRate sample rate of the output. * If 0, input sample rate is used. * @param outChannel number of channels of the output. @@ -205,6 +247,36 @@ class AudioEncoder : public Sink, public virtual Referable as->getChannel(), as->isBigEndian(), outBitrate, + 0.0, + outSampleRate ? outSampleRate : as->getSampleRate(), + outChannel ? outChannel : as->getChannel() ); + } + + /** + * Constructor for variable bitrate encoding. + * + * @param as get input sample rate, bits per sample and channels + * from this AudioSource. + * @param outQuality the quality of the stream. + * @param outSampleRate sample rate of the output. + * If 0, input sample rate is used. + * @param outChannel number of channels of the output. + * If 0, input channel is used. + * @exception Exception + */ + inline + AudioEncoder ( const AudioSource * as, + double outQuality, + unsigned int outSampleRate = 0, + unsigned int outChannel = 0 ) + throw ( Exception) + { + init( as->getSampleRate(), + as->getBitsPerSample(), + as->getChannel(), + as->isBigEndian(), + 0, + outQuality, outSampleRate ? outSampleRate : as->getSampleRate(), outChannel ? outChannel : as->getChannel() ); } @@ -222,6 +294,7 @@ class AudioEncoder : public Sink, public virtual Referable encoder.inChannel, encoder.inBigEndian, encoder.outBitrate, + encoder.outQuality, encoder.outSampleRate, encoder.outChannel ); } @@ -244,6 +317,7 @@ class AudioEncoder : public Sink, public virtual Referable encoder.inChannel, encoder.inBigEndian, encoder.outBitrate, + encoder.outQuality, encoder.outSampleRate, encoder.outChannel ); } @@ -332,7 +406,8 @@ class AudioEncoder : public Sink, public virtual Referable } /** - * Get the bit rate of the output. (bits/sec) + * Get the bit rate of the output in kbits/sec, for fixed bitrate + * encodings. * * @return the bit rate of the output. */ @@ -342,6 +417,30 @@ class AudioEncoder : public Sink, public virtual Referable return outBitrate; } + /** + * Get the encoding quality of the output, for variable bitrate + * encodings. + * + * @return the encoding quality of the output. + */ + inline double + getOutQuality ( void ) const throw () + { + return outQuality; + } + + /** + * Tell if this encoding is fixed bitrate or variable bitrate. + * + * @return true if this encoding is variable bitrate, + * false if fixed bitrate. + */ + inline bool + isVBR ( void ) const throw () + { + return outBitrate == 0; + } + /** * Check wether encoding is in progress. * @@ -385,6 +484,9 @@ class AudioEncoder : public Sink, public virtual Referable $Source$ $Log$ + Revision 1.6 2002/03/28 16:39:32 darkeye + added interface for variable bitrate encoding + Revision 1.5 2002/02/19 15:23:59 darkeye fixed typo