summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xconfigure32
-rw-r--r--libmpcodecs/ad_faad.c14
2 files changed, 44 insertions, 2 deletions
diff --git a/configure b/configure
index 1908742cd1..f2cc8d1f32 100755
--- a/configure
+++ b/configure
@@ -3751,7 +3751,7 @@ fi
echores "$_vorbis"
-echocheck "FAAD (AAC) support"
+echocheck "faad2 (AAC) support"
if test "$_faad" = auto ; then
_faad=no
cat > $TMPC << EOF
@@ -3766,7 +3766,34 @@ if test "$_faad" = yes ; then
else
_def_faad='#undef HAVE_FAAD'
fi
-echores "$_faad"
+
+if test "$_faad" = yes; then
+cat > $TMPC <<EOF
+#include <faad.h>
+#ifndef FAAD_MIN_STREAMSIZE
+#error Too old version
+#endif
+int main(void) {
+#ifdef FAAD2_VERSION
+ printf("%s",FAAD2_VERSION);
+#else
+ printf("1.0");
+#endif
+ return 0;
+}
+EOF
+ if cc_check $_ld_faad -lm && "$TMPO" >> "$TMPLOG" ; then
+ _faad_version=`"$TMPO"`
+ _faad_tempversion=`"$TMPO" | sed -e 's/^\([0-9]\+\)\.\([0-9]\+\).*/\1\2/'`
+ _def_faad_version="#define FAADVERSION $_faad_tempversion"
+ echores "yes ($_faad_version)"
+ else
+ _faad=no
+ echores "no (failed to get version)"
+ fi
+else
+ echores "$_faad"
+fi
if test "$_win32" = auto ; then
if x86 ; then
@@ -5251,6 +5278,7 @@ $_def_tremor
/* enable FAAD (AAC) support */
$_def_faad
+$_def_faad_version
/* enable streaming */
$_def_streaming
diff --git a/libmpcodecs/ad_faad.c b/libmpcodecs/ad_faad.c
index 9fd5720381..02f9bccd51 100644
--- a/libmpcodecs/ad_faad.c
+++ b/libmpcodecs/ad_faad.c
@@ -85,8 +85,13 @@ static int init(sh_audio_t *sh)
sh->a_in_buffer_len = demux_read_data(sh->ds, sh->a_in_buffer, sh->a_in_buffer_size);
/* init the codec */
+#if (FAADVERSION <= 11)
faac_init = faacDecInit(faac_hdec, sh->a_in_buffer,
&faac_samplerate, &faac_channels);
+#else
+ faac_init = faacDecInit(faac_hdec, sh->a_in_buffer,
+ sh->a_in_buffer_len, &faac_samplerate, &faac_channels);
+#endif
sh->a_in_buffer_len -= (faac_init > 0)?faac_init:0; // how many bytes init consumed
// XXX FIXME: shouldn't we memcpy() here in a_in_buffer ?? --A'rpi
@@ -164,7 +169,12 @@ static int decode_audio(sh_audio_t *sh,unsigned char *buf,int minlen,int maxlen)
if(!sh->codecdata_len){
// raw aac stream:
do {
+#if (FAADVERSION <= 11)
faac_sample_buffer = faacDecDecode(faac_hdec, &faac_finfo, sh->a_in_buffer+j);
+#else
+ faac_sample_buffer = faacDecDecode(faac_hdec, &faac_finfo, sh->a_in_buffer+j, sh->a_in_buffer_len);
+#endif
+
/* update buffer index after faacDecDecode */
if(faac_finfo.bytesconsumed >= sh->a_in_buffer_len) {
sh->a_in_buffer_len=0;
@@ -184,7 +194,11 @@ static int decode_audio(sh_audio_t *sh,unsigned char *buf,int minlen,int maxlen)
unsigned char* bufptr=NULL;
int buflen=ds_get_packet(sh->ds, &bufptr);
if(buflen<=0) break;
+#if (FAADVERSION <= 11)
faac_sample_buffer = faacDecDecode(faac_hdec, &faac_finfo, bufptr);
+#else
+ faac_sample_buffer = faacDecDecode(faac_hdec, &faac_finfo, bufptr, buflen);
+#endif
// printf("FAAC decoded %d of %d (err: %d) \n",faac_finfo.bytesconsumed,buflen,faac_finfo.error);
}