diff options
Diffstat (limited to 'libmpcodecs/ad_liba52.c')
-rw-r--r-- | libmpcodecs/ad_liba52.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/libmpcodecs/ad_liba52.c b/libmpcodecs/ad_liba52.c index 5f3e48ae2c..a78d4cc2dd 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 <a52dec/a52.h> +#include <a52dec/mm_accel.h> +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; @@ -158,17 +170,26 @@ static int init(sh_audio_t *sh_audio) sample_t level=a52_level, bias=384; int flags=0; /* Dolby AC3 audio:*/ +#ifdef MM_ACCEL_X86_SSE if(gCpuCaps.hasSSE) a52_accel|=MM_ACCEL_X86_SSE; +#endif if(gCpuCaps.hasMMX) a52_accel|=MM_ACCEL_X86_MMX; if(gCpuCaps.hasMMX2) a52_accel|=MM_ACCEL_X86_MMXEXT; if(gCpuCaps.has3DNow) a52_accel|=MM_ACCEL_X86_3DNOW; +#ifdef MM_ACCEL_X86_3DNOWEXT if(gCpuCaps.has3DNowExt) a52_accel|=MM_ACCEL_X86_3DNOWEXT; +#endif +#ifdef MM_ACCEL_PPC_ALTIVEC if(gCpuCaps.hasAltiVec) a52_accel|=MM_ACCEL_PPC_ALTIVEC; +#endif a52_state=a52_init (a52_accel); if (a52_state == NULL) { 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; @@ -241,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"); |