summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortron <tron>2010-01-05 23:02:12 +0000
committertron <tron>2010-01-05 23:02:12 +0000
commit08c076843cabdbfec226c9ea890af8f5a6e5d271 (patch)
tree330068a1e412f1bd349de208be429ea8ee7739d4
parent0859684d01617ce1f2cf4fe98e6229ac3e826b8f (diff)
downloadpkgsrc-08c076843cabdbfec226c9ea890af8f5a6e5d271.tar.gz
Add patch from the "lame" CVS repository to fix API incompatiblity with
the "ffmpeg" package. "ffmpeg" can now generate ".flv" files with audio again. Bump package revision. Extra testing by Matthias Drochner, approved by Alistair Crooks.
-rw-r--r--audio/lame/Makefile4
-rw-r--r--audio/lame/distinfo3
-rw-r--r--audio/lame/patches/patch-aa170
3 files changed, 174 insertions, 3 deletions
diff --git a/audio/lame/Makefile b/audio/lame/Makefile
index 934fb973679..4b0f1683b4e 100644
--- a/audio/lame/Makefile
+++ b/audio/lame/Makefile
@@ -1,8 +1,8 @@
-# $NetBSD: Makefile,v 1.63 2009/05/20 23:08:28 zafer Exp $
-#
+# $NetBSD: Makefile,v 1.64 2010/01/05 23:02:12 tron Exp $
DISTNAME= lame-398-2
PKGNAME= lame-3.98.2
+PKGREVISION= 1
CATEGORIES= audio
MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=lame/}
diff --git a/audio/lame/distinfo b/audio/lame/distinfo
index 431254293c3..6d2b14f43d1 100644
--- a/audio/lame/distinfo
+++ b/audio/lame/distinfo
@@ -1,8 +1,9 @@
-$NetBSD: distinfo,v 1.17 2008/10/09 14:45:32 wiz Exp $
+$NetBSD: distinfo,v 1.18 2010/01/05 23:02:12 tron Exp $
SHA1 (lame-398-2.tar.gz) = b2db41dbc9c0824caa102e8c932b820c79ccd5ec
RMD160 (lame-398-2.tar.gz) = 767dd94271eef221170469535db2bf388149715a
Size (lame-398-2.tar.gz) = 1327643 bytes
+SHA1 (patch-aa) = 4246215f8b5bbea1fda44e3c4634fa91a6d0db8f
SHA1 (patch-ab) = 1ed717388c05bf09bbd1453dd5730e15738c770e
SHA1 (patch-ac) = 702e2526ff88e3c6a7e5b325629583754a525785
SHA1 (patch-ad) = 240943b1c3366181c96b587579d653de3bbc7873
diff --git a/audio/lame/patches/patch-aa b/audio/lame/patches/patch-aa
new file mode 100644
index 00000000000..088f9cc48cf
--- /dev/null
+++ b/audio/lame/patches/patch-aa
@@ -0,0 +1,170 @@
+$NetBSD: patch-aa,v 1.16 2010/01/05 23:02:12 tron Exp $
+
+Fix compatibility problem with "ffmpeg":
+
+http://lame.cvs.sourceforge.net/viewvc/lame/lame/libmp3lame/lame.c?revision=1.323.2.5&view=markup
+http://lame.cvs.sourceforge.net/viewvc/lame/lame/libmp3lame/lame.c?revision=1.323.2.6&view=markup
+
+--- libmp3lame/lame.c.orig 2008-08-05 18:26:02.000000000 +0100
++++ libmp3lame/lame.c 2010-01-05 17:41:57.000000000 +0000
+@@ -1472,6 +1472,27 @@
+ }
+
+
++static int
++calcNeeded(lame_global_flags* gfp)
++{
++ int mf_needed;
++ /* some sanity checks */
++#if ENCDELAY < MDCTDELAY
++# error ENCDELAY is less than MDCTDELAY, see encoder.h
++#endif
++#if FFTOFFSET > BLKSIZE
++# error FFTOFFSET is greater than BLKSIZE, see encoder.h
++#endif
++
++ mf_needed = BLKSIZE + gfp->framesize - FFTOFFSET; /* amount needed for FFT */
++ /*mf_needed = Max(mf_needed, 286 + 576 * (1 + gfc->mode_gr)); */
++ mf_needed = Max(mf_needed, 512 + gfp->framesize - 32);
++
++ assert(MFSIZE >= mf_needed);
++
++ return mf_needed;
++}
++
+ /*
+ * THE MAIN LAME ENCODING INTERFACE
+ * mt 3/00
+@@ -1555,20 +1576,7 @@
+ }
+ }
+
+-
+- /* some sanity checks */
+-#if ENCDELAY < MDCTDELAY
+-# error ENCDELAY is less than MDCTDELAY, see encoder.h
+-#endif
+-#if FFTOFFSET > BLKSIZE
+-# error FFTOFFSET is greater than BLKSIZE, see encoder.h
+-#endif
+-
+- mf_needed = BLKSIZE + gfp->framesize - FFTOFFSET; /* amount needed for FFT */
+- /*mf_needed = Max(mf_needed, 286 + 576 * (1 + gfc->mode_gr)); */
+- mf_needed = Max(mf_needed, 512 + gfp->framesize - 32);
+-
+- assert(MFSIZE >= mf_needed);
++ mf_needed = calcNeeded(gfp);
+
+ mfbuf[0] = gfc->mfbuf[0];
+ mfbuf[1] = gfc->mfbuf[1];
+@@ -1602,6 +1610,13 @@
+ /* update mfbuf[] counters */
+ gfc->mf_size += n_out;
+ assert(gfc->mf_size <= MFSIZE);
++
++ /* lame_encode_flush may have set gfc->mf_sample_to_encode to 0
++ * so we have to reinitialize it here when that happened.
++ */
++ if (gfc->mf_samples_to_encode < 1) {
++ gfc->mf_samples_to_encode = ENCDELAY + POSTDELAY;
++ }
+ gfc->mf_samples_to_encode += n_out;
+
+
+@@ -1926,24 +1941,36 @@
+
+ /* we always add POSTDELAY=288 padding to make sure granule with real
+ * data can be complety decoded (because of 50% overlap with next granule */
+- int end_padding = POSTDELAY;
+- int pad_out_samples;
++ int end_padding;
+ int frames_left;
+- int samples_to_encode = gfc->mf_samples_to_encode;
++ int samples_to_encode = gfc->mf_samples_to_encode - POSTDELAY;
++ int mf_needed = calcNeeded(gfp);
+
++ /* Was flush already called? */
++ if (gfc->mf_samples_to_encode < 1) {
++ return 0;
++ }
+ memset(buffer, 0, sizeof(buffer));
+ mp3count = 0;
+-
++
+ if (gfp->in_samplerate != gfp->out_samplerate) {
+ /* delay due to resampling; needs to be fixed, if resampling code gets changed */
+ samples_to_encode += 16.*gfp->out_samplerate/gfp->in_samplerate;
+ }
+- pad_out_samples = gfp->framesize - (samples_to_encode % gfp->framesize);
+- end_padding += pad_out_samples;
++ end_padding = gfp->framesize - (samples_to_encode % gfp->framesize);
++ gfp->encoder_padding = end_padding;
++
++ frames_left = (samples_to_encode + end_padding) / gfp->framesize;
+
+- frames_left = (samples_to_encode + pad_out_samples) / gfp->framesize;
+- while (frames_left > 0) {
++ /* send in a frame of 0 padding until all internal sample buffers are flushed */
++ while (frames_left > 0 && imp3 >= 0) {
++ int bunch = mf_needed-gfc->mf_size;
+ int frame_num = gfp->frameNum;
++
++ bunch *= gfp->in_samplerate;
++ bunch /= gfp->out_samplerate;
++ if (bunch > 1152) bunch = 1152;
++ if (bunch < 1) bunch = 1;
+
+ mp3buffer_size_remaining = mp3buffer_size - mp3count;
+
+@@ -1951,22 +1978,23 @@
+ if (mp3buffer_size == 0)
+ mp3buffer_size_remaining = 0;
+
+- /* send in a frame of 0 padding until all internal sample buffers
+- * are flushed
+- */
+- imp3 = lame_encode_buffer(gfp, buffer[0], buffer[1], 32,
++ imp3 = lame_encode_buffer(gfp, buffer[0], buffer[1], bunch,
+ mp3buffer, mp3buffer_size_remaining);
+
+- if (frame_num != gfp->frameNum) {
+- --frames_left;
+- }
+- if (imp3 < 0) {
+- /* some type of fatal error */
+- return imp3;
+- }
+ mp3buffer += imp3;
+ mp3count += imp3;
++ frames_left -= (frame_num != gfp->frameNum) ? 1 : 0;
+ }
++ /* Set gfc->mf_samples_to_encode to 0, so we may detect
++ * and break loops calling it more than once in a row.
++ */
++ gfc->mf_samples_to_encode = 0;
++
++ if (imp3 < 0) {
++ /* some type of fatal error */
++ return imp3;
++ }
++
+ mp3buffer_size_remaining = mp3buffer_size - mp3count;
+ /* if user specifed buffer size = 0, dont check size */
+ if (mp3buffer_size == 0)
+@@ -1997,7 +2025,6 @@
+ }
+ mp3count += imp3;
+ }
+- gfp->encoder_padding = end_padding;
+ #if 0
+ {
+ int const ed = gfp->encoder_delay;
+@@ -2011,6 +2038,8 @@
+ MSGF(gfc, "encoder padding=%d\n", ep);
+ MSGF(gfc, "sample count=%d (%g)\n", ns, gfp->in_samplerate*duration);
+ MSGF(gfc, "duration=%g sec\n", duration);
++ MSGF(gfc, "mf_size=%d\n",gfc->mf_size);
++ MSGF(gfc, "mf_samples_to_encode=%d\n",gfc->mf_samples_to_encode);
+ }
+ #endif
+ return mp3count;