diff --git a/darkice/trunk/TODO b/darkice/trunk/TODO index c98126f..f471d5b 100644 --- a/darkice/trunk/TODO +++ b/darkice/trunk/TODO @@ -1,6 +1,4 @@ -o make FIFO pipes in /tmp with valid temp filenames o change Ref to follow inheritance -o add "extra encoder options" option into config file o make a master config file, and a small one o add support for shared object lame o add support for VBR encoding diff --git a/darkice/trunk/acinclude.m4 b/darkice/trunk/acinclude.m4 new file mode 100644 index 0000000..ca24ea5 --- /dev/null +++ b/darkice/trunk/acinclude.m4 @@ -0,0 +1,53 @@ +dnl acinclude.m4. Change *this* file to add new or change macros. +dnl When changes have been made, delete aclocal.m4 and run +dnl "aclocal". +dnl +dnl DO NOT change aclocal.m4 ! +dnl + +dnl * LA_SEARCH_FILE(variable, filename, PATH) +dnl * Search "filename" in the specified "PATH", "variable" will +dnl * contain the full pathname or the empty string +dnl * PATH is space-separated list of directories. +dnl * by Florian Bomers + +AC_DEFUN(LA_SEARCH_FILE,[ + $1= + dnl hack: eliminate line feeds in $2 + for FILE in $2; do + for DIR in $3; do + dnl use PATH in order + if test ".$1"="." && test -f "$DIR/$FILE"; then + $1=$DIR + fi + done + done +]) + +dnl * LA_SEARCH_LIB(lib-variable, include-variable, lib-filename, header-filename, prefix) +dnl * looks for "lib-filename" and "header-filename" in the area of "prefix". +dnl * if found, "lib-variable" and "include-variable" are set to the +dnl * respective paths. +dnl * prefix is a single path +dnl * libs are searched in prefix, prefix/lib, prefix/.., prefix/../lib +dnl * headers are searched in prefix, prefix/include, prefix/.., prefix/../include +dnl * +dnl * If one of them is not found, both "lib-variable", "include-variable" are +dnl * set to the empty string. +dnl * +dnl * TODO: assert function call to verify lib +dnl * +dnl * by Florian Bomers + +AC_DEFUN(LA_SEARCH_LIB,[ + dnl look for lib + LA_SEARCH_FILE($1, $3, $5 $5/lib $5/.. $5/../lib) + dnl look for header. + LA_SEARCH_FILE($2, $4, $5 $5/include $5/.. $5/../include) + if test ".$1" = "." || test ".$2" = "."; then + $1= + $2= + fi +]) + + diff --git a/darkice/trunk/configure.h.in b/darkice/trunk/configure.h.in index f6ec2bc..03ba7fb 100644 --- a/darkice/trunk/configure.h.in +++ b/darkice/trunk/configure.h.in @@ -75,3 +75,6 @@ /* Version number of package */ #undef VERSION +/* build with lame library calls */ +#undef HAVE_LAME_LIB + diff --git a/darkice/trunk/configure.in b/darkice/trunk/configure.in index f125927..b609478 100644 --- a/darkice/trunk/configure.in +++ b/darkice/trunk/configure.in @@ -1,6 +1,6 @@ dnl Process this file with autoconf to produce a configure script. AC_INIT(src/DarkIce.cpp) -AM_INIT_AUTOMAKE(darkice, 0.3.1) +AM_INIT_AUTOMAKE(darkice, 0.4) AM_CONFIG_HEADER(configure.h) @@ -17,4 +17,34 @@ AC_HEADER_SYS_WAIT() AC_TYPE_PID_T() AC_TYPE_SIZE_T() +AC_SUBST(LAME_INCFLAGS) +AC_SUBST(LAME_LDFLAGS) +AC_SUBST(LINK_STATIC) + +dnl checkin for lame library +AC_MSG_CHECKING(lame library) +WARNING= +AC_ARG_WITH(lame-prefix, + [ --with-lame-prefix=DIR Alternate location for lame], + CONFIG_LAME_PREFIX="${withval}", CONFIG_LAME_PREFIX="/usr/local") + if test "x${CONFIG_LAME_PREFIX}" != "x" ; then + # look for lame lib. This overrides any standard location + LA_SEARCH_LIB(LAME_LIB_LOC, LAME_INC_LOC, libmp3lame.a, lame/lame.h, ${CONFIG_LAME_PREFIX}) + if test "x${LAME_LIB_LOC}" != "x" ; then + AC_DEFINE(HAVE_LAME_LIB, 1, build with lame library calls) + LAME_INCFLAGS="-I${LAME_INC_LOC}" + LAME_LDFLAGS="-L${LAME_LIB_LOC} -lmp3lame" + AC_MSG_RESULT( "lame found at ${LAME_LIB_LOC}") + else + AC_MSG_ERROR( "lame library not found") + fi + fi + +AC_ARG_ENABLE( static, + [ --enable-static link everything into the executable statically], + LINK_STATIC="--static", LINK_STATIC="") + + + AC_OUTPUT(Makefile src/Makefile) + diff --git a/darkice/trunk/src/Connector.cpp b/darkice/trunk/src/Connector.cpp index 2bb20f3..95d38ef 100644 --- a/darkice/trunk/src/Connector.cpp +++ b/darkice/trunk/src/Connector.cpp @@ -313,7 +313,7 @@ Connector :: transfer ( unsigned long bytes, /*------------------------------------------------------------------------------ - * Open the source and all the sinks if needed + * Close the source and all the sinks if needed *----------------------------------------------------------------------------*/ void Connector :: close ( void ) throw ( Exception ) @@ -333,6 +333,11 @@ Connector :: close ( void ) throw ( Exception ) $Source$ $Log$ + Revision 1.6 2001/08/26 20:44:30 darkeye + removed external command-line encoder support + replaced it with a shared-object support for lame with the possibility + of static linkage + Revision 1.5 2001/08/26 08:43:13 darkeye added support for unlimited time encoding diff --git a/darkice/trunk/src/Connector.h b/darkice/trunk/src/Connector.h index 60b3c73..903e999 100644 --- a/darkice/trunk/src/Connector.h +++ b/darkice/trunk/src/Connector.h @@ -214,7 +214,8 @@ class Connector : public virtual Referable, public virtual Reporter * rest of the Sinks. If no Sinks remain, or an error is encountered * with the Source, the function returns prematurely. * - * @param bytes the amount of data to transfer, in bytes + * @param bytes the amount of data to transfer, in bytes. + * If 0, transfer forever. * @param bufSize the size of the buffer to use for transfering. * This amount of data is read from the Source and * written to each Sink on each turn. @@ -258,6 +259,11 @@ class Connector : public virtual Referable, public virtual Reporter $Source$ $Log$ + Revision 1.5 2001/08/26 20:44:30 darkeye + removed external command-line encoder support + replaced it with a shared-object support for lame with the possibility + of static linkage + Revision 1.4 2000/11/15 18:37:37 darkeye changed the transferable number of bytes to unsigned long diff --git a/darkice/trunk/src/DarkIce.cpp b/darkice/trunk/src/DarkIce.cpp index a0e7b67..121d22f 100644 --- a/darkice/trunk/src/DarkIce.cpp +++ b/darkice/trunk/src/DarkIce.cpp @@ -120,7 +120,6 @@ DarkIce :: init ( const Config & config ) throw ( Exception ) unsigned int bitsPerSample; unsigned int channel; const char * device; - unsigned int u; // the [general] section if ( !(cs = config.get( "general")) ) { @@ -151,16 +150,27 @@ DarkIce :: init ( const Config & config ) throw ( Exception ) channel ); encConnector = new Connector( dsp.get()); + configLameLib( config, bufferSecs); +} - // look for lame encoder output streams, sections [lame0], [lame1], etc. - char lame[] = "lame "; - size_t lameLen = Util::strLen( lame); - char * pipeOutExt = ".out"; - size_t pipeOutExtLen = Util::strLen( pipeOutExt); - char * pipeInExt = ".in"; - size_t pipeInExtLen = Util::strLen( pipeInExt); + +/*------------------------------------------------------------------------------ + * Look for the lame library outputs from the config file. + *----------------------------------------------------------------------------*/ +void +DarkIce :: configLameLib ( const Config & config, + unsigned int bufferSecs ) + throw ( Exception ) +{ + // look for lame encoder output streams, sections [lamelib0], [lamelib1]... + char lame[] = "lame "; + size_t lameLen = Util::strLen( lame); + unsigned int u; for ( u = 0; u < maxOutput; ++u ) { + const ConfigSection * cs; + const char * str; + // ugly hack to change the section name to "lame0", "lame1", etc. lame[lameLen-1] = '0' + u; @@ -168,7 +178,6 @@ DarkIce :: init ( const Config & config ) throw ( Exception ) break; } - const char * encoder = 0; unsigned int bitrate = 0; const char * server = 0; unsigned int port = 0; @@ -183,7 +192,6 @@ DarkIce :: init ( const Config & config ) throw ( Exception ) unsigned int lowpass = 0; unsigned int highpass = 0; - encoder = cs->getForSure( "encoder", " missing in section ", lame); str = cs->getForSure( "bitrate", " missing in section ", lame); bitrate = Util::strToL( str); server = cs->getForSure( "server", " missing in section ", lame); @@ -203,76 +211,40 @@ DarkIce :: init ( const Config & config ) throw ( Exception ) str = cs->get( "highpass"); highpass = str ? Util::strToL( str) : 0; - // generate the pipe names - char pipeOutName[lameLen + pipeOutExtLen + 1]; - char pipeInName[lameLen + pipeInExtLen + 1]; - - Util::strCpy( pipeOutName, lame); - Util::strCat( pipeOutName, pipeOutExt); - Util::strCpy( pipeInName, lame); - Util::strCat( pipeInName, pipeInExt); - // go on and create the things - outputs[u].pid = 0; - - // the pipes - outputs[u].encOutPipe = new PipeSource( pipeOutName); - outputs[u].encInPipe = new PipeSink( pipeInName); - - if ( !outputs[u].encOutPipe->exists() ) { - if ( !outputs[u].encOutPipe->create() ) { - throw Exception( __FILE__, __LINE__, - "can't create out pipe ", - pipeOutName ); - } - } - - if ( !outputs[u].encInPipe->exists() ) { - if ( !outputs[u].encInPipe->create() ) { - throw Exception( __FILE__, __LINE__, - "can't create in pipe", - pipeInName ); - } - } - // encoder related stuff unsigned int bs = bufferSecs * - (bitsPerSample / 8) * channel * sampleRate; - outputs[u].encIn = new BufferedSink( outputs[u].encInPipe.get(), - bs, - (bitsPerSample / 8) * channel ); + (dsp->getBitsPerSample() / 8) * + dsp->getChannel() * + dsp->getSampleRate(); reportEvent( 6, "using buffer size", bs); - encConnector->attach( outputs[u].encIn.get()); - outputs[u].encoder = new LameEncoder( encoder, - outputs[u].encInPipe->getFileName(), - dsp.get(), - outputs[u].encOutPipe->getFileName(), - bitrate, - sampleRate, - channel, - lowpass, - highpass ); - - // streaming related stuff - outputs[u].socket = new TcpSocket( server, port); - outputs[u].ice = new IceCast( outputs[u].socket.get(), - password, - mountPoint, - remoteDumpFile, - name, - description, - url, - genre, - bitrate, - isPublic ); - outputs[u].shoutConnector = new Connector( outputs[u].encOutPipe.get(), - outputs[u].ice.get()); + lameLibOuts[u].socket = new TcpSocket( server, port); + lameLibOuts[u].ice = new IceCast( lameLibOuts[u].socket.get(), + password, + mountPoint, + remoteDumpFile, + name, + description, + url, + genre, + bitrate, + isPublic ); + + lameLibOuts[u].encoder = new LameLibEncoder( lameLibOuts[u].ice.get(), + dsp.get(), + bitrate, + dsp->getSampleRate(), + dsp->getChannel(), + lowpass, + highpass ); + + encConnector->attach( lameLibOuts[u].encoder.get()); } - noOutputs = u; + noLameLibOuts = u; } @@ -366,15 +338,8 @@ bool DarkIce :: encode ( void ) throw ( Exception ) { unsigned int len; - unsigned int u; unsigned long bytes; - for ( u = 0; u < noOutputs; ++u ) { - outputs[u].encoder->start(); - } - - sleep( 1 ); - if ( !encConnector->open() ) { throw Exception( __FILE__, __LINE__, "can't open connector"); } @@ -390,38 +355,6 @@ DarkIce :: encode ( void ) throw ( Exception ) encConnector->close(); - for ( u = 0; u < noOutputs; ++u ) { - outputs[u].encoder->stop(); - } - - return true; -} - - -/*------------------------------------------------------------------------------ - * Run the encoder - *----------------------------------------------------------------------------*/ -bool -DarkIce :: shout ( unsigned int ix ) throw ( Exception ) -{ - unsigned int len; - unsigned long bytes; - - if ( ix >= noOutputs ) { - return false; - } - - if ( !outputs[ix].shoutConnector->open() ) { - throw Exception( __FILE__, __LINE__, "can't open connector"); - } - - bytes = outputs[ix].encoder->getOutBitrate() * (1024UL / 8UL) * duration; - len = outputs[ix].shoutConnector->transfer ( bytes, 4096, 10, 0 ); - - reportEvent( 1, len, "bytes transfered to stream", ix); - - outputs[ix].shoutConnector->close(); - return true; } @@ -432,46 +365,12 @@ DarkIce :: shout ( unsigned int ix ) throw ( Exception ) int DarkIce :: run ( void ) throw ( Exception ) { - unsigned int u; - - for ( u = 0; u < noOutputs; ++u ) { - outputs[u].pid = fork(); - - if ( outputs[u].pid == -1 ) { - throw Exception( __FILE__, __LINE__, "fork error", errno); - - } else if ( outputs[u].pid == 0 ) { - // this is the child - - sleep ( 1 ); - - reportEvent( 3, "shouting", u); - shout( u); - reportEvent( 3, "shouting ends", u); - - exit(0); - } - } - - // this is the parent - reportEvent( 3, "encoding"); setRealTimeScheduling(); encode(); setOriginalScheduling(); reportEvent( 3, "encoding ends"); - for ( u = 0; u < noOutputs; ++u ) { - int status; - - waitpid( outputs[u].pid, &status, 0); - - if ( !WIFEXITED(status) ) { - throw Exception( __FILE__, __LINE__, - "child exited abnormally", WEXITSTATUS(status)); - } - } - return 0; } @@ -481,6 +380,11 @@ DarkIce :: run ( void ) throw ( Exception ) $Source$ $Log$ + Revision 1.13 2001/08/26 20:44:30 darkeye + removed external command-line encoder support + replaced it with a shared-object support for lame with the possibility + of static linkage + Revision 1.12 2000/12/20 12:36:47 darkeye added POSIX real-time scheduling diff --git a/darkice/trunk/src/DarkIce.h b/darkice/trunk/src/DarkIce.h index d2eee28..28c6886 100644 --- a/darkice/trunk/src/DarkIce.h +++ b/darkice/trunk/src/DarkIce.h @@ -53,11 +53,9 @@ #include "Exception.h" #include "Ref.h" #include "OssDspSource.h" -#include "PipeSink.h" #include "BufferedSink.h" #include "Connector.h" -#include "LameEncoder.h" -#include "PipeSource.h" +#include "LameLibEncoder.h" #include "TcpSocket.h" #include "IceCast.h" #include "Config.h" @@ -87,18 +85,23 @@ class DarkIce : public virtual Referable, public virtual Reporter static const unsigned int maxOutput = 8; /** - * Type describing each output. + * Type describing each lame library output. */ typedef struct { - Ref encInPipe; - Ref encIn; - Ref encoder; - Ref encOutPipe; + Ref encoder; Ref socket; Ref ice; - Ref shoutConnector; - pid_t pid; - } Output; + } LameLibOutput; + + /** + * The lame library outputs. + */ + LameLibOutput lameLibOuts[maxOutput]; + + /** + * Number of lame library outputs. + */ + unsigned int noLameLibOuts; /** * Duration of playing, in seconds. @@ -115,16 +118,6 @@ class DarkIce : public virtual Referable, public virtual Reporter */ Ref encConnector; - /** - * The outputs. - */ - Output outputs[maxOutput]; - - /** - * Number of outputs. - */ - unsigned int noOutputs; - /** * Original scheduling policy */ @@ -145,6 +138,18 @@ class DarkIce : public virtual Referable, public virtual Reporter void init ( const Config & config ) throw ( Exception ); + /** + * Look for the lame library outputs from the config file. + * Called from init() + * + * @param config the config Object to read initialization + * information from. + * @exception Exception + */ + void + configLameLib ( const Config & config, + unsigned int bufferSecs ) throw ( Exception ); + /** * Set POSIX real-time scheduling for the encoding process, * if user permissions enable it. @@ -264,6 +269,11 @@ class DarkIce : public virtual Referable, public virtual Reporter $Source$ $Log$ + Revision 1.8 2001/08/26 20:44:30 darkeye + removed external command-line encoder support + replaced it with a shared-object support for lame with the possibility + of static linkage + Revision 1.7 2000/12/20 12:36:47 darkeye added POSIX real-time scheduling diff --git a/darkice/trunk/src/ExternalEncoder.cpp b/darkice/trunk/src/ExternalEncoder.cpp deleted file mode 100644 index 0a4fb89..0000000 --- a/darkice/trunk/src/ExternalEncoder.cpp +++ /dev/null @@ -1,218 +0,0 @@ -/*------------------------------------------------------------------------------ - - Copyright (c) 2000 Tyrell Corporation. All rights reserved. - - Tyrell DarkIce - - File : ExternalEncoder.cpp - Version : $Revision$ - Author : $Author$ - Location : $Source$ - - Copyright notice: - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -------------------------------------------------------------------------------*/ - -/* ============================================================ include files */ - -#ifdef HAVE_CONFIG_H -#include "configure.h" -#endif - -#ifdef HAVE_SYS_TYPES_H -#include -#else -#error need sys/types.h -#endif - -#ifdef HAVE_UNISTD_H -#include -#else -#error need unistd.h -#endif - -#ifdef HAVE_SIGNAL_H -#include -#else -#error need signal.h -#endif - -#ifdef HAVE_ERRNO_H -#include -#else -#error need errno.h -#endif - - -#include "Exception.h" -#include "Util.h" -#include "ExternalEncoder.h" - - -/* =================================================== local data structures */ - - -/* ================================================ local constants & macros */ - -/*------------------------------------------------------------------------------ - * File identity - *----------------------------------------------------------------------------*/ -static const char fileid[] = "$Id$"; - - -/*------------------------------------------------------------------------------ - * File identity - *----------------------------------------------------------------------------*/ -#define ARG_LEN 64 - - -/* =============================================== local function prototypes */ - - -/* ============================================================= module code */ - -/*------------------------------------------------------------------------------ - * Initialize the class - *----------------------------------------------------------------------------*/ -void -ExternalEncoder :: init ( const char * encoderName, - const char * inFileName, - const char * outFileName ) throw ( Exception ) -{ - unsigned int u; - - for ( u = 0; u < numCmdArgs; ++u ) { - cmdArgs[u] = 0; - } - - this->encoderName = Util::strDup( encoderName); - this->inFileName = Util::strDup( inFileName); - this->outFileName = Util::strDup( outFileName); - this->child = 0; -} - - -/*------------------------------------------------------------------------------ - * De-initialize the class - *----------------------------------------------------------------------------*/ -void -ExternalEncoder :: strip ( void ) throw ( Exception ) -{ - unsigned int u; - - if ( isRunning() ) { - stop(); - } - - for ( u = 0; u < numCmdArgs; ++u ) { - if ( cmdArgs[u] ) { - delete[] cmdArgs[u]; - } - } - - delete[] encoderName; - delete[] inFileName; - delete[] outFileName; - child = 0; -} - - -/*------------------------------------------------------------------------------ - * Set the nth command line argument - *----------------------------------------------------------------------------*/ -void -ExternalEncoder :: setArg ( const char * str, - unsigned int index ) throw ( Exception ) -{ - if ( index >= numCmdArgs ) { - throw Exception( __FILE__, __LINE__, "index >= numCmdArgs", index); - } - - cmdArgs[index] = str ? Util::strDup( str) : 0; -} - - -/*------------------------------------------------------------------------------ - * Start the encoding - *----------------------------------------------------------------------------*/ -bool -ExternalEncoder :: start ( void ) throw ( Exception ) -{ - pid_t pid; - - if ( isRunning() ) { - return false; - } - - pid = fork(); - - if ( pid == -1 ) { - throw Exception( __FILE__, __LINE__, "fork error"); - } else if ( pid == 0 ) { - reportEvent( 5, "child process", getpid(), "started"); - - makeArgs(); - execvp( getEncoderName(), cmdArgs); - - throw Exception( __FILE__, __LINE__, "exec returned"); - } else { - child = pid; - reportEvent( 5, "parent", getpid(), "started child process", child); - - return true; - } -} - - -/*------------------------------------------------------------------------------ - * End the encoding - *----------------------------------------------------------------------------*/ -void -ExternalEncoder :: stop ( void ) throw ( Exception ) -{ - if ( !isRunning() ) { - return; - } - - if ( kill( child, SIGHUP) == -1 ) { - throw Exception( __FILE__, __LINE__, "kill", errno); - } -} - - - -/*------------------------------------------------------------------------------ - - $Source$ - - $Log$ - Revision 1.4 2000/11/18 11:13:27 darkeye - removed direct reference to cout, except from main.cpp - all class use the Reporter interface to report events - - Revision 1.3 2000/11/12 14:54:50 darkeye - added kdoc-style documentation comments - - Revision 1.2 2000/11/05 14:08:27 darkeye - changed builting to an automake / autoconf environment - - Revision 1.1.1.1 2000/11/05 10:05:50 darkeye - initial version - - -------------------------------------------------------------------------------*/ - diff --git a/darkice/trunk/src/ExternalEncoder.h b/darkice/trunk/src/ExternalEncoder.h deleted file mode 100644 index 008fa5f..0000000 --- a/darkice/trunk/src/ExternalEncoder.h +++ /dev/null @@ -1,382 +0,0 @@ -/*------------------------------------------------------------------------------ - - Copyright (c) 2000 Tyrell Corporation. All rights reserved. - - Tyrell DarkIce - - File : ExternalEncoder.h - Version : $Revision$ - Author : $Author$ - Location : $ExternalEncoder$ - - Copyright notice: - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -------------------------------------------------------------------------------*/ -#ifndef EXTERNAL_ENCODER_H -#define EXTERNAL_ENCODER_H - -#ifndef __cplusplus -#error This is a C++ include file -#endif - - -/* ============================================================ include files */ - -#ifdef HAVE_CONFIG_H -#include "configure.h" -#endif - -#ifdef HAVE_SYS_TYPES_H -#include -#else -#error need sys/types.h -#endif - - -#include "Exception.h" -#include "Reporter.h" -#include "AudioEncoder.h" - - -/* ================================================================ constants */ - - -/* =================================================================== macros */ - - -/* =============================================================== data types */ - -/** - * A class representing an external audio encoder which is invoked - * with a frok() and an exec() call - * - * @author $Author$ - * @version $Revision$ - */ -class ExternalEncoder : public AudioEncoder, public virtual Reporter -{ - private: - - /** - * Name of the encoder (the command to invoke the encoder with). - */ - char * encoderName; - - /** - * Input file parameter for the encoder. - */ - char * inFileName; - - /** - * Output file parameter for the encoder. - */ - char * outFileName; - - /** - * Maximum number of command line arguments. - */ - static const unsigned int numCmdArgs = 64; - - /** - * Array of command line arguments. - */ - char * cmdArgs[numCmdArgs]; - - /** - * Process ID of the encoder process. - */ - pid_t child; - - /** - * Initialize the object. - * - * @param encoderName name of the encoder. - * @param inFileName input file parameter for the encoder. - * @param outFileName output file parameter for the encoder. - * @exception Exception - */ - void - init ( const char * encoderName, - const char * inFileName, - const char * outFileName ) throw ( Exception ); - - /** - * De-initialize the object. - * - * @exception Exception - */ - void - strip ( void ) throw ( Exception ); - - - protected: - - /** - * Default constructor. Always throws an Exception. - * - * @exception Exception - */ - inline - ExternalEncoder ( void ) throw ( Exception ) - { - throw Exception( __FILE__, __LINE__); - } - - /** - * Set a command line argument in the argument array. - * - * @param str the argument to set. - * @param index the place in the array to set the argument. - * @exception Exception - */ - void - setArg ( const char * str, - unsigned int index ) throw ( Exception ); - - /** - * Fill in the list of command line arguments. Puts a 0 - * as the last in the list of args. - * - * @return the number of arguments filled. - * @exception Exception - */ - virtual unsigned int - makeArgs ( void ) throw ( Exception ) = 0; - - - public: - - /** - * Constructor. - * - * @param encoderName name of the encoder. - * (the command to invoke the encoder with) - * @param inFileName input file parameter for the encoder. - * @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 outFileName output file parameter for the encoder. - * @param outBitrate bit rate of the output (bits/sec). - * @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 - ExternalEncoder ( const char * encoderName, - const char * inFileName, - unsigned int inSampleRate, - unsigned int inBitsPerSample, - unsigned int inChannel, - const char * outFileName, - unsigned int outBitrate, - unsigned int outSampleRate = 0, - unsigned int outChannel = 0 ) - throw ( Exception ) - - : AudioEncoder ( inSampleRate, - inBitsPerSample, - inChannel, - outBitrate, - outSampleRate, - outChannel ) - { - init ( encoderName, inFileName, outFileName ); - } - - /** - * Constructor. - * - * @param encoderName name of the encoder. - * (the command to invoke the encoder with) - * @param inFileName input file parameter for the encoder. - * @param as get input sample rate, bits per sample and channels - * from this AudioSource. - * @param outFileName output file parameter for the encoder. - * @param outBitrate bit rate of the output (bits/sec). - * @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 - ExternalEncoder ( const char * encoderName, - const char * inFileName, - const AudioSource * as, - const char * outFileName, - unsigned int outBitrate, - unsigned int outSampleRate = 0, - unsigned int outChannel = 0 ) - throw ( Exception ) - - : AudioEncoder ( as, - outBitrate, - outSampleRate, - outChannel ) - { - init ( encoderName, inFileName, outFileName ); - } - - /** - * Copy constructor. - * - * @param encoder the ExternalEncoder to copy. - */ - inline - ExternalEncoder ( const ExternalEncoder & encoder ) - throw ( Exception ) - : AudioEncoder( encoder ) - { - init( encoder.encoderName, - encoder.inFileName, - encoder.outFileName ); - } - - /** - * Destructor. - * - * @exception Exception - */ - inline virtual - ~ExternalEncoder ( void ) throw ( Exception ) - { - strip(); - } - - /** - * Assignment operator. - * - * @param encoder the ExternalEncoder to assign this to. - * @return a reference to this ExternalEncoder. - * @exception Exception - */ - inline virtual ExternalEncoder & - operator= ( const ExternalEncoder & encoder ) throw ( Exception ) - { - if ( this != &encoder ) { - strip(); - AudioEncoder::operator=( encoder); - init( encoder.encoderName, - encoder.inFileName, - encoder.outFileName ); - } - - return *this; - } - - /** - * Get the name of the encoder - * (the command to invoke the encoder with). - * - * @return the name of the encoder. - */ - const char * - getEncoderName ( void ) const throw () - { - return encoderName; - } - - /** - * Get the input file parameter for the encoder. - * - * @return the input file parameter for the encoder. - */ - const char * - getInFileName ( void ) const throw () - { - return inFileName; - } - - /** - * Get the output file parameter for the encoder. - * - * @return the output file parameter for the encoder. - */ - const char * - getOutFileName ( void ) const throw () - { - return outFileName; - } - - /** - * Check wether encoding is in progress. - * - * @return true if encoding is in progress, false otherwise. - */ - inline virtual bool - isRunning ( void ) const throw () - { - return child != 0; - } - - /** - * Start encoding. This function returns as soon as possible, - * with encoding started as a separate process in the - * background. - * - * @return true if encoding has started, false otherwise. - * @exception Exception - */ - virtual bool - start ( void ) throw ( Exception ); - - /** - * Stop encoding. Stops the encoding running in the background. - * - * @exception Exception - */ - virtual void - stop ( void ) throw ( Exception ); -}; - - -/* ================================================= external data structures */ - - -/* ====================================================== function prototypes */ - - - -#endif /* EXTERNAL_ENCODER_H */ - - -/*------------------------------------------------------------------------------ - - $Source$ - - $Log$ - Revision 1.5 2000/11/18 11:13:27 darkeye - removed direct reference to cout, except from main.cpp - all class use the Reporter interface to report events - - Revision 1.4 2000/11/12 14:54:50 darkeye - added kdoc-style documentation comments - - Revision 1.3 2000/11/05 17:37:24 darkeye - removed clone() functions - - Revision 1.2 2000/11/05 14:08:27 darkeye - changed builting to an automake / autoconf environment - - Revision 1.1.1.1 2000/11/05 10:05:50 darkeye - initial version - - -------------------------------------------------------------------------------*/ - diff --git a/darkice/trunk/src/FileSink.cpp b/darkice/trunk/src/FileSink.cpp deleted file mode 100644 index f6a74a8..0000000 --- a/darkice/trunk/src/FileSink.cpp +++ /dev/null @@ -1,320 +0,0 @@ -/*------------------------------------------------------------------------------ - - Copyright (c) 2000 Tyrell Corporation. All rights reserved. - - Tyrell DarkIce - - File : FileSink.cpp - Version : $Revision$ - Author : $Author$ - Location : $Source$ - - Copyright notice: - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -------------------------------------------------------------------------------*/ - -/* ============================================================ include files */ - -#ifdef HAVE_CONFIG_H -#include "configure.h" -#endif - -#ifdef HAVE_UNISTD_H -#include -#else -#error need unistd.h -#endif - -#ifdef HAVE_STDLIB_H -#include -#else -#error need stdlib.h -#endif - -#ifdef HAVE_SYS_TYPES_H -#include -#else -#error need sys/types.h -#endif - -#ifdef HAVE_ERRNO_H -#include -#else -#error need errno.h -#endif - -#ifdef HAVE_SYS_STAT_H -#include -#else -#error need sys/stat.h -#endif - -#ifdef HAVE_FCNTL_H -#include -#else -#error need fcntl.h -#endif - -#ifdef HAVE_SYS_TIME_H -#include -#else -#error need sys/time.h -#endif - - -#include "Util.h" -#include "Exception.h" -#include "FileSink.h" - - -/* =================================================== local data structures */ - - -/* ================================================ local constants & macros */ - -/*------------------------------------------------------------------------------ - * File identity - *----------------------------------------------------------------------------*/ -static const char fileid[] = "$Id$"; - - -/* =============================================== local function prototypes */ - - -/* ============================================================= module code */ - -/*------------------------------------------------------------------------------ - * Initialize the object - *----------------------------------------------------------------------------*/ -void -FileSink :: init ( const char * name ) throw ( Exception ) -{ - fileName = Util::strDup( name); - fileDescriptor = 0; -} - - -/*------------------------------------------------------------------------------ - * De-initialize the object - *----------------------------------------------------------------------------*/ -void -FileSink :: strip ( void) throw ( Exception ) -{ - if ( isOpen() ) { - close(); - } - - delete[] fileName; -} - - -/*------------------------------------------------------------------------------ - * Copy Constructor - *----------------------------------------------------------------------------*/ -FileSink :: FileSink ( const FileSink & fs ) throw ( Exception ) - : Sink( fs ) -{ - int fd; - - init( fs.fileName); - - if ( (fd = fs.fileDescriptor ? dup( fs.fileDescriptor) : 0) == -1 ) { - strip(); - throw Exception( __FILE__, __LINE__, "dup failure"); - } - - fileDescriptor = fd; -} - - -/*------------------------------------------------------------------------------ - * Assignment operator - *----------------------------------------------------------------------------*/ -FileSink & -FileSink :: operator= ( const FileSink & fs ) throw ( Exception ) -{ - if ( this != &fs ) { - int fd; - - /* first strip */ - strip(); - - - /* then build up */ - Sink::operator=( fs ); - - init( fs.fileName); - - if ( (fd = fs.fileDescriptor ? dup( fs.fileDescriptor) : 0) == -1 ) { - strip(); - throw Exception( __FILE__, __LINE__, "dup failure"); - } - - fileDescriptor = fd; - } - - return *this; -} - - -/*------------------------------------------------------------------------------ - * Check wether a file exists - *----------------------------------------------------------------------------*/ -bool -FileSink :: exists ( void ) const throw () -{ - struct stat st; - - if ( stat( (const char*)fileName, &st) == -1 ) { - return false; - } - - return true; -} - - -/*------------------------------------------------------------------------------ - * Create a file, truncate if already exists - *----------------------------------------------------------------------------*/ -bool -FileSink :: create ( void ) throw ( Exception ) -{ - int fd; - - if ( isOpen() ) { - return false; - } - - if ( (fd = ::creat( fileName, S_IRUSR | S_IWUSR)) == -1 ) { - throw Exception( __FILE__, __LINE__, "creat error", errno); - } - - ::close( fd); - return true; -} - - -/*------------------------------------------------------------------------------ - * Open the file - *----------------------------------------------------------------------------*/ -bool -FileSink :: open ( void ) throw ( Exception ) -{ - if ( isOpen() ) { - return false; - } - - if ( (fileDescriptor = ::open( fileName, O_WRONLY | O_TRUNC, 0)) == -1 ) { - fileDescriptor = 0; - return false; - } - - return true; -} - - -/*------------------------------------------------------------------------------ - * Check wether read() would return anything - *----------------------------------------------------------------------------*/ -bool -FileSink :: canWrite ( unsigned int sec, - unsigned int usec ) throw ( Exception ) -{ - fd_set fdset; - struct timeval tv; - int ret; - - if ( !isOpen() ) { - return false; - } - - FD_ZERO( &fdset); - FD_SET( fileDescriptor, &fdset); - tv.tv_sec = sec; - tv.tv_usec = usec; - - ret = select( fileDescriptor + 1, NULL, &fdset, NULL, &tv); - - if ( ret == -1 ) { - throw Exception( __FILE__, __LINE__, "select error"); - } - - return ret > 0; -} - - -/*------------------------------------------------------------------------------ - * Read from the audio source - *----------------------------------------------------------------------------*/ -unsigned int -FileSink :: write ( const void * buf, - unsigned int len ) throw ( Exception ) -{ - ssize_t ret; - - if ( !isOpen() ) { - return 0; - } - - ret = ::write( fileDescriptor, buf, len); - - if ( ret == -1 ) { - if ( errno == EAGAIN ) { - ret = 0; - } else { - throw Exception( __FILE__, __LINE__, "write error", errno); - } - } - - return ret; -} - - -/*------------------------------------------------------------------------------ - * Close the audio source - *----------------------------------------------------------------------------*/ -void -FileSink :: close ( void ) throw ( Exception ) -{ - if ( !isOpen() ) { - return; - } - - flush(); - ::close( fileDescriptor); - fileDescriptor = 0; -} - - - -/*------------------------------------------------------------------------------ - - $Source$ - - $Log$ - Revision 1.3 2000/11/11 12:33:13 darkeye - added kdoc-style documentation - - Revision 1.2 2000/11/05 14:08:27 darkeye - changed builting to an automake / autoconf environment - - Revision 1.1.1.1 2000/11/05 10:05:51 darkeye - initial version - - -------------------------------------------------------------------------------*/ - diff --git a/darkice/trunk/src/FileSink.h b/darkice/trunk/src/FileSink.h deleted file mode 100644 index 2eecf38..0000000 --- a/darkice/trunk/src/FileSink.h +++ /dev/null @@ -1,264 +0,0 @@ -/*------------------------------------------------------------------------------ - - Copyright (c) 2000 Tyrell Corporation. All rights reserved. - - Tyrell DarkIce - - File : FileSink.h - Version : $Revision$ - Author : $Author$ - Location : $Source$ - - Copyright notice: - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -------------------------------------------------------------------------------*/ -#ifndef FILE_SINK_H -#define FILE_SINK_H - -#ifndef __cplusplus -#error This is a C++ include file -#endif - - -/* ============================================================ include files */ - -#include "Sink.h" - - -/* ================================================================ constants */ - - -/* =================================================================== macros */ - - -/* =============================================================== data types */ - -/** - * File data output - * - * @author $Author$ - * @version $Revision$ - */ -class FileSink : public Sink -{ - private: - - /** - * Name of the file represented by the FileSink. - */ - char * fileName; - - /** - * Initialize the object. - * - * @param name name of the file to be represented by the object. - * @exception Exception - */ - void - init ( const char * name ) throw ( Exception ); - - /** - * De-initialize the object. - * - * @exception Exception - */ - void - strip ( void ) throw ( Exception ); - - - protected: - - /** - * Low-level file descriptor for the file represented by this object. - */ - int fileDescriptor; - - /** - * Default constructor. Always throws an Exception. - * - * @exception Exception - */ - inline - FileSink ( void ) throw ( Exception ) - { - throw Exception( __FILE__, __LINE__); - } - - - public: - - /** - * Constructor by a file name. - * - * @param name name of the file to be represented by the object. - * @exception Exception - */ - inline - FileSink( const char * name ) throw ( Exception ) - { - init( name); - } - - /** - * Copy constructor. - * - * @param fsink the FileSink to copy. - * @exception Exception - */ - FileSink( const FileSink & fsink ) throw ( Exception ); - - /** - * Destructor. - * - * @exception Exception - */ - inline virtual - ~FileSink( void ) throw ( Exception ) - { - strip(); - } - - /** - * Assignment operator. - * - * @param fs the FileSink to assign to this object. - * @return a reference to this object. - * @exception Exception - */ - virtual FileSink & - operator= ( const FileSink & fs ) throw ( Exception ); - - /** - * Get the file name this FileSink represents. - * - * @return the file name this FileSink represents. - */ - inline const char * - getFileName ( void ) const throw () - { - return fileName; - } - - /** - * Check for the existence of the file this FileSink represents. - * - * @return true if the file exists, false otherwise. - */ - virtual bool - exists ( void ) const throw (); - - /** - * Create the file. - * - * @return true if creation was successful, false otherwise. - * @exception Exception - */ - virtual bool - create ( void ) throw ( Exception ); - - /** - * Open the file. Truncates the file. - * - * @return true if opening was successful, false otherwise. - * @exception Exception - */ - virtual bool - open ( void ) throw ( Exception ); - - /** - * Check if the FileSink is open. - * - * @return true if the FileSink is open, false otherwise. - */ - inline virtual bool - isOpen ( void ) const throw () - { - return fileDescriptor != 0; - } - - /** - * Check if the FileSink is ready to accept data. - * Blocks until the specified time for data to be available. - * - * @param sec the maximum seconds to block. - * @param usec micro seconds to block after the full seconds. - * @return true if the Sink is ready to accept data, false otherwise. - * @exception Exception - */ - virtual bool - canWrite ( unsigned int sec, - unsigned int usec ) throw ( Exception ); - - /** - * Write data to the FileSink. - * - * @param buf the data to write. - * @param len number of bytes to write from buf. - * @return the number of bytes written (may be less than len). - * @exception Exception - */ - virtual unsigned int - write ( const void * buf, - unsigned int len ) throw ( Exception ); - - /** - * This is a no-op in this FileSink. - * - * @exception Exception - */ - inline virtual void - flush ( void ) throw ( Exception ) - { - } - - /** - * Close the FileSink. - * - * @exception Exception - */ - virtual void - close ( void ) throw ( Exception ); -}; - - -/* ================================================= external data structures */ - - -/* ====================================================== function prototypes */ - - - -#endif /* FILE_SINK_H */ - - -/*------------------------------------------------------------------------------ - - $Source$ - - $Log$ - Revision 1.3 2000/11/11 12:33:13 darkeye - added kdoc-style documentation - - Revision 1.2 2000/11/05 17:37:24 darkeye - removed clone() functions - - Revision 1.1.1.1 2000/11/05 10:05:51 darkeye - initial version - - -------------------------------------------------------------------------------*/ - diff --git a/darkice/trunk/src/FileSource.cpp b/darkice/trunk/src/FileSource.cpp deleted file mode 100644 index 2f7dfb9..0000000 --- a/darkice/trunk/src/FileSource.cpp +++ /dev/null @@ -1,270 +0,0 @@ -/*------------------------------------------------------------------------------ - - Copyright (c) 2000 Tyrell Corporation. All rights reserved. - - Tyrell DarkIce - - File : FileSource.cpp - Version : $Revision$ - Author : $Author$ - Location : $Source$ - - Copyright notice: - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -------------------------------------------------------------------------------*/ - -/* ============================================================ include files */ - -#ifdef HAVE_CONFIG_H -#include "configure.h" -#endif - -#ifdef HAVE_UNISTD_H -#include -#else -#error need unistd.h -#endif - -#ifdef HAVE_SYS_TYPES_H -#include -#else -#error need sys/types.h -#endif - -#ifdef HAVE_SYS_STAT_H -#include -#else -#error need sys/stat.h -#endif - -#ifdef HAVE_FCNTL_H -#include -#else -#error need fcntl.h -#endif - -#ifdef HAVE_SYS_TIME_H -#include -#else -#error need sys/time.h -#endif - - -#include "Exception.h" -#include "Util.h" -#include "FileSource.h" - - -/* =================================================== local data structures */ - - -/* ================================================ local constants & macros */ - -/*------------------------------------------------------------------------------ - * File identity - *----------------------------------------------------------------------------*/ -static const char fileid[] = "$Id$"; - - -/* =============================================== local function prototypes */ - - -/* ============================================================= module code */ - -/*------------------------------------------------------------------------------ - * Initialize the object - *----------------------------------------------------------------------------*/ -void -FileSource :: init ( const char * name ) throw ( Exception ) -{ - fileName = Util::strDup( name); - fileDescriptor = 0; -} - - -/*------------------------------------------------------------------------------ - * De-initialize the object - *----------------------------------------------------------------------------*/ -void -FileSource :: strip ( void ) throw ( Exception ) -{ - if ( isOpen() ) { - close(); - } - - delete[] fileName; - fileDescriptor = 0; -} - - -/*------------------------------------------------------------------------------ - * Copy Constructor - *----------------------------------------------------------------------------*/ -FileSource :: FileSource ( const FileSource & fs ) throw ( Exception ) -{ - init( fs.fileName); - - fileDescriptor = fs.fileDescriptor ? dup( fs.fileDescriptor) : 0; - - if ( fileDescriptor == -1 ) { - strip(); - throw Exception( __FILE__, __LINE__, "dup failure"); - } -} - - -/*------------------------------------------------------------------------------ - * Assignment operator - *----------------------------------------------------------------------------*/ -FileSource & -FileSource :: operator= ( const FileSource & fs ) throw ( Exception ) -{ - if ( this != &fs ) { - init( fs.fileName); - - fileDescriptor = fs.fileDescriptor ? dup( fs.fileDescriptor) : 0; - - if ( fileDescriptor == -1 ) { - strip(); - throw Exception( __FILE__, __LINE__, "dup failure"); - } - } - - return *this; -} - - -/*------------------------------------------------------------------------------ - * Check wether a file exists - *----------------------------------------------------------------------------*/ -bool -FileSource :: exists ( void ) const throw () -{ - struct stat st; - - if ( stat( (const char*)fileName, &st) == -1 ) { - return false; - } - - return true; -} - - -/*------------------------------------------------------------------------------ - * Open the source - *----------------------------------------------------------------------------*/ -bool -FileSource :: open ( void ) throw ( Exception ) -{ - if ( isOpen() ) { - return false; - } - - if ( (fileDescriptor = ::open( fileName, O_RDONLY)) == -1 ) { - fileDescriptor = 0; - return false; - } - - return true; -} - - -/*------------------------------------------------------------------------------ - * Check wether read() would return anything - *----------------------------------------------------------------------------*/ -bool -FileSource :: canRead ( unsigned int sec, - unsigned int usec ) throw ( Exception ) -{ - fd_set fdset; - struct timeval tv; - int ret; - - if ( !isOpen() ) { - return false; - } - - FD_ZERO( &fdset); - FD_SET( fileDescriptor, &fdset); - tv.tv_sec = sec; - tv.tv_usec = usec; - - ret = select( fileDescriptor + 1, &fdset, NULL, NULL, &tv); - - if ( ret == -1 ) { - throw Exception( __FILE__, __LINE__, "select error"); - } - - return ret > 0; -} - - -/*------------------------------------------------------------------------------ - * Read from the audio source - *----------------------------------------------------------------------------*/ -unsigned int -FileSource :: read ( void * buf, - unsigned int len ) throw ( Exception ) -{ - ssize_t ret; - - if ( !isOpen() ) { - return 0; - } - - ret = ::read( fileDescriptor, buf, len); - - if ( ret == -1 ) { - throw Exception( __FILE__, __LINE__, "read error"); - } - - return ret; -} - - -/*------------------------------------------------------------------------------ - * Close the audio source - *----------------------------------------------------------------------------*/ -void -FileSource :: close ( void ) throw ( Exception ) -{ - if ( !isOpen() ) { - return; - } - - ::close( fileDescriptor); - fileDescriptor = 0; -} - - -/*------------------------------------------------------------------------------ - - $Source$ - - $Log$ - Revision 1.3 2000/11/12 13:31:40 darkeye - added kdoc-style documentation comments - - Revision 1.2 2000/11/05 14:08:27 darkeye - changed builting to an automake / autoconf environment - - Revision 1.1.1.1 2000/11/05 10:05:51 darkeye - initial version - - -------------------------------------------------------------------------------*/ - diff --git a/darkice/trunk/src/FileSource.h b/darkice/trunk/src/FileSource.h deleted file mode 100644 index 99b4cb7..0000000 --- a/darkice/trunk/src/FileSource.h +++ /dev/null @@ -1,243 +0,0 @@ -/*------------------------------------------------------------------------------ - - Copyright (c) 2000 Tyrell Corporation. All rights reserved. - - Tyrell DarkIce - - File : FileSource.h - Version : $Revision$ - Author : $Author$ - Location : $Source$ - - Copyright notice: - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -------------------------------------------------------------------------------*/ -#ifndef FILE_SOURCE_H -#define FILE_SOURCE_H - -#ifndef __cplusplus -#error This is a C++ include file -#endif - - -/* ============================================================ include files */ - -#include "Source.h" - - -/* ================================================================ constants */ - - -/* =================================================================== macros */ - - -/* =============================================================== data types */ - -/** - * A data source based on a file - * - * @author $Author$ - * @version $Revision$ - */ -class FileSource : public Source -{ - private: - - /** - * Name of the file represented by the FileSource. - */ - char * fileName; - - /** - * Initialize the object. - * - * @param name name of the file to be represented by the object. - * @exception Exception - */ - void - init ( const char * name ) throw ( Exception ); - - /** - * De-initialize the object. - * - * @exception Exception - */ - void - strip ( void ) throw ( Exception ); - - - protected: - - /** - * Low-level file descriptor for the file represented by this object. - */ - int fileDescriptor; - - /** - * Default constructor. Always throws an Exception. - * - * @exception Exception - */ - inline - FileSource ( void ) throw ( Exception ) - { - throw Exception( __FILE__, __LINE__); - } - - - public: - - /** - * Constructor by a file name. - * - * @param name name of the file to be represented by the object. - * @exception Exception - */ - inline - FileSource ( const char * name ) throw ( Exception ) - { - init( name); - } - - /** - * Copy constructor. - * - * @param fs the FileSource to copy. - * @exception Exception - */ - FileSource ( const FileSource & fs ) throw ( Exception ); - - /** - * Destructor. - * - * @exception Exception - */ - inline - ~FileSource ( void ) throw ( Exception ) - { - strip(); - } - - /** - * Assignment operator. - * - * @param fs the FileSource to assign to this object. - * @return a reference to this object. - * @exception Exception - */ - inline virtual FileSource & - operator= ( const FileSource & fs ) throw ( Exception ); - - /** - * Get the file name this FileSource represents. - * - * @return the file name this FileSource represents. - */ - inline virtual const char * - getFileName ( void ) const throw () - { - return fileName; - } - - /** - * Check for the existence of the file this FileSource represents. - * - * @return true if the file exists, false otherwise. - */ - virtual bool - exists ( void ) const throw (); - - /** - * Open the file. - * - * @return true if opening was successful, false otherwise. - * @exception Exception - */ - virtual bool - open ( void ) throw ( Exception ); - - /** - * Check if the FileSource is open. - * - * @return true if the FileSource is open, false otherwise. - */ - inline virtual bool - isOpen ( void ) const throw () - { - return fileDescriptor != 0; - } - - /** - * Check if the FileSource has data available. - * Blocks until the specified time for data to be available. - * - * @param sec the maximum seconds to block. - * @param usec micro seconds to block after the full seconds. - * @return true if the FileSource has data to be read, - * false otherwise. - * @exception Exception - */ - virtual bool - canRead ( unsigned int sec, - unsigned int usec ) throw ( Exception ); - - /** - * Read from the FileSource. - * - * @param buf the buffer to read into. - * @param len the number of bytes to read into buf - * @return the number of bytes read (may be less than len). - * @exception Exception - */ - virtual unsigned int - read ( void * buf, - unsigned int len ) throw ( Exception ); - - /** - * Close the FileSource. - * - * @exception Exception - */ - virtual void - close ( void ) throw ( Exception ); -}; - - -/* ================================================= external data structures */ - - -/* ====================================================== function prototypes */ - - - -#endif /* FILE_SOURCE_H */ - - -/*------------------------------------------------------------------------------ - - $Source$ - - $Log$ - Revision 1.2 2000/11/12 13:31:40 darkeye - added kdoc-style documentation comments - - Revision 1.1.1.1 2000/11/05 10:05:51 darkeye - initial version - - -------------------------------------------------------------------------------*/ - diff --git a/darkice/trunk/src/LameEncoder.cpp b/darkice/trunk/src/LameEncoder.cpp deleted file mode 100644 index d442748..0000000 --- a/darkice/trunk/src/LameEncoder.cpp +++ /dev/null @@ -1,160 +0,0 @@ -/*------------------------------------------------------------------------------ - - Copyright (c) 2000 Tyrell Corporation. All rights reserved. - - Tyrell DarkIce - - File : LameEncoder.cpp - Version : $Revision$ - Author : $Author$ - Location : $Source$ - - Copyright notice: - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -------------------------------------------------------------------------------*/ - -/* ============================================================ include files */ - -#ifdef HAVE_CONFIG_H -#include "configure.h" -#endif - -#ifdef HAVE_STDIO_H -#include -#else -#error need stdio.h -#endif - - -#include "Exception.h" -#include "LameEncoder.h" - - -/* =================================================== local data structures */ - - -/* ================================================ local constants & macros */ - -/*------------------------------------------------------------------------------ - * File identity - *----------------------------------------------------------------------------*/ -static const char fileid[] = "$Id$"; - - -/*------------------------------------------------------------------------------ - * File identity - *----------------------------------------------------------------------------*/ -#define ARG_LEN 64 - - -/* =============================================== local function prototypes */ - - -/* ============================================================= module code */ - -/*------------------------------------------------------------------------------ - * Initialize command line parameters - *----------------------------------------------------------------------------*/ -unsigned int -LameEncoder :: makeArgs ( void ) throw ( Exception ) -{ - unsigned int u; - char str[ARG_LEN]; - - u = 0; - - setArg( getEncoderName(), u++); // name of the command - setArg( "-S", u++); // make it silent - setArg( "-r", u++); // input is raw PCM - setArg( "-x", u++); // input is little endian - setArg( "-h", u++); // high quality - - /* set input sample rate */ - if ( snprintf( str, ARG_LEN, "%.3f", - ((double)getInSampleRate()) / 1000.0 ) == -1 ) { - throw Exception( __FILE__, __LINE__, "snprintf overflow"); - } - setArg( "-s", u++); - setArg( str, u++); - - /* set stereo / mono */ - setArg( "-m", u++); - setArg( getOutChannel() == 1 ? "m" : "j", u++); - - /* set output bitrate */ - if ( snprintf( str, ARG_LEN, "%d", getOutBitrate()) == -1 ) { - throw Exception( __FILE__, __LINE__, "snprintf overflow"); - } - setArg( "-b", u++); - setArg( str, u++); - - /* set output sample rate */ - if ( snprintf( str, ARG_LEN, "%.3f", - ((double)getOutSampleRate()) / 1000.0 ) == -1 ) { - throw Exception( __FILE__, __LINE__, "snprintf overflow"); - } - setArg( "--resample", u++); - setArg( str, u++); - - /* set lowpass filter if needed */ - if ( lowpass ) { - if ( snprintf( str, ARG_LEN, "%.3f", - ((double)getLowpass()) / 1000.0 ) == -1 ) { - throw Exception( __FILE__, __LINE__, "snprintf overflow"); - } - setArg( "--lowpass", u++); - setArg( str, u++); - } - - /* set highpass filter if needed */ - if ( highpass ) { - if ( snprintf( str, ARG_LEN, "%.3f", - ((double)getHighpass()) / 1000.0 ) == -1 ) { - throw Exception( __FILE__, __LINE__, "snprintf overflow"); - } - setArg( "--highpass", u++); - setArg( str, u++); - } - - setArg( getInFileName(), u++); // input file - setArg( getOutFileName(), u++); // output file - - setArg( 0, u++); // terminating zero - - - return u; -} - - - -/*------------------------------------------------------------------------------ - - $Source$ - - $Log$ - Revision 1.3 2000/11/12 14:54:50 darkeye - added kdoc-style documentation comments - - Revision 1.2 2000/11/05 14:08:28 darkeye - changed builting to an automake / autoconf environment - - Revision 1.1.1.1 2000/11/05 10:05:52 darkeye - initial version - - -------------------------------------------------------------------------------*/ - diff --git a/darkice/trunk/src/LameEncoder.h b/darkice/trunk/src/LameEncoder.h deleted file mode 100644 index a169c5a..0000000 --- a/darkice/trunk/src/LameEncoder.h +++ /dev/null @@ -1,362 +0,0 @@ -/*------------------------------------------------------------------------------ - - Copyright (c) 2000 Tyrell Corporation. All rights reserved. - - Tyrell DarkIce - - File : LameEncoder.h - Version : $Revision$ - Author : $Author$ - Location : $LameEncoder$ - - Abstract : - - A class representing the lame mp3 encoder - - Copyright notice: - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - USA. - -------------------------------------------------------------------------------*/ -#ifndef LAME_ENCODER_H -#define LAME_ENCODER_H - -#ifndef __cplusplus -#error This is a C++ include file -#endif - - -/* ============================================================ include files */ - -#include "Exception.h" -#include "ExternalEncoder.h" - - -/* ================================================================ constants */ - - -/* =================================================================== macros */ - - -/* =============================================================== data types */ - -/** - * A class representing the lame mp3 encoder - * - * @author $Author$ - * @version $Revision$ - */ -class LameEncoder : public ExternalEncoder -{ - private: - - /** - * Highpass filter. Sound frequency in Hz, from where up the - * input is cut. - */ - unsigned int lowpass; - - /** - * Lowpass filter. Sound frequency in Hz, from where down the - * input is cut. - */ - unsigned int highpass; - - protected: - - /** - * Fill in the list of command line arguments. Puts a 0 - * as the last in the list of args. - * - * @return the number of arguments filled. - * @exception Exception - */ - virtual unsigned int - makeArgs ( void ) throw ( Exception ); - - /** - * Default constructor. Always throws an Exception. - * - * @exception Exception - */ - inline - LameEncoder ( void ) throw ( Exception ) - { - throw Exception( __FILE__, __LINE__); - } - - /** - * Initialize the object. - * - * @param lowpass lowpass filter range. - * @param highpass highpass filter range. - * @exception Exception - */ - inline void - init ( unsigned int lowpass, - unsigned int highpass ) throw ( Exception ) - { - this->lowpass = lowpass; - this->highpass = highpass; - } - - /** - * De-initialize the object. - * - * @exception Exception - */ - inline void - strip ( void ) throw ( Exception ) - { - } - - - public: - - /** - * Constructor. - * - * @param encoderName name of the encoder. - * (the command to invoke the encoder with) - * @param inFileName input file parameter for the encoder. - * @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 outFileName output file parameter for the encoder. - * @param outBitrate bit rate of the output (bits/sec). - * @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. - * @param lowpass frequency threshold for the lowpass filter. - * Input above this frequency is cut. - * If 0, lame's default values are used, - * which depends on the out sample rate. - * @param highpass frequency threshold for the highpass filter. - * Input below this frequency is cut. - * If 0, lame's default values are used, - * which depends on the out sample rate. - * @exception Exception - */ - inline - LameEncoder ( const char * encoderName, - const char * inFileName, - unsigned int inSampleRate, - unsigned int inBitsPerSample, - unsigned int inChannel, - const char * outFileName, - unsigned int outBitrate, - unsigned int outSampleRate = 0, - unsigned int outChannel = 0, - unsigned int lowpass = 0, - unsigned int highpass = 0 ) - throw ( Exception ) - - : ExternalEncoder ( encoderName, - inFileName, - inSampleRate, - inBitsPerSample, - inChannel, - outFileName, - outBitrate, - outSampleRate, - outChannel ) - { - init( lowpass, highpass); - } - - /** - * Constructor. - * - * @param encoderName name of the encoder. - * (the command to invoke the encoder with) - * @param inFileName input file parameter for the encoder. - * @param as get input sample rate, bits per sample and channels - * from this AudioSource. - * @param outFileName output file parameter for the encoder. - * @param outBitrate bit rate of the output (bits/sec). - * @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. - * @param lowpass frequency threshold for the lowpass filter. - * Input above this frequency is cut. - * If 0, lame's default values are used, - * which depends on the out sample rate. - * @param highpass frequency threshold for the highpass filter. - * Input below this frequency is cut. - * If 0, lame's default values are used, - * which depends on the out sample rate. - * @exception Exception - */ - inline - LameEncoder ( const char * encoderName, - const char * inFileName, - const AudioSource * as, - const char * outFileName, - unsigned int outBitrate, - unsigned int outSampleRate = 0, - unsigned int outChannel = 0, - unsigned int lowpass = 0, - unsigned int highpass = 0 ) - throw ( Exception ) - - : ExternalEncoder ( encoderName, - inFileName, - as, - outFileName, - outBitrate, - outSampleRate, - outChannel ) - { - init( lowpass, highpass); - } - - /** - * Copy constructor. - * - * @param encoder the LameEncoder to copy. - */ - inline - LameEncoder ( const LameEncoder & encoder ) throw ( Exception ) - : ExternalEncoder( encoder ) - { - init( encoder.lowpass, encoder.highpass); - } - - /** - * Destructor. - * - * @exception Exception - */ - inline virtual - ~LameEncoder ( void ) throw ( Exception ) - { - strip(); - } - - /** - * Assignment operator. - * - * @param encoder the LameEncoder to assign this to. - * @return a reference to this LameEncoder. - * @exception Exception - */ - inline virtual LameEncoder & - operator= ( const LameEncoder & encoder ) throw ( Exception ) - { - if ( this != &encoder ) { - strip(); - ExternalEncoder::operator=( encoder); - init( encoder.lowpass, encoder.highpass); - } - - return *this; - } - - /** - * Get the lowpass filter threshold. Sound frequency in Hz, - * from where up the input is cut. - * - * @return the lowpass filter threshold. - */ - inline unsigned int - getLowpass ( void ) const throw () - { - return lowpass; - } - - /** - * Set the lowpass filter threshold. Sound frequency in Hz, - * from where up the input is cut. - * Can be only set if encoding is not in progress. - * - * @param lowpass the lowpass filter threshold. - * @return if setting is successful. - */ - inline bool - setLowpass ( unsigned int lowpass ) throw () - { - if ( isRunning() ) { - return false; - } else { - this->lowpass = lowpass; - return true; - } - } - - /** - * Get the highpass filter threshold. Sound frequency in Hz, - * from where down the input is cut. - * - * @return the highpass filter threshold. - */ - inline unsigned int - getHighpass ( void ) const throw () - { - return highpass; - } - - /** - * Set the highpass filter threshold. Sound frequency in Hz, - * from where down the input is cut. - * Can be only set if encoding is not in progress. - * - * @param highpass the highpass filter threshold. - * @return if setting is successful. - */ - inline bool - setHighpass ( unsigned int highpass ) throw () - { - if ( isRunning() ) { - return false; - } else { - this->highpass = highpass; - return true; - } - } - - -}; - - -/* ================================================= external data structures */ - - -/* ====================================================== function prototypes */ - - - -#endif /* LAME_ENCODER_H */ - - -/*------------------------------------------------------------------------------ - - $Source$ - - $Log$ - Revision 1.3 2000/11/12 14:54:50 darkeye - added kdoc-style documentation comments - - Revision 1.2 2000/11/05 17:37:24 darkeye - removed clone() functions - - Revision 1.1.1.1 2000/11/05 10:05:52 darkeye - initial version - - -------------------------------------------------------------------------------*/ - diff --git a/darkice/trunk/src/LameLibEncoder.cpp b/darkice/trunk/src/LameLibEncoder.cpp new file mode 100644 index 0000000..feeda68 --- /dev/null +++ b/darkice/trunk/src/LameLibEncoder.cpp @@ -0,0 +1,312 @@ +/*------------------------------------------------------------------------------ + + Copyright (c) 2000 Tyrell Corporation. All rights reserved. + + Tyrell DarkIce + + File : LameLibEncoder.cpp + Version : $Revision$ + Author : $Author$ + Location : $RCSFile$ + + Copyright notice: + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +------------------------------------------------------------------------------*/ + +/* ============================================================ include files */ + +#ifdef HAVE_CONFIG_H +#include "configure.h" +#endif + +#ifdef HAVE_STRING_H +#include +#else +#error need string.h +#endif + +#ifdef HAVE_LAME_LIB +#include +#else +#error need lame/lame.h +#endif + + +#include "Exception.h" +#include "Util.h" +#include "LameLibEncoder.h" + + +/* =================================================== local data structures */ + + +/* ================================================ local constants & macros */ + +/*------------------------------------------------------------------------------ + * File identity + *----------------------------------------------------------------------------*/ +static const char fileid[] = "$Id$"; + + +/* =============================================== local function prototypes */ + + +/* ============================================================= module code */ + +/*------------------------------------------------------------------------------ + * Open an encoding session + *----------------------------------------------------------------------------*/ +bool +LameLibEncoder :: open ( void ) + throw ( Exception ) +{ + if ( isOpen() ) { + close(); + } + + lameGlobalFlags = lame_init(); + + // ugly lame returns -1 in a pointer on allocation errors + if ( !lameGlobalFlags || ((int)lameGlobalFlags) == -1 ) { + throw Exception( __FILE__, __LINE__, + "lame lib init error", + (int) lameGlobalFlags); + } + + if ( 0 > lame_set_num_channels( lameGlobalFlags, getInChannel()) ) { + throw Exception( __FILE__, __LINE__, + "lame lib setting channels error", + getInChannel() ); + } + + reportEvent( 5, + "set lame channels", + lame_get_num_channels( lameGlobalFlags)); + + if ( 0 > lame_set_in_samplerate( lameGlobalFlags, getInSampleRate()) ) { + throw Exception( __FILE__, __LINE__, + "lame lib setting input sample rate error", + getInSampleRate() ); + } + + reportEvent( 5, + "set lame in sample rate", + lame_get_in_samplerate( lameGlobalFlags)); + + if ( 0 > lame_set_out_samplerate( lameGlobalFlags, getOutSampleRate()) ) { + throw Exception( __FILE__, __LINE__, + "lame lib setting output sample rate error", + getOutSampleRate() ); + } + + reportEvent( 5, + "set lame out sample rate", + lame_get_out_samplerate( lameGlobalFlags)); + + if ( 0 > lame_set_brate( lameGlobalFlags, getOutBitrate()) ) { + throw Exception( __FILE__, __LINE__, + "lame lib setting output bit rate error", + getOutBitrate() ); + } + + reportEvent( 5, "set lame bit rate", lame_get_brate( lameGlobalFlags)); + + if ( lowpass ) { + if ( 0 > lame_set_lowpassfreq( lameGlobalFlags, lowpass) ) { + throw Exception( __FILE__, __LINE__, + "lame lib setting lowpass frequency error", + lowpass ); + } + + reportEvent( 5, + "set lame lowpass frequency", + lame_get_lowpassfreq( lameGlobalFlags)); + } + + if ( highpass ) { + if ( 0 > lame_set_highpassfreq( lameGlobalFlags, highpass) ) { + throw Exception( __FILE__, __LINE__, + "lame lib setting highpass frequency error", + lowpass ); + } + + reportEvent( 5, + "set lame highpass frequency", + lame_get_highpassfreq( lameGlobalFlags)); + } + + // not configurable lame settings + + if ( 0 > lame_set_quality( lameGlobalFlags, 2) ) { + throw Exception( __FILE__, __LINE__, + "lame lib setting quality error", + 2 ); + } + + reportEvent( 5, "set lame quality", lame_get_quality( lameGlobalFlags)); + + if ( 0 > lame_set_mode( lameGlobalFlags, JOINT_STEREO) ) { + throw Exception( __FILE__, __LINE__, + "lame lib setting mode error", + JOINT_STEREO ); + } + + reportEvent( 5, "set lame mode", lame_get_mode( lameGlobalFlags)); + + if ( 0 > lame_set_exp_nspsytune( lameGlobalFlags, 1) ) { + throw Exception( __FILE__, __LINE__, + "lame lib setting psycho acoustic model error"); + } + + reportEvent( 5, + "set lame psycho acoustic model", + lame_get_exp_nspsytune( lameGlobalFlags)); + + if ( 0 > lame_set_error_protection( lameGlobalFlags, 1) ) { + throw Exception( __FILE__, __LINE__, + "lame lib setting error protection error", + 1 ); + } + + reportEvent( 5, + "set lame error protection", + lame_get_error_protection( lameGlobalFlags)); + + // let lame init its own params based on our settings + if ( 0 > lame_init_params( lameGlobalFlags) ) { + throw Exception( __FILE__, __LINE__, + "lame lib initializing params error" ); + } + + lame_print_config( lameGlobalFlags); + + // open the underlying sink + if ( !sink->open() ) { + throw Exception( __FILE__, __LINE__, + "lame lib opening underlying sink error"); + } + + return true; +} + + +/*------------------------------------------------------------------------------ + * Write data to the encoder + *----------------------------------------------------------------------------*/ +unsigned int +LameLibEncoder :: write ( const void * buf, + unsigned int len ) throw ( Exception ) +{ + if ( !isOpen() ) { + return 0; + } + + unsigned char * b = (unsigned char*) buf; + unsigned int processed = len - (len % 4); + unsigned int nSamples = processed / 4; + short int leftBuffer[nSamples]; + short int rightBuffer[nSamples]; + unsigned int i, j; + + for ( i = 0, j = 0; i < processed; ) { + unsigned short int value; + + value = b[i++]; + value += b[i++] << 8; + leftBuffer[j] = (short int) value; + + value = b[i++]; + value += b[i++] << 8; + rightBuffer[j] = (short int) value; + + ++j; + } + + // data chunk size estimate according to lame documentation + unsigned int mp3Size = (unsigned int) (1.25 * nSamples + 7200); + unsigned char mp3Buf[mp3Size]; + int ret; + + ret = lame_encode_buffer( lameGlobalFlags, + leftBuffer, + rightBuffer, + nSamples, + mp3Buf, + mp3Size ); + + if ( ret < 0 ) { + reportEvent( 3, "lame encoding error", ret); + return 0; + } + + sink->write( mp3Buf, ret); + + return processed; +} + + +/*------------------------------------------------------------------------------ + * Flush the data from the encoder + *----------------------------------------------------------------------------*/ +void +LameLibEncoder :: flush ( void ) + throw ( Exception ) +{ + if ( !isOpen() ) { + return; + } + + // data chunk size estimate according to lame documentation + unsigned int mp3Size = 7200; + unsigned char mp3Buf[mp3Size]; + int ret; + + ret = lame_encode_flush( lameGlobalFlags, mp3Buf, mp3Size ); + + sink->write( mp3Buf, ret); +} + + +/*------------------------------------------------------------------------------ + * Close the encoding session + *----------------------------------------------------------------------------*/ +void +LameLibEncoder :: close ( void ) throw ( Exception ) +{ + if ( isOpen() ) { + flush(); + lame_close( lameGlobalFlags); + lameGlobalFlags = 0; + } +} + + + +/*------------------------------------------------------------------------------ + + $Source$ + + $Log$ + Revision 1.1 2001/08/26 20:44:30 darkeye + removed external command-line encoder support + replaced it with a shared-object support for lame with the possibility + of static linkage + + + +------------------------------------------------------------------------------*/ + diff --git a/darkice/trunk/src/LameLibEncoder.h b/darkice/trunk/src/LameLibEncoder.h new file mode 100644 index 0000000..4dd29a9 --- /dev/null +++ b/darkice/trunk/src/LameLibEncoder.h @@ -0,0 +1,437 @@ +/*------------------------------------------------------------------------------ + + Copyright (c) 2000 Tyrell Corporation. All rights reserved. + + Tyrell DarkIce + + File : LameLibEncoder.h + Version : $Revision$ + Author : $Author$ + Location : $RCSFile$ + + Copyright notice: + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +------------------------------------------------------------------------------*/ +#ifndef LAME_LIB_ENCODER_H +#define LAME_LIB_ENCODER_H + +#ifndef __cplusplus +#error This is a C++ include file +#endif + + +/* ============================================================ include files */ + +#ifdef HAVE_CONFIG_H +#include "configure.h" +#endif + +#ifdef HAVE_LAME_LIB +#include +#else +#error need lame/lame.h +#endif + + +#include "Ref.h" +#include "Exception.h" +#include "Reporter.h" +#include "AudioEncoder.h" +#include "Sink.h" + + +/* ================================================================ constants */ + + +/* =================================================================== macros */ + + +/* =============================================================== data types */ + +/** + * A class representing the lame encoder linked as a shared object or as + * a static library. + * + * @author $Author$ + * @version $Revision$ + */ +class LameLibEncoder : public AudioEncoder, public virtual Reporter, + public Sink +{ + private: + + /** + * Lame library global flags + */ + lame_global_flags * lameGlobalFlags; + + /** + * The Sink to dump mp3 data to + */ + Ref sink; + + /** + * Highpass filter. Sound frequency in Hz, from where up the + * input is cut. + */ + unsigned int lowpass; + + /** + * Lowpass filter. Sound frequency in Hz, from where down the + * input is cut. + */ + unsigned int highpass; + + /** + * Initialize the object. + * + * @param sink the sink to send mp3 output to + * @param lowpass frequency threshold for the lowpass filter. + * Input above this frequency is cut. + * If 0, lame's default values are used, + * which depends on the out sample rate. + * @param highpass frequency threshold for the highpass filter. + * Input below this frequency is cut. + * If 0, lame's default values are used, + * which depends on the out sample rate. + * @exception Exception + */ + inline void + init ( Sink * sink, + unsigned int lowpass, + unsigned int highpass ) throw ( Exception ) + { + this->sink = sink; + this->lowpass = lowpass; + this->highpass = highpass; + + if ( getInBitsPerSample() != 16 ) { + throw Exception( __FILE__, __LINE__, + "only 16 bits per sample supported"); + } + + if ( getOutSampleRate() != getInSampleRate() ) { + throw Exception( __FILE__, __LINE__, + "different in and out sample rate not supported"); + } + + if ( getInChannel() != getOutChannel() ) { + throw Exception( __FILE__, __LINE__, + "different in and out channels not supported"); + } + } + + /** + * De-initialize the object. + * + * @exception Exception + */ + inline void + strip ( void ) throw ( Exception ) + { + } + + + protected: + + /** + * Default constructor. Always throws an Exception. + * + * @exception Exception + */ + inline + LameLibEncoder ( void ) throw ( Exception ) + { + throw Exception( __FILE__, __LINE__); + } + + + public: + + /** + * Constructor. + * + * @param sink the sink to send mp3 output to + * @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 outBitrate bit rate of the output (bits/sec). + * @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. + * @param lowpass frequency threshold for the lowpass filter. + * Input above this frequency is cut. + * If 0, lame's default values are used, + * which depends on the out sample rate. + * @param highpass frequency threshold for the highpass filter. + * Input below this frequency is cut. + * If 0, lame's default values are used, + * which depends on the out sample rate. + * @exception Exception + */ + inline + LameLibEncoder ( Sink * sink, + unsigned int inSampleRate, + unsigned int inBitsPerSample, + unsigned int inChannel, + unsigned int outBitrate, + unsigned int outSampleRate = 0, + unsigned int outChannel = 0, + unsigned int lowpass = 0, + unsigned int highpass = 0 ) + throw ( Exception ) + + : AudioEncoder ( inSampleRate, + inBitsPerSample, + inChannel, + outBitrate, + outSampleRate, + outChannel ) + { + init( sink, lowpass, highpass ); + } + + /** + * Constructor. + * + * @param sink the sink to send mp3 output to + * @param as get input sample rate, bits per sample and channels + * from this AudioSource. + * @param outBitrate bit rate of the output (bits/sec). + * @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. + * @param lowpass frequency threshold for the lowpass filter. + * Input above this frequency is cut. + * If 0, lame's default values are used, + * which depends on the out sample rate. + * @param highpass frequency threshold for the highpass filter. + * Input below this frequency is cut. + * If 0, lame's default values are used, + * which depends on the out sample rate. + * @exception Exception + */ + inline + LameLibEncoder ( Sink * sink, + const AudioSource * as, + unsigned int outBitrate, + unsigned int outSampleRate = 0, + unsigned int outChannel = 0, + unsigned int lowpass = 0, + unsigned int highpass = 0 ) + throw ( Exception ) + + : AudioEncoder ( as, + outBitrate, + outSampleRate, + outChannel ) + { + init( sink, lowpass, highpass ); + } + + /** + * Copy constructor. + * + * @param encoder the LameLibEncoder to copy. + */ + inline + LameLibEncoder ( const LameLibEncoder & encoder ) + throw ( Exception ) + : AudioEncoder( encoder ) + { + init( encoder.sink.get(), encoder.lowpass, encoder.highpass ); + } + + /** + * Destructor. + * + * @exception Exception + */ + inline virtual + ~LameLibEncoder ( void ) throw ( Exception ) + { + if ( isOpen() ) { + close(); + } + strip(); + } + + /** + * Assignment operator. + * + * @param encoder the LameLibEncoder to assign this to. + * @return a reference to this LameLibEncoder. + * @exception Exception + */ + inline virtual LameLibEncoder & + operator= ( const LameLibEncoder & encoder ) throw ( Exception ) + { + if ( this != &encoder ) { + strip(); + AudioEncoder::operator=( encoder); + init( encoder.sink.get(), encoder.lowpass, encoder.highpass ); + } + + return *this; + } + + /** + * Get the version string of the underlying lame library. + * + * @return the version string of the underlying lame library. + */ + inline const char * + getLameVersion( void ) + { + return get_lame_version(); + } + + /** + * Check wether encoding is in progress. + * + * @return true if encoding is in progress, false otherwise. + */ + inline virtual bool + isRunning ( void ) const throw () + { + return isOpen(); + } + + /** + * Start encoding. This function returns as soon as possible, + * with encoding started in the background. + * + * @return true if encoding has started, false otherwise. + * @exception Exception + */ + inline virtual bool + start ( void ) throw ( Exception ) + { + return open(); + } + + /** + * Stop encoding. Stops the encoding running in the background. + * + * @exception Exception + */ + inline virtual void + stop ( void ) throw ( Exception ) + { + return close(); + } + + /** + * Open an encoding session. + * + * @return true if opening was successfull, false otherwise. + * @exception Exception + */ + virtual bool + open ( void ) throw ( Exception ); + + /** + * Check if the encoding session is open. + * + * @return true if the encoding session is open, false otherwise. + */ + inline virtual bool + isOpen ( void ) const throw () + { + return lameGlobalFlags != 0; + } + + /** + * Check if the encoder is ready to accept data. + * + * @param sec the maximum seconds to block. + * @param usec micro seconds to block after the full seconds. + * @return true if the encoder is ready to accept data, + * false otherwise. + * @exception Exception + */ + inline virtual bool + canWrite ( unsigned int sec, + unsigned int usec ) throw ( Exception ) + { + if ( !isOpen() ) { + return false; + } + + return true; + } + + /** + * Write data to the encoder. + * Buf is expected to be a sequence of big-endian 16 bit values, + * with left and right channels interleaved. Len is the number of + * bytes, must be a multiple of 4. + * + * @param buf the data to write. + * @param len number of bytes to write from buf. + * @return the number of bytes written (may be less than len). + * @exception Exception + */ + virtual unsigned int + write ( const void * buf, + unsigned int len ) throw ( Exception ); + + /** + * Flush all data that was written to the encoder to the underlying + * connection. + * + * @exception Exception + */ + virtual void + flush ( void ) throw ( Exception ); + + /** + * Close the encoding session. + * + * @exception Exception + */ + virtual void + close ( void ) throw ( Exception ); +}; + + +/* ================================================= external data structures */ + + +/* ====================================================== function prototypes */ + + + +#endif /* LAME_LIB_ENCODER_H */ + + +/*------------------------------------------------------------------------------ + + $Sourc$ + + $Log$ + Revision 1.1 2001/08/26 20:44:30 darkeye + removed external command-line encoder support + replaced it with a shared-object support for lame with the possibility + of static linkage + + + +------------------------------------------------------------------------------*/ + diff --git a/darkice/trunk/src/Makefile.am b/darkice/trunk/src/Makefile.am index 252f7a6..74e631c 100644 --- a/darkice/trunk/src/Makefile.am +++ b/darkice/trunk/src/Makefile.am @@ -1,6 +1,7 @@ bin_PROGRAMS = darkice -INCLUDES = -I../stl +INCLUDES = -I../stl @LAME_INCFLAGS@ CXXFLAGS = -g -Wall +LDADD = @LAME_LDFLAGS@ @LINK_STATIC@ darkice_SOURCES = AudioEncoder.h\ AudioSource.h\ @@ -14,22 +15,12 @@ darkice_SOURCES = AudioEncoder.h\ DarkIce.h\ Exception.cpp\ Exception.h\ - ExternalEncoder.cpp\ - ExternalEncoder.h\ - FileSink.cpp\ - FileSink.h\ - FileSource.cpp\ - FileSource.h\ IceCast.cpp\ IceCast.h\ - LameEncoder.cpp\ - LameEncoder.h\ + LameLibEncoder.cpp\ + LameLibEncoder.h\ OssDspSource.cpp\ OssDspSource.h\ - PipeSink.cpp\ - PipeSink.h\ - PipeSource.cpp\ - PipeSource.h\ Ref.h\ Referable.h\ Sink.h\ diff --git a/darkice/trunk/src/PipeSink.cpp b/darkice/trunk/src/PipeSink.cpp deleted file mode 100644 index 21fe06a..0000000 --- a/darkice/trunk/src/PipeSink.cpp +++ /dev/null @@ -1,144 +0,0 @@ -/*------------------------------------------------------------------------------ - - Copyright (c) 2000 Tyrell Corporation. All rights reserved. - - Tyrell DarkIce - - File : PipeSink.cpp - Version : $Revision$ - Author : $Author$ - Location : $Source$ - - Copyright notice: - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -------------------------------------------------------------------------------*/ - -/* ============================================================ include files */ - -#ifdef HAVE_CONFIG_H -#include "configure.h" -#endif - -#ifdef HAVE_SYS_STAT_H -#include -#else -#error need sys/stat.h -#endif - -#ifdef HAVE_FCNTL_H -#include -#else -#error need fcntl.h -#endif - -#ifdef HAVE_SYS_TYPES_H -#include -#else -#error need sys/types.h -#endif - -#ifdef HAVE_ERRNO_H -#include -#else -#error need errno.h -#endif - - -#include "Exception.h" -#include "PipeSink.h" - - -/* =================================================== local data structures */ - - -/* ================================================ local constants & macros */ - -/*------------------------------------------------------------------------------ - * File identity - *----------------------------------------------------------------------------*/ -static const char fileid[] = "$Id$"; - - -/* =============================================== local function prototypes */ - - -/* ============================================================= module code */ - -/*------------------------------------------------------------------------------ - * Create a pipe - *----------------------------------------------------------------------------*/ -bool -PipeSink :: create ( void ) throw ( Exception ) -{ - if ( isOpen() ) { - return false; - } - - if ( mkfifo( getFileName(), S_IRUSR | S_IWUSR) == -1 ) { - if ( errno == EEXIST ) { - return true; - } - throw Exception( __FILE__, __LINE__, "mkfifo error", errno); - } - - return true; -} - - -/*------------------------------------------------------------------------------ - * Open the file - *----------------------------------------------------------------------------*/ -bool -PipeSink :: open ( void ) throw ( Exception ) -{ - if ( isOpen() ) { - return false; - } - - if ( (fileDescriptor = ::open( getFileName(), O_WRONLY, 0)) == -1 ) { - fileDescriptor = 0; - return false; - } - - return true; -} - - - -/*------------------------------------------------------------------------------ - - $Source$ - - $Log$ - Revision 1.5 2000/11/17 15:50:48 darkeye - added -Wall flag to compiler and eleminated new warnings - - Revision 1.4 2000/11/11 12:33:13 darkeye - added kdoc-style documentation - - Revision 1.3 2000/11/10 20:10:46 darkeye - changed from non-blocking to blocking - - Revision 1.2 2000/11/05 14:08:28 darkeye - changed builting to an automake / autoconf environment - - Revision 1.1.1.1 2000/11/05 10:05:53 darkeye - initial version - - -------------------------------------------------------------------------------*/ - diff --git a/darkice/trunk/src/PipeSink.h b/darkice/trunk/src/PipeSink.h deleted file mode 100644 index 4904519..0000000 --- a/darkice/trunk/src/PipeSink.h +++ /dev/null @@ -1,174 +0,0 @@ -/*------------------------------------------------------------------------------ - - Copyright (c) 2000 Tyrell Corporation. All rights reserved. - - Tyrell DarkIce - - File : PipeSink.h - Version : $Revision$ - Author : $Author$ - Location : $Source$ - - Copyright notice: - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -------------------------------------------------------------------------------*/ -#ifndef PIPE_SINK_H -#define PIPE_SINK_H - -#ifndef __cplusplus -#error This is a C++ include file -#endif - - -/* ============================================================ include files */ - -#include "FileSink.h" - - -/* ================================================================ constants */ - - -/* =================================================================== macros */ - - -/* =============================================================== data types */ - -/** - * FIFO pipe data output - * - * @author $Author$ - * @version $Revision$ - */ -class PipeSink : public FileSink -{ - private: - - - protected: - - /** - * Default constructor. Always throws an Exception. - * - * @exception Exception - */ - inline - PipeSink ( void ) throw ( Exception ) - { - throw Exception( __FILE__, __LINE__); - } - - - public: - - /** - * Constructor by a pipe name. - * - * @param name name of the pipe to be represented by the object. - * @exception Exception - */ - inline - PipeSink ( const char * name ) throw ( Exception ) - : FileSink( name ) - { - } - - /** - * Copy constructor. - * - * @param fsink the PipeSink to copy. - * @exception Exception - */ - inline - PipeSink ( const PipeSink & ps ) throw ( Exception ) - : FileSink( ps ) - { - } - - /** - * Assignment operator. - * - * @param ps the PipeSink to assign to this object. - * @return a reference to this object. - * @exception Exception - */ - inline virtual PipeSink & - operator= ( const PipeSink & ps ) throw ( Exception ) - { - if ( this != &ps ) { - FileSink::operator=( ps ); - } - - return *this; - } - - /** - * Destructor. - * - * @exception Exception - */ - virtual inline - ~PipeSink( void ) throw ( Exception ) - { - } - - /** - * Create the pipe. - * - * @return true if creation was successful, false otherwise. - * @exception Exception - */ - virtual bool - create ( void ) throw ( Exception ); - - /** - * Open the pipe. - * - * @return true if opening was successful, false otherwise. - * @exception Exception - */ - virtual bool - open ( void ) throw ( Exception ); -}; - - -/* ================================================= external data structures */ - - -/* ====================================================== function prototypes */ - - - -#endif /* PIPE_SINK_H */ - - -/*------------------------------------------------------------------------------ - - $Source$ - - $Log$ - Revision 1.3 2000/11/11 12:33:13 darkeye - added kdoc-style documentation - - Revision 1.2 2000/11/05 17:37:24 darkeye - removed clone() functions - - Revision 1.1.1.1 2000/11/05 10:05:53 darkeye - initial version - - -------------------------------------------------------------------------------*/ - diff --git a/darkice/trunk/src/PipeSource.cpp b/darkice/trunk/src/PipeSource.cpp deleted file mode 100644 index 3a0b1a9..0000000 --- a/darkice/trunk/src/PipeSource.cpp +++ /dev/null @@ -1,122 +0,0 @@ -/*------------------------------------------------------------------------------ - - Copyright (c) 2000 Tyrell Corporation. All rights reserved. - - Tyrell DarkIce - - File : PipeSource.cpp - Version : $Revision$ - Author : $Author$ - Location : $Source$ - - Copyright notice: - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -------------------------------------------------------------------------------*/ - -/* ============================================================ include files */ - -#ifdef HAVE_CONFIG_H -#include "configure.h" -#endif - -#ifdef HAVE_SYS_STAT_H -#include -#else -#error need sys/stat.h -#endif - -#ifdef HAVE_FCNTL_H -#include -#else -#error need fcntl.h -#endif - -#ifdef HAVE_SYS_TYPES_H -#include -#else -#error need sys/types.h -#endif - -#ifdef HAVE_ERRNO_H -#include -#else -#error need errno.h -#endif - - -#include "Exception.h" -#include "PipeSource.h" - - -/* =================================================== local data structures */ - - -/* ================================================ local constants & macros */ - -/*------------------------------------------------------------------------------ - * File identity - *----------------------------------------------------------------------------*/ -static const char fileid[] = "$Id$"; - - -/* =============================================== local function prototypes */ - - -/* ============================================================= module code */ - -/*------------------------------------------------------------------------------ - * Create a pipe - *----------------------------------------------------------------------------*/ -bool -PipeSource :: create ( void ) throw ( Exception ) -{ - if ( isOpen() ) { - return false; - } - - if ( mkfifo( getFileName(), S_IRUSR | S_IWUSR) == -1 ) { - if ( errno == EEXIST ) { - return true; - } - throw Exception( __FILE__, __LINE__, "mkfifo error", errno); - } - - return true; -} - - - -/*------------------------------------------------------------------------------ - - $Source$ - - $Log$ - Revision 1.4 2000/11/17 15:50:48 darkeye - added -Wall flag to compiler and eleminated new warnings - - Revision 1.3 2000/11/12 13:31:40 darkeye - added kdoc-style documentation comments - - Revision 1.2 2000/11/05 14:08:28 darkeye - changed builting to an automake / autoconf environment - - Revision 1.1.1.1 2000/11/05 10:05:53 darkeye - initial version - - -------------------------------------------------------------------------------*/ - diff --git a/darkice/trunk/src/PipeSource.h b/darkice/trunk/src/PipeSource.h deleted file mode 100644 index 66540ce..0000000 --- a/darkice/trunk/src/PipeSource.h +++ /dev/null @@ -1,169 +0,0 @@ -/*------------------------------------------------------------------------------ - - Copyright (c) 2000 Tyrell Corporation. All rights reserved. - - Tyrell DarkIce - - File : PipeSource.h - Version : $Revision$ - Author : $Author$ - Location : $Source$ - - Abstract : - - - Copyright notice: - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - USA. - -------------------------------------------------------------------------------*/ -#ifndef PIPE_SOURCE_H -#define PIPE_SOURCE_H - -#ifndef __cplusplus -#error This is a C++ include file -#endif - - -/* ============================================================ include files */ - -#include "FileSource.h" - - -/* ================================================================ constants */ - - -/* =================================================================== macros */ - - -/* =============================================================== data types */ - -/** - * FIFO pipe data input - * - * @author $Author$ - * @version $Revision$ - */ -class PipeSource : public FileSource -{ - private: - - - protected: - - /** - * Default constructor. Always throws an Exception. - * - * @exception Exception - */ - inline - PipeSource ( void ) throw ( Exception ) - { - throw Exception( __FILE__, __LINE__); - } - - - public: - - /** - * Constructor by a file name. - * - * @param name name of the file to be represented by the object. - * @exception Exception - */ - inline - PipeSource ( const char * name ) throw ( Exception ) - : FileSource( name ) - { - } - - /** - * Copy constructor. - * - * @param ps the PipeSource to copy. - * @exception Exception - */ - inline - PipeSource ( const PipeSource & ps ) throw ( Exception ) - : FileSource( ps ) - { - } - - /** - * Assignment operator. - * - * @param ps the PipeSource to assign to this object. - * @return a reference to this object. - * @exception Exception - */ - inline virtual PipeSource & - operator= ( const PipeSource & ps ) throw ( Exception ) - { - if ( this != &ps ) { - FileSource::operator=( ps ); - } - - return *this; - } - - /** - * Destructor. - * - * @exception Exception - */ - virtual inline - ~PipeSource( void ) throw ( Exception ) - { - } - - /** - * Create the pipe. - * - * @return true if creation was successful, false otherwise. - * @exception Exception - */ - virtual bool - create ( void ) throw ( Exception ); -}; - - -/* ================================================= external data structures */ - - -/* ====================================================== function prototypes */ - - - -#endif /* PIPE_SOURCE_H */ - - -/*------------------------------------------------------------------------------ - - $Source$ - - $Log$ - Revision 1.3 2000/11/12 13:31:40 darkeye - added kdoc-style documentation comments - - Revision 1.2 2000/11/05 17:37:24 darkeye - removed clone() functions - - Revision 1.1.1.1 2000/11/05 10:05:53 darkeye - initial version - - -------------------------------------------------------------------------------*/ - diff --git a/darkice/trunk/update-conf b/darkice/trunk/update-conf index 6d775f1..9e5b1c9 100755 --- a/darkice/trunk/update-conf +++ b/darkice/trunk/update-conf @@ -3,5 +3,6 @@ # Update the automake / autoconf configuration # -automake && aclocal && autoconf && ./configure +rm config.* configure configure.h aclocal.m4 +autoheader && automake && aclocal && autoconf && ./configure