Browse Source

libaudiofile: disable sfcommands, add buildroot patches

Waldemar Brodkorb 8 years ago
parent
commit
7bf6ced01e

+ 3 - 1
package/libaudiofile/Makefile

@@ -22,9 +22,11 @@ include ${ADK_TOPDIR}/mk/package.mk
 
 
 $(eval $(call PKG_template,LIBAUDIOFILE,libaudiofile,${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION},${PKG_OPTS}))
 $(eval $(call PKG_template,LIBAUDIOFILE,libaudiofile,${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION},${PKG_OPTS}))
 
 
-CONFIGURE_ENV+=		ac_cv_linux_vers=2
 TARGET_CPPFLAGS+=       -D_GNU_SOURCE -D_POSIX_SOURCE
 TARGET_CPPFLAGS+=       -D_GNU_SOURCE -D_POSIX_SOURCE
 
 
+CONFIGURE_ENV+=		ac_cv_linux_vers=2
+CONFIGURE_ARGS+=	--disable-examples
+
 libaudiofile-install:
 libaudiofile-install:
 	${INSTALL_DIR} ${IDIR_LIBAUDIOFILE}/usr/lib
 	${INSTALL_DIR} ${IDIR_LIBAUDIOFILE}/usr/lib
 	${CP} ${WRKINST}/usr/lib/libaudiofile.so* ${IDIR_LIBAUDIOFILE}/usr/lib/
 	${CP} ${WRKINST}/usr/lib/libaudiofile.so* ${IDIR_LIBAUDIOFILE}/usr/lib/

+ 2 - 2
package/libaudiofile/patches/patch-Makefile_in

@@ -1,11 +1,11 @@
 --- audiofile-0.3.6.orig/Makefile.in	2013-03-07 08:27:14.000000000 +0100
 --- audiofile-0.3.6.orig/Makefile.in	2013-03-07 08:27:14.000000000 +0100
-+++ audiofile-0.3.6/Makefile.in	2013-12-23 15:53:28.000000000 +0100
++++ audiofile-0.3.6/Makefile.in	2017-04-26 02:24:43.284904375 +0200
 @@ -294,7 +294,7 @@ target_alias = @target_alias@
 @@ -294,7 +294,7 @@ target_alias = @target_alias@
  top_build_prefix = @top_build_prefix@
  top_build_prefix = @top_build_prefix@
  top_builddir = @top_builddir@
  top_builddir = @top_builddir@
  top_srcdir = @top_srcdir@
  top_srcdir = @top_srcdir@
 -SUBDIRS = gtest libaudiofile sfcommands test examples docs
 -SUBDIRS = gtest libaudiofile sfcommands test examples docs
-+SUBDIRS = gtest libaudiofile sfcommands 
++SUBDIRS = gtest libaudiofile
  EXTRA_DIST = \
  EXTRA_DIST = \
  	ACKNOWLEDGEMENTS \
  	ACKNOWLEDGEMENTS \
  	NOTES \
  	NOTES \

+ 11 - 0
package/libaudiofile/patches/patch-Makefile_in.orig

@@ -0,0 +1,11 @@
+--- audiofile-0.3.6.orig/Makefile.in	2013-03-07 08:27:14.000000000 +0100
++++ audiofile-0.3.6/Makefile.in	2013-12-23 15:53:28.000000000 +0100
+@@ -294,7 +294,7 @@ target_alias = @target_alias@
+ top_build_prefix = @top_build_prefix@
+ top_builddir = @top_builddir@
+ top_srcdir = @top_srcdir@
+-SUBDIRS = gtest libaudiofile sfcommands test examples docs
++SUBDIRS = gtest libaudiofile sfcommands 
+ EXTRA_DIST = \
+ 	ACKNOWLEDGEMENTS \
+ 	NOTES \

+ 9 - 0
package/libaudiofile/patches/patch-audiofile_pc_in

@@ -0,0 +1,9 @@
+--- audiofile-0.3.6.orig/audiofile.pc.in	2013-02-11 18:23:26.000000000 +0100
++++ audiofile-0.3.6/audiofile.pc.in	2017-04-26 02:14:32.397720674 +0200
+@@ -8,5 +8,5 @@ Description: audiofile
+ Requires:
+ Version: @VERSION@
+ Libs: -L${libdir} -laudiofile
+-Libs.private: -lm
++Libs.private: @FLAC_LIBS@ @COVERAGE_LIBS@ -lm
+ Cflags: -I${includedir}

+ 31 - 0
package/libaudiofile/patches/patch-libaudiofile_WAVE_cpp

