# HG changeset patch # User rathann # Date 1221496351 0 # Node ID 9b767bba79fba0a81ff6eb83f2cd4055e7fb5c06 # Parent 18b87a2461da844d02f768560e18b66cc610b5d2 External liba52 support, part 2 of 2. diff -r 18b87a2461da -r 9b767bba79fb Makefile --- a/Makefile Mon Sep 15 16:30:24 2008 +0000 +++ b/Makefile Mon Sep 15 16:32:31 2008 +0000 @@ -294,8 +294,8 @@ SRCS_COMMON-$(JPEG) += libmpcodecs/vd_ijpg.c SRCS_COMMON-$(LADSPA) += libaf/af_ladspa.c SRCS_COMMON-$(LIBA52) += libmpcodecs/ad_hwac3.c \ - libmpcodecs/ad_liba52.c \ - liba52/crc.c \ + libmpcodecs/ad_liba52.c +SRCS_COMMON-$(LIBA52_INTERNAL) += liba52/crc.c \ liba52/resample.c \ liba52/bit_allocate.c \ liba52/bitstream.c \ diff -r 18b87a2461da -r 9b767bba79fb configure --- a/configure Mon Sep 15 16:30:24 2008 +0000 +++ b/configure Mon Sep 15 16:32:31 2008 +0000 @@ -320,7 +320,8 @@ --enable-xmms enable XMMS input plugin support [disabled] --enable-libdca enable libdca support [autodetect] --disable-mp3lib disable builtin mp3lib [enabled] - --disable-liba52 disable builtin liba52 [enabled] + --disable-liba52 disable liba52 [autodetect] + --disable-liba52-internal disable builtin liba52 [autodetect] --disable-libmpeg2 disable builtin libmpeg2 [autodetect] --disable-musepack disable musepack support [autodetect] --disable-libamr_nb disable libamr narrowband [autodetect] @@ -574,7 +575,8 @@ _speex=auto _theora=auto _mp3lib=yes -_liba52=yes +_liba52=auto +_liba52_internal=auto _libdca=auto _libmpeg2=auto _faad=auto @@ -938,6 +940,8 @@ --disable-theora) _theora=no ;; --enable-mp3lib) _mp3lib=yes ;; --disable-mp3lib) _mp3lib=no ;; + --enable-liba52-internal) _liba52_internal=yes ;; + --disable-liba52-internal) _liba52_internal=no ;; --enable-liba52) _liba52=yes ;; --disable-liba52) _liba52=no ;; --enable-libdca) _libdca=yes ;; @@ -6069,12 +6073,29 @@ fi echores "$_mp3lib" -echocheck "internal liba52 support" +echocheck "liba52 support" +if test "$_liba52_internal" = auto ; then + _liba52=yes + _liba52_internal=yes + _def_liba52_internal="#define CONFIG_LIBA52_INTERNAL 1" + _res_comment="internal" +elif test "$_liba52_internal" = no && test "$_liba52" = auto ; then + _liba52=no + cat > $TMPC << EOF +#include +#include +int main(void) { a52_state_t *testHand; testHand=a52_init(0); return 0; } +EOF + cc_check -la52 && _liba52=yes + _ld_extra="$_ld_extra -la52" + _res_comment="external" +fi if test "$_liba52" = yes ; then _def_liba52='#define CONFIG_LIBA52 1' - _codecmodules="liba52 $_codecmodules" + _codecmodules="liba52($_res_comment) $_codecmodules" else _def_liba52='#undef CONFIG_LIBA52' + _def_liba52_internal="#undef CONFIG_LIBA52_INTERNAL" _nocodecmodules="liba52 $_nocodecmodules" fi echores "$_liba52" @@ -7823,6 +7844,7 @@ #internal libraries LIBA52 = $_liba52 +LIBA52_INTERNAL = $_liba52_internal LIBMPEG2 = $_libmpeg2 MP3LIB = $_mp3lib TREMOR_INTERNAL = $_tremor_internal @@ -8366,6 +8388,9 @@ /* Use codec libs included in mplayer CVS / source dist: */ $_def_mp3lib + +/* enable liba52 support */ +$_def_liba52_internal $_def_liba52 $_def_libmpeg2 diff -r 18b87a2461da -r 9b767bba79fb libmpcodecs/ad_hwac3.c --- a/libmpcodecs/ad_hwac3.c Mon Sep 15 16:30:24 2008 +0000 +++ b/libmpcodecs/ad_hwac3.c Mon Sep 15 16:32:31 2008 +0000 @@ -17,7 +17,11 @@ #include "ad_internal.h" +#ifdef CONFIG_LIBA52_INTERNAL #include "liba52/a52.h" +#else +#include +#endif static int isdts = -1; @@ -97,8 +101,10 @@ sh_audio->a_in_buffer_len = length; // TODO: is DTS also checksummed? +#ifdef CONFIG_LIBA52_INTERNAL if(isdts == 0 && crc16_block(sh_audio->a_in_buffer + 2, length - 2) != 0) mp_msg(MSGT_DECAUDIO, MSGL_STATUS, "a52: CRC check failed! \n"); +#endif return length; } diff -r 18b87a2461da -r 9b767bba79fb libmpcodecs/ad_liba52.c --- a/libmpcodecs/ad_liba52.c Mon Sep 15 16:30:24 2008 +0000 +++ b/libmpcodecs/ad_liba52.c Mon Sep 15 16:32:31 2008 +0000 @@ -16,8 +16,14 @@ #include "libaf/af_format.h" +#ifdef CONFIG_LIBA52_INTERNAL #include "liba52/a52.h" #include "liba52/mm_accel.h" +#else +#include +#include +int (* a52_resample) (float * _f, int16_t * s16); +#endif static a52_state_t *a52_state; static uint32_t a52_flags=0; @@ -79,8 +85,10 @@ if(sh_audio->format!=0x2000) swab(sh_audio->a_in_buffer+8,sh_audio->a_in_buffer+8,length-8); +#ifdef CONFIG_LIBA52_INTERNAL if(crc16_block(sh_audio->a_in_buffer+2,length-2)!=0) mp_msg(MSGT_DECAUDIO,MSGL_STATUS,"a52: CRC check failed! \n"); +#endif return length; } @@ -121,7 +129,11 @@ { /* Dolby AC3 audio: */ /* however many channels, 2 bytes in a word, 256 samples in a block, 6 blocks in a frame */ +#ifdef CONFIG_LIBA52_INTERNAL if (sh->samplesize < 2) sh->samplesize = 2; +#else + if (sh->samplesize < 4) sh->samplesize = 4; +#endif sh->audio_out_minsize=audio_output_channels*sh->samplesize*256*6; sh->audio_in_minsize=3840; a52_level = 1.0; @@ -175,6 +187,9 @@ mp_msg(MSGT_DECAUDIO,MSGL_ERR,"A52 init failed\n"); return 0; } +#ifndef CONFIG_LIBA52_INTERNAL + sh_audio->sample_format = AF_FORMAT_FLOAT_NE; +#endif if(a52_fillbuff(sh_audio)<0){ mp_msg(MSGT_DECAUDIO,MSGL_ERR,"A52 sync failed\n"); return 0; @@ -247,8 +262,12 @@ break; } } else +#ifdef CONFIG_LIBA52_INTERNAL if(a52_resample_init(a52_accel,flags,sh_audio->channels)) break; --sh_audio->channels; /* try to decrease no. of channels*/ +#else + break; +#endif } if(sh_audio->channels<=0){ mp_msg(MSGT_DECAUDIO,MSGL_ERR,"a52: no resampler. try different channel setup!\n");