Import the current wip animation datatype and subclasses. further development will...
[AROS.git] / workbench / classes / datatypes / wav / wave_mpeg.c
blob7130bce7eab28b6d67bd0e01acd9582db1de0a87
1 /*
2 * wave.datatype
3 * (c) Fredrik Wikstrom (fredrik@a500.org)
4 */
6 #include "wave_mpeg.h"
8 DEC_SETUPPROTO(SetupMPEG) {
9 return OK;
12 /* DEC_CLEANUPPROTO(CleanupMPEG) {
13 } */
15 DECODERPROTO_v2(DecodeMPEG) {
16 struct ClassBase * libBase = data->libBase;
17 struct MPEGA_STREAM *mpas;
18 struct Hook bshook = {0};
20 MPA_CTRL mpactrl = {
21 NULL, // bitstream access hook
22 // layers 1 & 2 settings (mono, stereo)
23 { FALSE, { 2, 0, 44100 }, { 2, 0, 44100 } },
24 // layer 3 settings (mono, stereo)
25 { FALSE, { 2, 0, 44100 }, { 2, 0, 44100 } },
26 1, // check for validity at start
27 0 // size of bitstream buffer (0 -> default)
30 bshook.h_Entry = (HOOKFUNC)bshook_func;
31 bshook.h_SubEntry = (HOOKFUNC)data;
32 bshook.h_Data = (APTR)file;
33 mpactrl.bs_access = &bshook;
35 if (mpas = IMPEGA->MPEGA_open(NULL, &mpactrl)) {
36 WORD *pcm[2];
37 LONG pcm_count;
39 pcm[0] = AllocVec(MPEGA_PCM_SIZE, MEMF_CLEAR);
40 pcm[1] = AllocVec(MPEGA_PCM_SIZE, MEMF_CLEAR);
42 if (pcm[0] && pcm[1]) {
44 while ((pcm_count = IMPEGA->MPEGA_decode_frame(mpas, pcm)) >= 0) {
49 FreeVec(pcm[0]);
50 FreeVec(pcm[1]);