1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-11-21 00:25:50 +00:00

- Update to verion 1.1 [1]

- Update project homepage [1]
- Add check for options sanity (at least one codec must be choosen)
- Install darkice.cfg and remove it when it was not edited

PR:		ports/162290 [1]
Submitted by:	Takefu <takefu@airport.fm> [1]
This commit is contained in:
Pawel Pekala 2011-11-04 18:29:43 +00:00
parent 09529337e3
commit 8c1137abf0
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=285041
8 changed files with 20 additions and 551 deletions

View File

@ -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 <bsd.port.pre.mk>
.include <bsd.port.options.mk>
.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 <bsd.port.post.mk>
post-install:
@if [ ! -f ${PREFIX}/etc/darkice.cfg ]; then \
${CP} -p ${PREFIX}/etc/darkice.cfg.dist ${PREFIX}/etc/darkice.cfg ; \
fi
.include <bsd.port.mk>

View File

@ -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

View File

@ -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] )

View File

@ -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]

View File

@ -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; i<samples; i++)
- inBuf[(2/channels)*i+writeOffset+writtenSamples] = (float) TimeDataPcm[i];
-
- writtenSamples+=samples;
-
- if (writtenSamples < inSamples)
- return;
-
- /* encode one SBR frame */
- EnvEncodeFrame( hEnvEnc,
- inBuf + envReadOffset,
- inBuf + coreWriteOffset,
- MAX_CHANNELS,
- &numAncDataBytes,
- ancDataBytes);
-
- /* 2:1 downsampling for AAC core */
- if (!useParametricStereo) {
- for( ch=0; ch<nChannelsAAC; ch++ )
- IIR21_Downsample( &(IIR21_reSampler[ch]),
- inBuf + writeOffset+ch,
- writtenSamples/channels,
- MAX_CHANNELS,
- inBuf+ch,
- &outSamples,
- MAX_CHANNELS);
- }
-
- /* encode one AAC frame */
- AacEncEncode( aacEnc,
- inBuf,
- useParametricStereo ? 1 : MAX_CHANNELS, /* stride (step) */
- ancDataBytes,
- &numAncDataBytes,
- (unsigned *) (outBuf+ADTS_HEADER_SIZE),
- &numOutBytes);
- if (useParametricStereo) {
- memcpy( inBuf,inBuf+AACENC_BLOCKSIZE,CORE_INPUT_OFFSET_PS*sizeof(float));
- } else {
- memmove( inBuf,inBuf+AACENC_BLOCKSIZE*2*MAX_CHANNELS,writeOffset*sizeof(float));
- }
-
- /* Write one frame of encoded audio */
- if (numOutBytes) {
- adts_hdr_up(outBuf, numOutBytes);
- sink->write(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();

View File

@ -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 <libaacplus/cfftn.h>
-#include <libaacplus/FloatFR.h>
-#include <libaacplus/aacenc.h>
-#include <libaacplus/resampler.h>
-
-#include <libaacplus/adts.h>
-
-#include <libaacplus/sbr_main.h>
-#include <libaacplus/aac_ram.h>
-#include <libaacplus/aac_rom.h>
-}
+#include <aacplus.h>
#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> 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;

View File

@ -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/

4
audio/darkice/pkg-plist Normal file
View File

@ -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