diff options
Diffstat (limited to 'libmpcodecs/ad_dvdpcm.c')
-rw-r--r-- | libmpcodecs/ad_dvdpcm.c | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/libmpcodecs/ad_dvdpcm.c b/libmpcodecs/ad_dvdpcm.c index 8ba0331bc2..918dd26bbb 100644 --- a/libmpcodecs/ad_dvdpcm.c +++ b/libmpcodecs/ad_dvdpcm.c @@ -4,6 +4,7 @@ #include "config.h" #include "ad_internal.h" +#include "../libaf/af_format.h" static ad_info_t info = { @@ -29,12 +30,28 @@ static int init(sh_audio_t *sh) case 2: sh->samplerate=44100;break; case 3: sh->samplerate=32000;break; } + switch ((h >> 6) & 3) { + case 0: + sh->sample_format = AFMT_S16_BE; + sh->samplesize = 2; + break; + case 2: + sh->sample_format = AFMT_AF_FLAGS | AF_FORMAT_I | + AF_FORMAT_BE | AF_FORMAT_US; + sh->samplesize = 3; + break; + default: + sh->sample_format = AFMT_S16_BE; + sh->samplesize = 2; + } } else { // use defaults: sh->channels=2; sh->samplerate=48000; + sh->sample_format = AFMT_S16_BE; + sh->samplesize = 2; } - sh->i_bps=2*sh->channels*sh->samplerate; + sh->i_bps = sh->samplesize * sh->channels * sh->samplerate; return 1; } @@ -66,12 +83,5 @@ static int decode_audio(sh_audio_t *sh_audio,unsigned char *buf,int minlen,int m { int j,len; len=demux_read_data(sh_audio->ds,buf,(minlen+3)&(~3)); -#ifndef WORDS_BIGENDIAN - for(j=0;j<len;j+=2){ - char x=buf[j]; - buf[j]=buf[j+1]; - buf[j+1]=x; - } -#endif return len; } |