From a5e9a8d0cac5eb5a40ce9df6f1a635a779064233 Mon Sep 17 00:00:00 2001 From: rathann Date: Mon, 15 Sep 2008 16:32:31 +0000 Subject: [PATCH] External liba52 support, part 2 of 2. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@27620 b3059339-0415-0410-9bf9-f77b7e298cf2 --- Makefile | 4 ++-- configure | 33 +++++++++++++++++++++++++++++---- libmpcodecs/ad_hwac3.c | 6 ++++++ libmpcodecs/ad_liba52.c | 19 +++++++++++++++++++ 4 files changed, 56 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 71f7b10905..8cf984c210 100644 --- a/Makefile +++ b/Makefile @@ -294,8 +294,8 @@ SRCS_COMMON-$(HAVE_SYS_MMAN_H) += libaf/af_export.c osdep/mmap_anon.c 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 --git a/configure b/configure index 67d1916236..99c3e9670e 100755 --- a/configure +++ b/configure @@ -320,7 +320,8 @@ Codecs: --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 @@ _libvorbis=auto _speex=auto _theora=auto _mp3lib=yes -_liba52=yes +_liba52=auto +_liba52_internal=auto _libdca=auto _libmpeg2=auto _faad=auto @@ -938,6 +940,8 @@ for ac_option do --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 @@ else 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 @@ MPLAYER = $_mplayer #internal libraries LIBA52 = $_liba52 +LIBA52_INTERNAL = $_liba52_internal LIBMPEG2 = $_libmpeg2 MP3LIB = $_mp3lib TREMOR_INTERNAL = $_tremor_internal @@ -8366,6 +8388,9 @@ $_def_xvid_lavc /* Use codec libs included in mplayer CVS / source dist: */ $_def_mp3lib + +/* enable liba52 support */ +$_def_liba52_internal $_def_liba52 $_def_libmpeg2 diff --git a/libmpcodecs/ad_hwac3.c b/libmpcodecs/ad_hwac3.c index 0cb480ddfd..1757018796 100644 --- a/libmpcodecs/ad_hwac3.c +++ b/libmpcodecs/ad_hwac3.c @@ -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 @@ static int ac3dts_fillbuff(sh_audio_t *sh_audio) 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 --git a/libmpcodecs/ad_liba52.c b/libmpcodecs/ad_liba52.c index 0a20e82cb2..d886ad6a6a 100644 --- a/libmpcodecs/ad_liba52.c +++ b/libmpcodecs/ad_liba52.c @@ -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 @@ while(1){ 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 @@ static int preinit(sh_audio_t *sh) { /* 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 @@ static int init(sh_audio_t *sh_audio) 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 @@ while(sh_audio->channels>0){ 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");