1
mirror of https://github.com/mpv-player/mpv synced 2024-10-02 16:25:33 +02:00

External liba52 support, part 2 of 2.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@27620 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
rathann 2008-09-15 16:32:31 +00:00
parent d977c6e812
commit a5e9a8d0ca
4 changed files with 56 additions and 6 deletions

View File

@ -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-$(JPEG) += libmpcodecs/vd_ijpg.c
SRCS_COMMON-$(LADSPA) += libaf/af_ladspa.c SRCS_COMMON-$(LADSPA) += libaf/af_ladspa.c
SRCS_COMMON-$(LIBA52) += libmpcodecs/ad_hwac3.c \ SRCS_COMMON-$(LIBA52) += libmpcodecs/ad_hwac3.c \
libmpcodecs/ad_liba52.c \ libmpcodecs/ad_liba52.c
liba52/crc.c \ SRCS_COMMON-$(LIBA52_INTERNAL) += liba52/crc.c \
liba52/resample.c \ liba52/resample.c \
liba52/bit_allocate.c \ liba52/bit_allocate.c \
liba52/bitstream.c \ liba52/bitstream.c \

33
configure vendored
View File

@ -320,7 +320,8 @@ Codecs:
--enable-xmms enable XMMS input plugin support [disabled] --enable-xmms enable XMMS input plugin support [disabled]
--enable-libdca enable libdca support [autodetect] --enable-libdca enable libdca support [autodetect]
--disable-mp3lib disable builtin mp3lib [enabled] --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-libmpeg2 disable builtin libmpeg2 [autodetect]
--disable-musepack disable musepack support [autodetect] --disable-musepack disable musepack support [autodetect]
--disable-libamr_nb disable libamr narrowband [autodetect] --disable-libamr_nb disable libamr narrowband [autodetect]
@ -574,7 +575,8 @@ _libvorbis=auto
_speex=auto _speex=auto
_theora=auto _theora=auto
_mp3lib=yes _mp3lib=yes
_liba52=yes _liba52=auto
_liba52_internal=auto
_libdca=auto _libdca=auto
_libmpeg2=auto _libmpeg2=auto
_faad=auto _faad=auto
@ -938,6 +940,8 @@ for ac_option do
--disable-theora) _theora=no ;; --disable-theora) _theora=no ;;
--enable-mp3lib) _mp3lib=yes ;; --enable-mp3lib) _mp3lib=yes ;;
--disable-mp3lib) _mp3lib=no ;; --disable-mp3lib) _mp3lib=no ;;
--enable-liba52-internal) _liba52_internal=yes ;;
--disable-liba52-internal) _liba52_internal=no ;;
--enable-liba52) _liba52=yes ;; --enable-liba52) _liba52=yes ;;
--disable-liba52) _liba52=no ;; --disable-liba52) _liba52=no ;;
--enable-libdca) _libdca=yes ;; --enable-libdca) _libdca=yes ;;
@ -6069,12 +6073,29 @@ else
fi fi
echores "$_mp3lib" 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 <inttypes.h>
#include <a52dec/a52.h>
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 if test "$_liba52" = yes ; then
_def_liba52='#define CONFIG_LIBA52 1' _def_liba52='#define CONFIG_LIBA52 1'
_codecmodules="liba52 $_codecmodules" _codecmodules="liba52($_res_comment) $_codecmodules"
else else
_def_liba52='#undef CONFIG_LIBA52' _def_liba52='#undef CONFIG_LIBA52'
_def_liba52_internal="#undef CONFIG_LIBA52_INTERNAL"
_nocodecmodules="liba52 $_nocodecmodules" _nocodecmodules="liba52 $_nocodecmodules"
fi fi
echores "$_liba52" echores "$_liba52"
@ -7823,6 +7844,7 @@ MPLAYER = $_mplayer
#internal libraries #internal libraries
LIBA52 = $_liba52 LIBA52 = $_liba52
LIBA52_INTERNAL = $_liba52_internal
LIBMPEG2 = $_libmpeg2 LIBMPEG2 = $_libmpeg2
MP3LIB = $_mp3lib MP3LIB = $_mp3lib
TREMOR_INTERNAL = $_tremor_internal TREMOR_INTERNAL = $_tremor_internal
@ -8366,6 +8388,9 @@ $_def_xvid_lavc
/* Use codec libs included in mplayer CVS / source dist: */ /* Use codec libs included in mplayer CVS / source dist: */
$_def_mp3lib $_def_mp3lib
/* enable liba52 support */
$_def_liba52_internal
$_def_liba52 $_def_liba52
$_def_libmpeg2 $_def_libmpeg2

