revert between 56095 -> 55830 in arch
[AROS.git] / workbench / classes / datatypes / wav / wave_pcm.c
blobfacad8876863e11dbf9c3bff4859b3e86b485c1f
1 /*
2 * wave.datatype
3 * (c) Fredrik Wikstrom (fredrik@a500.org)
4 */
6 #include "wave_pcm.h"
8 DEC_SETUPPROTO(SetupPCM) {
9 struct WaveFormatEx * fmt;
10 fmt = data->fmt;
12 /* check bitsPerSample */
13 if (fmt->bitsPerSample < 1) {
14 return NOTOK;
16 /* owervrite, in case these are corrupt */
17 fmt->blockAlign = ((fmt->bitsPerSample+7)>>3) * fmt->numChannels;
18 data->blockFrames = 1;
19 return OK;
22 DECODERPROTO(DecodePCM) {
23 LONG mod = (fmt->bitsPerSample+7) >> 3;
24 LONG chan, frame;
26 Src += (mod-1); /* set to MSB */
27 if (mod == 1) {
28 for (frame=0;frame<numFrames;frame++) {
29 for (chan=0;chan<fmt->numChannels;chan++) {
30 *Dst[chan]++ = (*Src++)+128; /* convert unsigned -> signed */
33 } else {
34 for (frame=0;frame<numFrames;frame++) {
35 for (chan=0;chan<fmt->numChannels;chan++) {
36 *Dst[chan]++ = *Src; Src += mod;
41 return numFrames;