@@ -0,0 +1,31 @@
+--- audiofile-0.3.6.orig/libaudiofile/WAVE.cpp	2013-03-06 06:30:03.000000000 +0100
++++ audiofile-0.3.6/libaudiofile/WAVE.cpp	2017-04-26 02:15:19.828763007 +0200
+@@ -281,6 +281,12 @@ status WAVEFile::parseFormat(const Tag &
+ 
+ 			/* numCoefficients should be at least 7. */
+ 			assert(numCoefficients >= 7 && numCoefficients <= 255);
++			if (numCoefficients < 7 || numCoefficients > 255)
++			{
++				_af_error(AF_BAD_HEADER,
++						"Bad number of coefficients");
++				return AF_FAIL;
++			}
+ 
+ 			m_msadpcmNumCoefficients = numCoefficients;
+ 
+@@ -326,6 +332,7 @@ status WAVEFile::parseFormat(const Tag &
+ 			{
+ 				_af_error(AF_BAD_NOT_IMPLEMENTED,
+ 					"IMA ADPCM compression supports only 4 bits per sample");
++				return AF_FAIL;
+ 			}
+ 
+ 			int bytesPerBlock = (samplesPerBlock + 14) / 8 * 4 * channelCount;
+@@ -333,6 +340,7 @@ status WAVEFile::parseFormat(const Tag &
+ 			{
+ 				_af_error(AF_BAD_CODEC_CONFIG,
+ 					"Invalid samples per block for IMA ADPCM compression");
++				return AF_FAIL;
+ 			}
+ 
+ 			track->f.sampleWidth = 16;

+ 14 - 0
package/libaudiofile/patches/patch-libaudiofile_modules_BlockCodec_cpp

@@ -0,0 +1,14 @@
+--- audiofile-0.3.6.orig/libaudiofile/modules/BlockCodec.cpp	2013-03-06 06:30:03.000000000 +0100
++++ audiofile-0.3.6/libaudiofile/modules/BlockCodec.cpp	2017-04-26 02:15:29.573388050 +0200
+@@ -52,8 +52,9 @@ void BlockCodec::runPull()
+ 	// Decompress into m_outChunk.
+ 	for (int i=0; i<blocksRead; i++)
+ 	{
+-		decodeBlock(static_cast<const uint8_t *>(m_inChunk->buffer) + i * m_bytesPerPacket,
+-			static_cast<int16_t *>(m_outChunk->buffer) + i * m_framesPerPacket * m_track->f.channelCount);
++		if (decodeBlock(static_cast<const uint8_t *>(m_inChunk->buffer) + i * m_bytesPerPacket,
++			static_cast<int16_t *>(m_outChunk->buffer) + i * m_framesPerPacket * m_track->f.channelCount)==0)
++			break;
+ 
+ 		framesRead += m_framesPerPacket;
+ 	}

+ 20 - 0
package/libaudiofile/patches/patch-libaudiofile_modules_IMA_cpp

@@ -0,0 +1,20 @@
+--- audiofile-0.3.6.orig/libaudiofile/modules/IMA.cpp	2013-03-06 06:30:03.000000000 +0100
++++ audiofile-0.3.6/libaudiofile/modules/IMA.cpp	2017-04-26 02:15:03.959745133 +0200
+@@ -169,7 +169,7 @@ int IMA::decodeBlockWAVE(const uint8_t *
+ 		if (encoded[1] & 0x80)
+ 			m_adpcmState[c].previousValue -= 0x10000;
+ 
+-		m_adpcmState[c].index = encoded[2];
++		m_adpcmState[c].index = clamp(encoded[2], 0, 88);
+ 
+ 		*decoded++ = m_adpcmState[c].previousValue;
+ 
+@@ -210,7 +210,7 @@ int IMA::decodeBlockQT(const uint8_t *en
+ 			predictor -= 0x10000;
+ 
+ 		state.previousValue = clamp(predictor, MIN_INT16, MAX_INT16);
+-		state.index = encoded[1] & 0x7f;
++		state.index = clamp(encoded[1] & 0x7f, 0, 88);
+ 		encoded += 2;
+ 
+ 		for (int n=0; n<m_framesPerPacket; n+=2)

+ 84 - 0
package/libaudiofile/patches/patch-libaudiofile_modules_MSADPCM_cpp

@@ -0,0 +1,84 @@
+--- audiofile-0.3.6.orig/libaudiofile/modules/MSADPCM.cpp	2013-03-06 06:30:03.000000000 +0100
++++ audiofile-0.3.6/libaudiofile/modules/MSADPCM.cpp	2017-04-26 02:15:29.573388050 +0200
+@@ -101,24 +101,60 @@ static const int16_t adaptationTable[] =
+ 	768, 614, 512, 409, 307, 230, 230, 230
+ };
+ 
++int firstBitSet(int x)
++{
++        int position=0;
++        while (x!=0)
++        {
++                x>>=1;
++                ++position;
++        }
++        return position;
++}
++
++#ifndef __has_builtin
++#define __has_builtin(x) 0
++#endif
++
++int multiplyCheckOverflow(int a, int b, int *result)
++{
++#if (defined __GNUC__ && __GNUC__ >= 5) || ( __clang__ && __has_builtin(__builtin_mul_overflow))
++	return __builtin_mul_overflow(a, b, result);
++#else
++	if (firstBitSet(a)+firstBitSet(b)>31) // int is signed, so we can't use 32 bits
++		return true;
++	*result = a * b;
++	return false;
++#endif
++}
++
++
+ // Compute a linear PCM value from the given differential coded value.
+ static int16_t decodeSample(ms_adpcm_state &state,
+-	uint8_t code, const int16_t *coefficient)
++	uint8_t code, const int16_t *coefficient, bool *ok=NULL)
+ {
+ 	int linearSample = (state.sample1 * coefficient[0] +
+ 		state.sample2 * coefficient[1]) >> 8;
++	int delta;
+ 
+ 	linearSample += ((code & 0x08) ? (code - 0x10) : code) * state.delta;
+ 
+ 	linearSample = clamp(linearSample, MIN_INT16, MAX_INT16);
+ 
+-	int delta = (state.delta * adaptationTable[code]) >> 8;
++	if (multiplyCheckOverflow(state.delta, adaptationTable[code], &delta))
++	{
++                if (ok) *ok=false;
++		_af_error(AF_BAD_COMPRESSION, "Error decoding sample");
++		return 0;
++	}
++	delta >>= 8;
+ 	if (delta < 16)
+ 		delta = 16;
+ 
+ 	state.delta = delta;
+ 	state.sample2 = state.sample1;
+ 	state.sample1 = linearSample;
++	if (ok) *ok=true;
+ 
+ 	return static_cast<int16_t>(linearSample);
+ }
+@@ -212,13 +248,16 @@ int MSADPCM::decodeBlock(const uint8_t *
+ 	{
+ 		uint8_t code;
+ 		int16_t newSample;
++		bool ok;
+ 
+ 		code = *encoded >> 4;
+-		newSample = decodeSample(*state[0], code, coefficient[0]);
++		newSample = decodeSample(*state[0], code, coefficient[0], &ok);
++		if (!ok) return 0;
+ 		*decoded++ = newSample;
+ 
+ 		code = *encoded & 0x0f;
+-		newSample = decodeSample(*state[1], code, coefficient[1]);
++		newSample = decodeSample(*state[1], code, coefficient[1], &ok);
++		if (!ok) return 0;
+ 		*decoded++ = newSample;
+ 
+ 		encoded++;

+ 50 - 0
package/libaudiofile/patches/patch-sfcommands_sfconvert_c

@@ -0,0 +1,50 @@
+--- audiofile-0.3.6.orig/sfcommands/sfconvert.c	2013-03-06 06:30:03.000000000 +0100
++++ audiofile-0.3.6/sfcommands/sfconvert.c	2017-04-26 02:15:11.864252147 +0200
+@@ -45,6 +45,33 @@ void printusage (void);
+ void usageerror (void);
+ bool copyaudiodata (AFfilehandle infile, AFfilehandle outfile, int trackid);
+ 
++int firstBitSet(int x)
++{
++        int position=0;
++        while (x!=0)
++        {
++                x>>=1;
++                ++position;
++        }
++        return position;
++}
++
++#ifndef __has_builtin
++#define __has_builtin(x) 0
++#endif
++
++int multiplyCheckOverflow(int a, int b, int *result)
++{
++#if (defined __GNUC__ && __GNUC__ >= 5) || ( __clang__ && __has_builtin(__builtin_mul_overflow))
++	return __builtin_mul_overflow(a, b, result);
++#else
++	if (firstBitSet(a)+firstBitSet(b)>31) // int is signed, so we can't use 32 bits
++		return true;
++	*result = a * b;
++	return false;
++#endif
++}
++
+ int main (int argc, char **argv)
+ {
+ 	if (argc == 2)
+@@ -323,8 +350,11 @@ bool copyaudiodata (AFfilehandle infile,
+ {
+ 	int frameSize = afGetVirtualFrameSize(infile, trackid, 1);
+ 
+-	const int kBufferFrameCount = 65536;
+-	void *buffer = malloc(kBufferFrameCount * frameSize);
++	int kBufferFrameCount = 65536;
++	int bufferSize;
++	while (multiplyCheckOverflow(kBufferFrameCount, frameSize, &bufferSize))
++		kBufferFrameCount /= 2;
++	void *buffer = malloc(bufferSize);
+ 
+ 	AFframecount totalFrames = afGetFrameCount(infile, AF_DEFAULT_TRACK);
+ 	AFframecount totalFramesWritten = 0;