View File

@ -17,7 +17,11 @@
#include "ad_internal.h" #include "ad_internal.h"
#ifdef CONFIG_LIBA52_INTERNAL
#include "liba52/a52.h" #include "liba52/a52.h"
#else
#include <a52dec/a52.h>
#endif
static int isdts = -1; static int isdts = -1;
@ -97,8 +101,10 @@ static int ac3dts_fillbuff(sh_audio_t *sh_audio)
sh_audio->a_in_buffer_len = length; sh_audio->a_in_buffer_len = length;
// TODO: is DTS also checksummed? // TODO: is DTS also checksummed?
#ifdef CONFIG_LIBA52_INTERNAL
if(isdts == 0 && crc16_block(sh_audio->a_in_buffer + 2, length - 2) != 0) 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"); mp_msg(MSGT_DECAUDIO, MSGL_STATUS, "a52: CRC check failed! \n");
#endif
return length; return length;
} }

View File

@ -16,8 +16,14 @@
#include "libaf/af_format.h" #include "libaf/af_format.h"
#ifdef CONFIG_LIBA52_INTERNAL
#include "liba52/a52.h" #include "liba52/a52.h"
#include "liba52/mm_accel.h" #include "liba52/mm_accel.h"
#else
#include <a52dec/a52.h>
#include <a52dec/mm_accel.h>
int (* a52_resample) (float * _f, int16_t * s16);
#endif
static a52_state_t *a52_state; static a52_state_t *a52_state;
static uint32_t a52_flags=0; static uint32_t a52_flags=0;
@ -79,8 +85,10 @@ while(1){
if(sh_audio->format!=0x2000) if(sh_audio->format!=0x2000)
swab(sh_audio->a_in_buffer+8,sh_audio->a_in_buffer+8,length-8); 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) if(crc16_block(sh_audio->a_in_buffer+2,length-2)!=0)
mp_msg(MSGT_DECAUDIO,MSGL_STATUS,"a52: CRC check failed! \n"); mp_msg(MSGT_DECAUDIO,MSGL_STATUS,"a52: CRC check failed! \n");
#endif
return length; return length;
} }
@ -121,7 +129,11 @@ static int preinit(sh_audio_t *sh)
{ {
/* Dolby AC3 audio: */ /* Dolby AC3 audio: */
/* however many channels, 2 bytes in a word, 256 samples in a block, 6 blocks in a frame */ /* 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; 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_out_minsize=audio_output_channels*sh->samplesize*256*6;
sh->audio_in_minsize=3840; sh->audio_in_minsize=3840;
a52_level = 1.0; 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"); mp_msg(MSGT_DECAUDIO,MSGL_ERR,"A52 init failed\n");
return 0; return 0;
} }
#ifndef CONFIG_LIBA52_INTERNAL
sh_audio->sample_format = AF_FORMAT_FLOAT_NE;
#endif
if(a52_fillbuff(sh_audio)<0){ if(a52_fillbuff(sh_audio)<0){
mp_msg(MSGT_DECAUDIO,MSGL_ERR,"A52 sync failed\n"); mp_msg(MSGT_DECAUDIO,MSGL_ERR,"A52 sync failed\n");
return 0; return 0;
@ -247,8 +262,12 @@ while(sh_audio->channels>0){
break; break;
} }
} else } else
#ifdef CONFIG_LIBA52_INTERNAL
if(a52_resample_init(a52_accel,flags,sh_audio->channels)) break; if(a52_resample_init(a52_accel,flags,sh_audio->channels)) break;
--sh_audio->channels; /* try to decrease no. of channels*/ --sh_audio->channels; /* try to decrease no. of channels*/
#else
break;
#endif
} }
if(sh_audio->channels<=0){ if(sh_audio->channels<=0){
mp_msg(MSGT_DECAUDIO,MSGL_ERR,"a52: no resampler. try different channel setup!\n"); mp_msg(MSGT_DECAUDIO,MSGL_ERR,"a52: no resampler. try different channel setup!\n");