summaryrefslogtreecommitdiffstats
path: root/libmpcodecs/ad_dvdpcm.c
diff options
context:
space:
mode:
Diffstat (limited to 'libmpcodecs/ad_dvdpcm.c')
-rw-r--r--libmpcodecs/ad_dvdpcm.c26
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;
}