mirror of
https://github.com/vgmstream/vgmstream.git
synced 2025-02-17 11:18:31 +01:00
Merged coding-specific things into vgmstream so the layouts don't need to know
everything. git-svn-id: https://vgmstream.svn.sourceforge.net/svnroot/vgmstream@17 51a99a44-fe44-0410-b1ba-c3e57ba2b86b
This commit is contained in:
parent
7472c2e4f9
commit
d80919154b
@ -1,33 +1,12 @@
|
||||
#include "interleave.h"
|
||||
#include "../coding/adx_decoder.h"
|
||||
#include "../coding/gcdsp_decoder.h"
|
||||
#include "../coding/pcm_decoder.h"
|
||||
#include "../vgmstream.h"
|
||||
|
||||
void render_vgmstream_interleave(sample * buffer, int32_t sample_count, VGMSTREAM * vgmstream) {
|
||||
int samples_written=0;
|
||||
|
||||
int frame_size;
|
||||
int samples_per_frame;
|
||||
int frame_size = get_vgmstream_frame_size(vgmstream);
|
||||
int samples_per_frame = get_vgmstream_samples_per_frame(vgmstream);;
|
||||
int samples_this_block;
|
||||
switch (vgmstream->coding_type) {
|
||||
case coding_CRI_ADX:
|
||||
frame_size=18;
|
||||
samples_per_frame=32;
|
||||
break;
|
||||
case coding_NGC_DSP:
|
||||
frame_size=8;
|
||||
samples_per_frame=14;
|
||||
break;
|
||||
case coding_PCM16LE:
|
||||
case coding_PCM16BE:
|
||||
frame_size=2;
|
||||
samples_per_frame=1;
|
||||
break;
|
||||
case coding_PCM8:
|
||||
frame_size=1;
|
||||
samples_per_frame=1;
|
||||
break;
|
||||
}
|
||||
|
||||
samples_this_block = vgmstream->interleave_block_size / frame_size * samples_per_frame;
|
||||
|
||||
@ -106,44 +85,7 @@ void render_vgmstream_interleave(sample * buffer, int32_t sample_count, VGMSTREA
|
||||
if (samples_written+samples_to_do > sample_count)
|
||||
samples_to_do=sample_count-samples_written;
|
||||
|
||||
switch (vgmstream->coding_type) {
|
||||
case coding_CRI_ADX:
|
||||
for (chan=0;chan<vgmstream->channels;chan++) {
|
||||
decode_adx(&vgmstream->ch[chan],buffer+samples_written*vgmstream->channels+chan,
|
||||
vgmstream->channels,vgmstream->samples_into_block,
|
||||
samples_to_do);
|
||||
}
|
||||
|
||||
break;
|
||||
case coding_NGC_DSP:
|
||||
for (chan=0;chan<vgmstream->channels;chan++) {
|
||||
decode_gcdsp(&vgmstream->ch[chan],buffer+samples_written*vgmstream->channels+chan,
|
||||
vgmstream->channels,vgmstream->samples_into_block,
|
||||
samples_to_do);
|
||||
}
|
||||
break;
|
||||
case coding_PCM16LE:
|
||||
for (chan=0;chan<vgmstream->channels;chan++) {
|
||||
decode_pcm16LE(&vgmstream->ch[chan],buffer+samples_written*vgmstream->channels+chan,
|
||||
vgmstream->channels,vgmstream->samples_into_block,
|
||||
samples_to_do);
|
||||
}
|
||||
break;
|
||||
case coding_PCM16BE:
|
||||
for (chan=0;chan<vgmstream->channels;chan++) {
|
||||
decode_pcm16BE(&vgmstream->ch[chan],buffer+samples_written*vgmstream->channels+chan,
|
||||
vgmstream->channels,vgmstream->samples_into_block,
|
||||
samples_to_do);
|
||||
}
|
||||
break;
|
||||
case coding_PCM8:
|
||||
for (chan=0;chan<vgmstream->channels;chan++) {
|
||||
decode_pcm8(&vgmstream->ch[chan],buffer+samples_written*vgmstream->channels+chan,
|
||||
vgmstream->channels,vgmstream->samples_into_block,
|
||||
samples_to_do);
|
||||
}
|
||||
break;
|
||||
}
|
||||
decode_vgmstream(vgmstream, samples_written, samples_to_do, buffer);
|
||||
|
||||
samples_written += samples_to_do;
|
||||
vgmstream->current_sample += samples_to_do;
|
||||
|
@ -1,27 +1,11 @@
|
||||
#include "nolayout.h"
|
||||
#include "../coding/adx_decoder.h"
|
||||
#include "../coding/gcdsp_decoder.h"
|
||||
#include "../coding/pcm_decoder.h"
|
||||
#include "../vgmstream.h"
|
||||
|
||||
void render_vgmstream_nolayout(sample * buffer, int32_t sample_count, VGMSTREAM * vgmstream) {
|
||||
int samples_written=0;
|
||||
|
||||
const int samples_this_block = vgmstream->num_samples;
|
||||
int samples_per_frame;
|
||||
|
||||
switch(vgmstream->coding_type) {
|
||||
case coding_CRI_ADX:
|
||||
samples_per_frame = 32;
|
||||
break;
|
||||
case coding_NGC_DSP:
|
||||
samples_per_frame = 14;
|
||||
break;
|
||||
case coding_PCM16LE:
|
||||
case coding_PCM16BE:
|
||||
case coding_PCM8:
|
||||
samples_per_frame = 1;
|
||||
break;
|
||||
}
|
||||
int samples_per_frame = get_vgmstream_samples_per_frame(vgmstream);
|
||||
|
||||
while (samples_written<sample_count) {
|
||||
int samples_to_do;
|
||||
@ -74,23 +58,7 @@ void render_vgmstream_nolayout(sample * buffer, int32_t sample_count, VGMSTREAM
|
||||
if (samples_written+samples_to_do > sample_count)
|
||||
samples_to_do=sample_count-samples_written;
|
||||
|
||||
switch (vgmstream->coding_type) {
|
||||
case coding_CRI_ADX:
|
||||
for (chan=0;chan<vgmstream->channels;chan++) {
|
||||
decode_adx(&vgmstream->ch[chan],buffer+samples_written*vgmstream->channels+chan,
|
||||
vgmstream->channels,vgmstream->samples_into_block,
|
||||
samples_to_do);
|
||||
}
|
||||
|
||||
break;
|
||||
case coding_NGC_DSP:
|
||||
for (chan=0;chan<vgmstream->channels;chan++) {
|
||||
decode_gcdsp(&vgmstream->ch[chan],buffer+samples_written*vgmstream->channels+chan,
|
||||
vgmstream->channels,vgmstream->samples_into_block,
|
||||
samples_to_do);
|
||||
}
|
||||
break;
|
||||
}
|
||||
decode_vgmstream(vgmstream, samples_written, samples_to_do, buffer);
|
||||
|
||||
samples_written += samples_to_do;
|
||||
vgmstream->current_sample += samples_to_do;
|
||||
|
@ -3,6 +3,9 @@
|
||||
#include "meta/brstm.h"
|
||||
#include "layout/interleave.h"
|
||||
#include "layout/nolayout.h"
|
||||
#include "coding/adx_decoder.h"
|
||||
#include "coding/gcdsp_decoder.h"
|
||||
#include "coding/pcm_decoder.h"
|
||||
|
||||
/*
|
||||
* List of functions that will recognize files. These should correspond pretty
|
||||
@ -111,3 +114,77 @@ void render_vgmstream(sample * buffer, int32_t sample_count, VGMSTREAM * vgmstre
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int get_vgmstream_samples_per_frame(VGMSTREAM * vgmstream) {
|
||||
switch (vgmstream->coding_type) {
|
||||
case coding_CRI_ADX:
|
||||
return 32;
|
||||
case coding_NGC_DSP:
|
||||
return 14;
|
||||
case coding_PCM16LE:
|
||||
case coding_PCM16BE:
|
||||
case coding_PCM8:
|
||||
return 1;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int get_vgmstream_frame_size(VGMSTREAM * vgmstream) {
|
||||
switch (vgmstream->coding_type) {
|
||||
case coding_CRI_ADX:
|
||||
return 18;
|
||||
case coding_NGC_DSP:
|
||||
return 8;
|
||||
case coding_PCM16LE:
|
||||
case coding_PCM16BE:
|
||||
return 2;
|
||||
case coding_PCM8:
|
||||
return 1;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void decode_vgmstream(VGMSTREAM * vgmstream, int samples_written, int samples_to_do, sample * buffer) {
|
||||
int chan;
|
||||
|
||||
switch (vgmstream->coding_type) {
|
||||
case coding_CRI_ADX:
|
||||
for (chan=0;chan<vgmstream->channels;chan++) {
|
||||
decode_adx(&vgmstream->ch[chan],buffer+samples_written*vgmstream->channels+chan,
|
||||
vgmstream->channels,vgmstream->samples_into_block,
|
||||
samples_to_do);
|
||||
}
|
||||
|
||||
break;
|
||||
case coding_NGC_DSP:
|
||||
for (chan=0;chan<vgmstream->channels;chan++) {
|
||||
decode_gcdsp(&vgmstream->ch[chan],buffer+samples_written*vgmstream->channels+chan,
|
||||
vgmstream->channels,vgmstream->samples_into_block,
|
||||
samples_to_do);
|
||||
}
|
||||
break;
|
||||
case coding_PCM16LE:
|
||||
for (chan=0;chan<vgmstream->channels;chan++) {
|
||||
decode_pcm16LE(&vgmstream->ch[chan],buffer+samples_written*vgmstream->channels+chan,
|
||||
vgmstream->channels,vgmstream->samples_into_block,
|
||||
samples_to_do);
|
||||
}
|
||||
break;
|
||||
case coding_PCM16BE:
|
||||
for (chan=0;chan<vgmstream->channels;chan++) {
|
||||
decode_pcm16BE(&vgmstream->ch[chan],buffer+samples_written*vgmstream->channels+chan,
|
||||
vgmstream->channels,vgmstream->samples_into_block,
|
||||
samples_to_do);
|
||||
}
|
||||
break;
|
||||
case coding_PCM8:
|
||||
for (chan=0;chan<vgmstream->channels;chan++) {
|
||||
decode_pcm8(&vgmstream->ch[chan],buffer+samples_written*vgmstream->channels+chan,
|
||||
vgmstream->channels,vgmstream->samples_into_block,
|
||||
samples_to_do);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -144,4 +144,9 @@ int32_t get_vgmstream_play_samples(double looptimes, double fadetime, VGMSTREAM
|
||||
/* render! */
|
||||
void render_vgmstream(sample * buffer, int32_t sample_count, VGMSTREAM * vgmstream);
|
||||
|
||||
int get_vgmstream_samples_per_frame(VGMSTREAM * vgmstream);
|
||||
int get_vgmstream_frame_size(VGMSTREAM * vgmstream);
|
||||
|
||||
void decode_vgmstream(VGMSTREAM * vgmstream, int samples_written, int samples_to_do, sample * buffer);
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user