diff --git a/audio/darkice/Makefile b/audio/darkice/Makefile index daf890c43814..2a1ea436caf6 100644 --- a/audio/darkice/Makefile +++ b/audio/darkice/Makefile @@ -7,8 +7,7 @@ # PORTNAME= darkice -PORTVERSION= 1.0 -PORTREVISION= 3 +PORTVERSION= 1.1 CATEGORIES= audio net MASTER_SITES= GOOGLE_CODE @@ -36,9 +35,8 @@ USE_RC_SUBR= ${PORTNAME} MAN1= darkice.1 MAN5= darkice.cfg.5 -PLIST_FILES= bin/darkice etc/darkice.cfg.dist -.include +.include .if defined(WITHOUT_VORBIS) CONFIGURE_ARGS+= --without-vorbis @@ -83,6 +81,11 @@ CONFIGURE_ARGS+= --with-aacplus-prefix=${LOCALBASE} --with-samplerate-prefix=${L CONFIGURE_ARGS+= --without-aacplus --without-samplerate .endif +.if defined(WITHOUT_VORBIS) && defined(WITHOUT_LAME) && defined(WITHOUT_TWOLAME) && \ + defined(WITHOUT_FAAC) && defined(WITHOUT_AACPLUS) +IGNORE=at least one of VORBIS,LAME,TWOLAME,FAAC,AACPLUS options must be set +.endif + post-patch: @${REINPLACE_CMD} -e '/test/s|==|=|g'\ -e 's/sbr_main.h/libaacplus\/sbr_main.h/' ${WRKSRC}/configure @@ -95,4 +98,9 @@ do-install: @${INSTALL_MAN} ${WRKSRC}/man/${PORTNAME}.cfg.5 ${MAN5PREFIX}/man/man5 @${CAT} ${PKGMESSAGE} -.include +post-install: + @if [ ! -f ${PREFIX}/etc/darkice.cfg ]; then \ + ${CP} -p ${PREFIX}/etc/darkice.cfg.dist ${PREFIX}/etc/darkice.cfg ; \ + fi + +.include diff --git a/audio/darkice/distinfo b/audio/darkice/distinfo index 6b18851d1d25..ed974f3567eb 100644 --- a/audio/darkice/distinfo +++ b/audio/darkice/distinfo @@ -1,2 +1,2 @@ -SHA256 (darkice-1.0.tar.gz) = 61a05c4dab206c22c3e3d5570ee4841f9c8875241098adf687717e7dcc6df332 -SIZE (darkice-1.0.tar.gz) = 311567 +SHA256 (darkice-1.1.tar.gz) = 170342cb4dbb0b44a62e37d0db1515fa7799c410fc4995bf8f32aaa6614f5f79 +SIZE (darkice-1.1.tar.gz) = 344568 diff --git a/audio/darkice/files/patch-configure.in b/audio/darkice/files/patch-configure.in deleted file mode 100644 index 2e48f4b16bbe..000000000000 --- a/audio/darkice/files/patch-configure.in +++ /dev/null @@ -1,11 +0,0 @@ ---- configure.in.orig 2010-05-10 06:38:57.000000000 +0900 -+++ configure.in 2010-12-29 19:11:40.000000000 +0900 -@@ -166,7 +166,7 @@ - - if test "x${USE_AACPLUS}" = "xyes" ; then - AC_MSG_CHECKING( [for aacplus library at ${CONFIG_AACPLUS_PREFIX}] ) -- LA_SEARCH_LIB( AACPLUS_LIB_LOC, AACPLUS_INC_LOC, libaacplus.a libaacplus.so, sbr_main.h, -+ LA_SEARCH_LIB( AACPLUS_LIB_LOC, AACPLUS_INC_LOC, libaacplus.a libaacplus.so, aacplus.h, - ${CONFIG_AACPLUS_PREFIX}) - if test "x${AACPLUS_LIB_LOC}" != "x" ; then - AC_DEFINE( HAVE_AACPLUS_LIB, 1, [build with aacplus library] ) diff --git a/audio/darkice/files/patch-darkice.cfg b/audio/darkice/files/patch-darkice.cfg deleted file mode 100644 index 59354fe2410d..000000000000 --- a/audio/darkice/files/patch-darkice.cfg +++ /dev/null @@ -1,10 +0,0 @@ ---- darkice.cfg.orig 2010-05-10 05:26:19.000000000 +0900 -+++ darkice.cfg 2010-12-29 19:17:57.000000000 +0900 -@@ -6,6 +6,7 @@ - duration = 60 # duration of encoding, in seconds. 0 means forever - bufferSecs = 5 # size of internal slip buffer, in seconds - reconnect = yes # reconnect to the server(s) if disconnected -+realtime = yes # run the encoder with POSIX realtime priority - - # this section describes the audio input that will be streamed - [input] diff --git a/audio/darkice/files/patch-src_aacPlusEncoder.cpp b/audio/darkice/files/patch-src_aacPlusEncoder.cpp deleted file mode 100644 index 2093b16877f7..000000000000 --- a/audio/darkice/files/patch-src_aacPlusEncoder.cpp +++ /dev/null @@ -1,328 +0,0 @@ ---- src/aacPlusEncoder.cpp.orig 2010-05-10 00:18:48.000000000 +0200 -+++ src/aacPlusEncoder.cpp 2011-01-20 13:39:21.000000000 +0100 -@@ -5,8 +5,8 @@ - Tyrell DarkIce - - File : aacPlusEncoder.cpp -- Version : $Revision: 474 $ -- Author : $Author: rafael@riseup.net $ -+ Version : $Revision$ -+ Author : $Author$ - Location : $HeadURL$ - - Copyright notice: -@@ -51,7 +51,7 @@ - /*------------------------------------------------------------------------------ - * File identity - *----------------------------------------------------------------------------*/ --static const char fileid[] = "$Id: aacPlusEncoder.cpp 474 2010-05-10 01:18:15Z rafael@riseup.net $"; -+static const char fileid[] = "$Id$"; - - - /* =============================================== local function prototypes */ -@@ -76,82 +76,27 @@ - "aacplus lib opening underlying sink error"); - } - -- reportEvent(1, "Using aacplus codec version", "720 3gpp"); -+ reportEvent(1, "Using aacplus codec"); - -- bitrate = getOutBitrate() * 1000; -- bandwidth = 0; -- useParametricStereo = 0; -- numAncDataBytes=0; -- coreWriteOffset = 0; -- envReadOffset = 0; -- writeOffset = INPUT_DELAY*MAX_CHANNELS; -- writtenSamples = 0; -- aacEnc = NULL; -- hEnvEnc=NULL; -- -- /* set up basic parameters for aacPlus codec */ -- AacInitDefaultConfig(&config); -- nChannelsAAC = nChannelsSBR = getOutChannel(); -- -- if ( (getInChannel() == 2) && (bitrate >= 16000) && (bitrate < 44001) ) { -- useParametricStereo = 1; -- nChannelsAAC = 1; -- nChannelsSBR = 2; -- -- reportEvent(10, "use Parametric Stereo"); -- -- envReadOffset = (MAX_DS_FILTER_DELAY + INPUT_DELAY)*MAX_CHANNELS; -- coreWriteOffset = CORE_INPUT_OFFSET_PS; -- writeOffset = envReadOffset; -- } else { -- /* set up 2:1 downsampling */ -- InitIIR21_Resampler(&(IIR21_reSampler[0])); -- InitIIR21_Resampler(&(IIR21_reSampler[1])); -- -- if(IIR21_reSampler[0].delay > MAX_DS_FILTER_DELAY) -- throw Exception(__FILE__, __LINE__, "IIR21 resampler delay is bigger then MAX_DS_FILTER_DELAY"); -- writeOffset += IIR21_reSampler[0].delay*MAX_CHANNELS; -+ encoderHandle = aacplusEncOpen(getOutSampleRate(), -+ getInChannel(), -+ &inputSamples, -+ &maxOutputBytes); -+ -+ aacplusEncConfiguration * aacplusConfig; -+ -+ aacplusConfig = aacplusEncGetCurrentConfiguration(encoderHandle); -+ -+ aacplusConfig->bitRate = getOutBitrate() * 1000; -+ aacplusConfig->bandWidth = lowpass; -+ aacplusConfig->outputFormat = 1; -+ aacplusConfig->inputFormat = AACPLUS_INPUT_16BIT; -+ aacplusConfig->nChannelsOut = getOutChannel(); -+ -+ if (!aacplusEncSetConfiguration(encoderHandle, aacplusConfig)) { -+ throw Exception(__FILE__, __LINE__, -+ "error configuring libaacplus library"); - } -- -- sampleRateAAC = getOutSampleRate(); -- config.bitRate = bitrate; -- config.nChannelsIn=getInChannel(); -- config.nChannelsOut=nChannelsAAC; -- config.bandWidth=bandwidth; -- -- /* set up SBR configuration */ -- if(!IsSbrSettingAvail(bitrate, nChannelsAAC, sampleRateAAC, &sampleRateAAC)) -- throw Exception(__FILE__, __LINE__, "No valid SBR configuration found"); -- -- InitializeSbrDefaults (&sbrConfig); -- sbrConfig.usePs = useParametricStereo; -- -- AdjustSbrSettings( &sbrConfig, -- bitrate, -- nChannelsAAC, -- sampleRateAAC, -- AACENC_TRANS_FAC, -- 24000); -- -- EnvOpen( &hEnvEnc, -- inBuf + coreWriteOffset, -- &sbrConfig, -- &config.bandWidth); -- -- /* set up AAC encoder, now that samling rate is known */ -- config.sampleRate = sampleRateAAC; -- if (AacEncOpen(&aacEnc, config) != 0){ -- AacEncClose(aacEnc); -- throw Exception(__FILE__, __LINE__, "Initialisation of AAC failed !"); -- } -- -- init_plans(); -- -- /* create the ADTS header */ -- adts_hdr(outBuf, &config); -- -- inSamples = AACENC_BLOCKSIZE * getInChannel() * 2; -- - - // initialize the resampling coverter if needed - if ( converter ) { -@@ -159,8 +104,8 @@ - converterData.input_frames = 4096/((getInBitsPerSample() / 8) * getInChannel()); - converterData.data_in = new float[converterData.input_frames*getInChannel()]; - converterData.output_frames = (int) (converterData.input_frames * resampleRatio + 1); -- if ((int) inSamples > getInChannel() * converterData.output_frames) { -- resampledOffset = new float[2 * inSamples]; -+ if ((int) inputSamples > getInChannel() * converterData.output_frames) { -+ resampledOffset = new float[2 * inputSamples]; - } else { - resampledOffset = new float[2 * getInChannel() * converterData.input_frames]; - } -@@ -178,13 +123,9 @@ - } - - aacplusOpen = true; -- reportEvent(10, "bitrate=", bitrate); -- reportEvent(10, "nChannelsIn", getInChannel()); -- reportEvent(10, "nChannelsOut", getOutChannel()); -- reportEvent(10, "nChannelsSBR", nChannelsSBR); -- reportEvent(10, "nChannelsAAC", nChannelsAAC); -- reportEvent(10, "sampleRateAAC", sampleRateAAC); -- reportEvent(10, "inSamples", inSamples); -+ reportEvent(10, "nChannelsAAC", aacplusConfig->nChannelsOut); -+ reportEvent(10, "sampleRateAAC", aacplusConfig->sampleRate); -+ reportEvent(10, "inSamples", inputSamples); - return true; - } - -@@ -199,21 +140,23 @@ - if ( !isOpen() || len == 0) { - return 0; - } -- -+ - unsigned int channels = getInChannel(); - unsigned int bitsPerSample = getInBitsPerSample(); - unsigned int sampleSize = (bitsPerSample / 8) * channels; -+ unsigned char * b = (unsigned char*) buf; - unsigned int processed = len - (len % sampleSize); - unsigned int nSamples = processed / sampleSize; -- unsigned int samples = (unsigned int) nSamples * channels; -- int processedSamples = 0; -- -- -+ unsigned char * aacplusBuf = new unsigned char[maxOutputBytes]; -+ int samples = (int) nSamples * channels; -+ int processedSamples = 0; -+ -+ - - if ( converter ) { - unsigned int converted; - #ifdef HAVE_SRC_LIB -- src_short_to_float_array ((short *) buf, converterData.data_in, samples); -+ src_short_to_float_array ((short *) b, converterData.data_in, samples); - converterData.input_frames = nSamples; - converterData.data_out = resampledOffset + (resampledOffsetSize * channels); - int srcError = src_process (converter, &converterData); -@@ -224,7 +167,6 @@ - int inCount = nSamples; - short int * shortBuffer = new short int[samples]; - int outCount = (int) (inCount * resampleRatio); -- unsigned char * b = (unsigned char*) buf; - Util::conv( bitsPerSample, b, processed, shortBuffer, isInBigEndian()); - converted = converter->resample( inCount, - outCount+1, -@@ -235,18 +177,27 @@ - resampledOffsetSize += converted; - - // encode samples (if enough) -- while(resampledOffsetSize - processedSamples >= inSamples/channels) { -+ while(resampledOffsetSize - processedSamples >= inputSamples/channels) { -+ int outputBytes; - #ifdef HAVE_SRC_LIB -- short *shortData = new short[inSamples]; -+ short *shortData = new short[inputSamples]; - src_float_to_short_array(resampledOffset + (processedSamples * channels), -- shortData, inSamples) ; -- -- encodeAacSamples (shortData, inSamples, channels); -+ shortData, inputSamples) ; -+ outputBytes = aacplusEncEncode(encoderHandle, -+ (int32_t*) shortData, -+ inputSamples, -+ aacplusBuf, -+ maxOutputBytes); - delete [] shortData; - #else -- encodeAacSamples (&resampledOffset[processedSamples*channels], inSamples, channels); -+ outputBytes = aacplusEncEncode(encoderHandle, -+ (int32_t*) &resampledOffset[processedSamples*channels], -+ inputSamples, -+ aacplusBuf, -+ maxOutputBytes); - #endif -- processedSamples+=inSamples/channels; -+ getSink()->write(aacplusBuf, outputBytes); -+ processedSamples+=inputSamples/channels; - } - - if (processedSamples && (int) resampledOffsetSize >= processedSamples) { -@@ -262,70 +213,27 @@ - #endif - } - } else { -- encodeAacSamples ((short *) buf, samples, channels); -- } -+ while (processedSamples < samples) { -+ int outputBytes; -+ int inSamples = samples - processedSamples < (int) inputSamples -+ ? samples - processedSamples -+ : inputSamples; -+ -+ outputBytes = aacplusEncEncode(encoderHandle, -+ (int32_t*) (b + processedSamples/sampleSize), -+ inSamples, -+ aacplusBuf, -+ maxOutputBytes); -+ getSink()->write(aacplusBuf, outputBytes); - -- return samples; --} -- --void --aacPlusEncoder :: encodeAacSamples (short *TimeDataPcm, unsigned int samples, int channels) -- throw ( Exception ) --{ -- unsigned int i; -- int ch, outSamples, numOutBytes; -- -- for (i=0; iwrite(outBuf, numOutBytes+ADTS_HEADER_SIZE); -+ processedSamples += inSamples; -+ } - } -- -- writtenSamples=0; - -- return; -+ delete[] aacplusBuf; -+ -+// return processedSamples; -+ return samples; - } - - /*------------------------------------------------------------------------------ -@@ -352,12 +260,7 @@ - if ( isOpen() ) { - flush(); - -- destroy_plans(); -- AacEncClose(aacEnc); -- if (hEnvEnc) { -- EnvClose(hEnvEnc); -- } -- -+ aacplusEncClose(encoderHandle); - aacplusOpen = false; - - sink->close(); diff --git a/audio/darkice/files/patch-src_aacPlusEncoder.h b/audio/darkice/files/patch-src_aacPlusEncoder.h deleted file mode 100644 index b77150ce5a15..000000000000 --- a/audio/darkice/files/patch-src_aacPlusEncoder.h +++ /dev/null @@ -1,194 +0,0 @@ ---- src/aacPlusEncoder.h.orig 2010-05-10 00:18:48.000000000 +0200 -+++ src/aacPlusEncoder.h 2011-01-20 13:41:06.000000000 +0100 -@@ -5,8 +5,8 @@ - Tyrell DarkIce - - File : aacPlusEncoder.h -- Version : $Revision: 474 $ -- Author : $Author: rafael@riseup.net $ -+ Version : $Revision$ -+ Author : $Author$ - Location : $HeadURL$ - - Copyright notice: -@@ -41,18 +41,7 @@ - #endif - - #ifdef HAVE_AACPLUS_LIB --extern "C" { --#include --#include --#include --#include -- --#include -- --#include --#include --#include --} -+#include - #else - #error configure with aacplus - #endif -@@ -83,16 +72,10 @@ - /** - * A class representing aacplus AAC+ encoder. - * -- * @author $Author: rafael@riseup.net $ -- * @version $Revision: 474 $ -+ * @author $Author$ -+ * @version $Revision$ - */ - --#define CORE_DELAY (1600) --#define INPUT_DELAY ((CORE_DELAY)*2 +6*64-2048+1) /* ((1600 (core codec)*2 (multi rate) + 6*64 (sbr dec delay) - 2048 (sbr enc delay) + magic*/ --#define MAX_DS_FILTER_DELAY 16 /* the additional max resampler filter delay (source fs)*/ -- --#define CORE_INPUT_OFFSET_PS (0) /* (96-64) makes AAC still some 64 core samples too early wrt SBR ... maybe -32 would be even more correct, but 1024-32 would need additional SBR bitstream delay by one frame */ -- - class aacPlusEncoder : public AudioEncoder, public virtual Reporter - { - private: -@@ -124,31 +107,26 @@ - */ - Ref sink; - -- float inBuf[(AACENC_BLOCKSIZE*2 + MAX_DS_FILTER_DELAY + INPUT_DELAY)*MAX_CHANNELS]; -- char outBuf[(6144/8)*MAX_CHANNELS+ADTS_HEADER_SIZE]; -- IIR21_RESAMPLER IIR21_reSampler[MAX_CHANNELS]; -- -- AACENC_CONFIG config; -- -- int nChannelsAAC, nChannelsSBR; -- unsigned int sampleRateAAC; -- -- int bitrate; -- int bandwidth; -- -- unsigned int numAncDataBytes; -- unsigned char ancDataBytes[MAX_PAYLOAD_SIZE]; -- -- bool useParametricStereo; -- int coreWriteOffset; -- int envReadOffset; -- int writeOffset; -- struct AAC_ENCODER *aacEnc; -- unsigned int inSamples; -- unsigned int writtenSamples; -- -- HANDLE_SBR_ENCODER hEnvEnc; -- sbrConfiguration sbrConfig; -+ /** -+ * The handle to the AAC+ encoder instance. -+ */ -+ aacplusEncHandle encoderHandle; -+ -+ /** -+ * The maximum number of input samples to supply to the encoder. -+ */ -+ unsigned long inputSamples; -+ -+ /** -+ * The maximum number of output bytes the encoder returns in one call. -+ */ -+ unsigned long maxOutputBytes; -+ -+ /** -+ * Lowpass filter. Sound frequency in Hz, from where up the -+ * input is cut. -+ */ -+ int lowpass; - - /** - * Initialize the object. -@@ -157,10 +135,11 @@ - * @exception Exception - */ - inline void -- init ( Sink * sink) throw (Exception) -+ init ( Sink * sink, int lowpass) throw (Exception) - { - this->aacplusOpen = false; - this->sink = sink; -+ this->lowpass = lowpass; - - /* TODO: if we have float as input, we don't need conversion */ - if ( getInBitsPerSample() != 16 && getInBitsPerSample() != 32 ) { -@@ -179,11 +158,6 @@ - "unsupported number of output channels for the encoder", - getOutChannel() ); - } -- /* TODO: this will be neede when we implement mono aac+ encoding */ -- if ( getInChannel() != getOutChannel() ) { -- throw Exception( __FILE__, __LINE__, -- "input channels and output channels do not match"); -- } - - if ( getOutSampleRate() == getInSampleRate() ) { - resampleRatio = 1; -@@ -237,17 +211,6 @@ - "specified bits per sample with samplerate conversion not supported", - getInBitsPerSample() ); - } -- -- bitrate = getOutBitrate() * 1000; -- bandwidth = 0; -- useParametricStereo = 0; -- numAncDataBytes=0; -- coreWriteOffset = 0; -- envReadOffset = 0; -- writeOffset = INPUT_DELAY*MAX_CHANNELS; -- writtenSamples = 0; -- aacEnc = NULL; -- hEnvEnc=NULL; - } - - /** -@@ -269,10 +232,6 @@ - } - } - -- void -- encodeAacSamples (short *TimeDataPcm, unsigned int samples, int channels) -- throw ( Exception ); -- - protected: - - /** -@@ -335,7 +294,7 @@ - outSampleRate, - outChannel ) - { -- init( sink); -+ init( sink, lowpass); - } - - /** -@@ -376,7 +335,7 @@ - outSampleRate, - outChannel ) - { -- init( sink); -+ init( sink, lowpass ); - } - - /** -@@ -389,7 +348,7 @@ - throw ( Exception ) - : AudioEncoder( encoder ) - { -- init( encoder.sink.get()); -+ init( encoder.sink.get(), encoder.lowpass); - } - - -@@ -420,7 +379,7 @@ - if ( this != &encoder ) { - strip(); - AudioEncoder::operator=( encoder); -- init( encoder.sink.get()); -+ init( encoder.sink.get(), encoder.lowpass); - } - - return *this; diff --git a/audio/darkice/pkg-descr b/audio/darkice/pkg-descr index 976cb4aa812b..c91e1319d1e2 100644 --- a/audio/darkice/pkg-descr +++ b/audio/darkice/pkg-descr @@ -17,4 +17,4 @@ DarkIce can send the encoded stream to the following streaming servers: Darwin Streaming Server archive the encoded audio in files -WWW: http://code.google.com/p/darkice/ +WWW: http://darkice.org/ diff --git a/audio/darkice/pkg-plist b/audio/darkice/pkg-plist new file mode 100644 index 000000000000..26096d569fae --- /dev/null +++ b/audio/darkice/pkg-plist @@ -0,0 +1,4 @@ +bin/darkice +@unexec if cmp -s %D/etc/darkice.cfg.dist %D/etc/darkice.cfg; then rm -f %D/etc/darkice.cfg; fi +etc/darkice.cfg.dist +@exec if [ ! -f %D/etc/darkice.cfg ] ; then cp -p %D/%F %B/darkice.cfg; fi