Cleanup rwav

This commit is contained in:
twinaphex 2017-05-08 18:45:37 +02:00
parent de6e138d15
commit fec24bd47b
3 changed files with 112 additions and 108 deletions

View File

@ -255,7 +255,7 @@ audio_mixer_sound_t* audio_mixer_load_wav(const char* path)
size_t samples = 0;
/* Result */
audio_mixer_sound_t* sound = NULL;
int rwav_ret = 0;
enum rwav_state rwav_ret = RWAV_ITERATE_ERROR;
if (filestream_read_file(path, &buffer, &size) == 0)
return NULL;

View File

@ -37,6 +37,15 @@ enum
ITER_COPY_SAMPLES_16
};
struct rwav_iterator
{
rwav_t *out;
const uint8_t *data;
size_t size;
size_t i, j;
int step;
};
void rwav_init(rwav_iterator_t* iter, rwav_t* out, const void* buf, size_t size)
{
iter->out = out;
@ -49,11 +58,11 @@ void rwav_init(rwav_iterator_t* iter, rwav_t* out, const void* buf, size_t size)
int rwav_iterate(rwav_iterator_t *iter)
{
size_t s;
uint16_t *u16 = NULL;
void *samples = NULL;
rwav_t *rwav = iter->out;
const uint8_t *data = iter->data;
uint16_t *u16;
void *samples;
size_t s;
switch (iter->step)
{
@ -109,6 +118,7 @@ int rwav_iterate(rwav_iterator_t *iter)
{
iter->step = ITER_COPY_SAMPLES_8;
/* TODO/FIXME - what is going on here? */
case ITER_COPY_SAMPLES_8:
s = rwav->subchunk2size - iter->i;
@ -117,14 +127,13 @@ int rwav_iterate(rwav_iterator_t *iter)
memcpy((void*)((uint8_t*)rwav->samples + iter->i), (void *)(iter->data + 44 + iter->i), s);
iter->i += s;
return iter->i < rwav->subchunk2size ? RWAV_ITERATE_MORE : RWAV_ITERATE_DONE;
}
else
{
iter->step = ITER_COPY_SAMPLES_16;
iter->j = 0;
/* TODO/FIXME - what is going on here? */
case ITER_COPY_SAMPLES_16:
s = rwav->subchunk2size - iter->i;
@ -139,9 +148,8 @@ int rwav_iterate(rwav_iterator_t *iter)
iter->i += 2;
s -= 2;
}
return iter->i < rwav->subchunk2size ? RWAV_ITERATE_MORE : RWAV_ITERATE_DONE;
}
return iter->i < rwav->subchunk2size ? RWAV_ITERATE_MORE : RWAV_ITERATE_DONE;
}
return RWAV_ITERATE_ERROR;
@ -150,7 +158,14 @@ int rwav_iterate(rwav_iterator_t *iter)
int rwav_load(rwav_t* out, const void* buf, size_t size)
{
int res;
rwav_iterator_t iter = {0};
rwav_iterator_t iter;
iter.out = NULL;
iter.data = NULL;
iter.size = 0;
iter.i = 0;
iter.j = 0;
iter.step = 0;
rwav_init(&iter, out, buf, size);

View File

@ -47,28 +47,17 @@ typedef struct
/* PCM data */
const void* samples;
}
rwav_t;
} rwav_t;
enum
enum rwav_state
{
RWAV_ITERATE_ERROR = -1,
RWAV_ITERATE_MORE = 0,
RWAV_ITERATE_DONE = 1,
RWAV_ITERATE_BUF_SIZE = 4096
};
typedef struct
{
/* internal data, don't touch */
rwav_t *out;
const uint8_t *data;
size_t size;
size_t i, j;
int step;
}
rwav_iterator_t;
typedef struct rwav_iterator rwav_iterator_t;
/**
* Initializes the iterator to fill the out structure with data parsed from buf.