From owner-freebsd-ports-bugs@FreeBSD.ORG Fri Nov 4 12:10:08 2011 Return-Path: Delivered-To: freebsd-ports-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 207061065673 for ; Fri, 4 Nov 2011 12:10:08 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id EA7818FC16 for ; Fri, 4 Nov 2011 12:10:07 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.4/8.14.4) with ESMTP id pA4CA7Bv021686 for ; Fri, 4 Nov 2011 12:10:07 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.4/8.14.4/Submit) id pA4CA7O6021685; Fri, 4 Nov 2011 12:10:07 GMT (envelope-from gnats) Resent-Date: Fri, 4 Nov 2011 12:10:07 GMT Resent-Message-Id: <201111041210.pA4CA7O6021685@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-ports-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, takefu@airport.fm Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8FFB71065678 for ; Fri, 4 Nov 2011 12:04:54 +0000 (UTC) (envelope-from takefu@airport.fm) Received: from ae-osaka.co.jp (unknown [IPv6:2001:3e0:4ec:a000::1]) by mx1.freebsd.org (Postfix) with ESMTP id 3DCB88FC08 for ; Fri, 4 Nov 2011 12:04:53 +0000 (UTC) Received: from ae-osaka.co.jp (localhost.ae-osaka.co.jp [127.0.0.1]) by ae-osaka.co.jp (Postfix) with ESMTP id 76E7211465 for ; Fri, 4 Nov 2011 21:04:48 +0900 (JST) Received: from [IPv6:2001:3e0:4ec:a011:8070:161:7038:4836] (unknown [IPv6:2001:3e0:4ec:a011:8070:161:7038:4836]) by ae-osaka.co.jp (Postfix) with ESMTPSA id 4E77C11451 for ; Fri, 4 Nov 2011 21:04:48 +0900 (JST) Message-Id: <4EB3D4DF.7000303@airport.fm> Date: Fri, 04 Nov 2011 21:04:47 +0900 From: Takefu To: freebsd-gnats-submit@FreeBSD.org In-Reply-To: <201111041151.pA4BpB23052286@unbound.local.ae-osaka.co.jp> References: <201111041151.pA4BpB23052286@unbound.local.ae-osaka.co.jp> Cc: Subject: ports/162290: [UPDATE] audio/darkice: Update 1.1 X-BeenThere: freebsd-ports-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: takefu@airport.fm List-Id: Ports bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 Nov 2011 12:10:08 -0000 >Number: 162290 >Category: ports >Synopsis: [UPDATE] audio/darkice: Update 1.1 >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Fri Nov 04 12:10:07 UTC 2011 >Closed-Date: >Last-Modified: >Originator: Takefu >Release: >Organization: FOX Amateur Radio Club >Environment: >Description: 27-10-2011 Darkice 1.1 released o Updated aac+ encoding to use libaacplus-2.0.0 api. o Added pulseaudio support o Added rtprio parameter and revisited realtime priority o Fixed a call to a deprecated jack call >How-To-Repeat: >Fix: --- darkice.patch begins here --- diff -ruN /usr/ports/audio/darkice/Makefile audio/darkice/Makefile --- /usr/ports/audio/darkice/Makefile 2011-09-29 14:00:23.000000000 +0900 +++ audio/darkice/Makefile 2011-11-04 20:18:44.000000000 +0900 @@ -7,8 +7,7 @@ # PORTNAME= darkice -PORTVERSION= 1.0 -PORTREVISION= 3 +PORTVERSION= 1.1 CATEGORIES= audio net MASTER_SITES= GOOGLE_CODE diff -ruN /usr/ports/audio/darkice/distinfo audio/darkice/distinfo --- /usr/ports/audio/darkice/distinfo 2011-01-26 10:48:03.000000000 +0900 +++ audio/darkice/distinfo 2011-11-04 20:00:00.000000000 +0900 @@ -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 -ruN /usr/ports/audio/darkice/files/patch-configure.in audio/darkice/files/patch-configure.in --- /usr/ports/audio/darkice/files/patch-configure.in 2011-01-25 00:32:47.000000000 +0900 +++ audio/darkice/files/patch-configure.in 1970-01-01 09:00:00.000000000 +0900 @@ -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 -ruN /usr/ports/audio/darkice/files/patch-darkice.cfg audio/darkice/files/patch-darkice.cfg --- /usr/ports/audio/darkice/files/patch-darkice.cfg 2011-01-25 00:32:47.000000000 +0900 +++ audio/darkice/files/patch-darkice.cfg 1970-01-01 09:00:00.000000000 +0900 @@ -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 -ruN /usr/ports/audio/darkice/files/patch-src_aacPlusEncoder.cpp audio/darkice/files/patch-src_aacPlusEncoder.cpp --- /usr/ports/audio/darkice/files/patch-src_aacPlusEncoder.cpp 2011-01-25 00:32:47.000000000 +0900 +++ audio/darkice/files/patch-src_aacPlusEncoder.cpp 1970-01-01 09:00:00.000000000 +0900 @@ -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 -ruN /usr/ports/audio/darkice/files/patch-src_aacPlusEncoder.h audio/darkice/files/patch-src_aacPlusEncoder.h --- /usr/ports/audio/darkice/files/patch-src_aacPlusEncoder.h 2011-01-25 00:32:47.000000000 +0900 +++ audio/darkice/files/patch-src_aacPlusEncoder.h 1970-01-01 09:00:00.000000000 +0900 @@ -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 -ruN /usr/ports/audio/darkice/pkg-descr audio/darkice/pkg-descr --- /usr/ports/audio/darkice/pkg-descr 2010-07-21 16:52:35.000000000 +0900 +++ audio/darkice/pkg-descr 2011-11-04 20:21:45.000000000 +0900 @@ -17,4 +17,4 @@ Darwin Streaming Server archive the encoded audio in files -WWW: http://code.google.com/p/darkice/ +WWW: http://darkice.org/ --- darkice.patch ends here --- >Release-Note: >Audit-Trail: >Unformatted: