diff options
author | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2008-09-20 16:13:33 +0300 |
---|---|---|
committer | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2008-09-20 16:13:33 +0300 |
commit | 849dc0ba31f209dfdb48146512e48ee2203d0ee6 (patch) | |
tree | 27b3fcc37410ea5f646eb5fc2411406f2cdee175 /libmpcodecs/ad_liba52.c | |
parent | 259ea9d7034566760785fd5253f97b65ee8cd6ed (diff) | |
parent | 7756839a147ce2421cfb4e3de046364962094b60 (diff) | |
download | mpv-849dc0ba31f209dfdb48146512e48ee2203d0ee6.tar.bz2 mpv-849dc0ba31f209dfdb48146512e48ee2203d0ee6.tar.xz |
Merge svn changes up to r27649
Conflicts:
Makefile
configure
libvo/x11_common.c
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"); |