Import the current wip animation datatype and subclasses. further development will...
[AROS.git] / workbench / classes / datatypes / wav / wave_ieee_float.c
blob8ea12f68dcbc42c5d466d0e22b8acd7512db7839
1 /*
2 * wave.datatype
3 * (c) Fredrik Wikstrom
4 */
6 #include "wave_ieee_float.h"
8 DEC_SETUPPROTO(SetupIEEE_Float) {
9 struct WaveFormatEx * fmt;
10 fmt = data->fmt;
11 if (fmt->extraSize != 0)
12 return NOTOK;
13 switch (fmt->bitsPerSample) {
14 case 32:
15 data->Decode = DecodeIEEE_Float_32;
16 break;
17 case 64:
18 data->Decode = DecodeIEEE_Float_64;
19 break;
20 default:
21 data->Decode = NULL;
22 return DTERROR_UNKNOWN_COMPRESSION;
24 data->blockFrames = 1;
25 return OK;
28 DECODERPROTO(DecodeIEEE_Float_32) {
29 LONG frame,chan;
30 for (frame=0;frame<numFrames;frame++) {
31 for (chan=0;chan<fmt->numChannels;chan++) {
32 union {
33 FLOAT f;
34 ULONG i;
35 } samp;
36 samp.i = read_le32(Src); Src += 4;
37 *Dst[chan]++ = (BYTE)(samp.f * 127.0);
40 return numFrames;
43 DECODERPROTO(DecodeIEEE_Float_64) {
44 LONG frame,chan;
45 for (frame=0;frame<numFrames;frame++) {
46 for (chan=0;chan<fmt->numChannels;chan++) {
47 union {
48 DOUBLE f;
49 UQUAD i;
50 } samp;
51 samp.i = read_le64(Src); Src += 8;
52 *Dst[chan]++ = (BYTE)(samp.f * 127.0);
55 return numFrames;