Move Ogg Vorbis uncompression into separate function

This commit is contained in:
Marcus Weseloh 2018-03-23 18:21:54 +01:00
parent b1f7e6d9a0
commit 6bd326dcf8

View file

@ -1827,6 +1827,7 @@ fluid_zone_inside_range(fluid_zone_range_t* range, int key, int vel)
*
* SAMPLE
*/
static int uncompress_vorbis_sample(fluid_sample_t *sample);
/*
* fluid_sample_in_rom
@ -1840,6 +1841,52 @@ fluid_sample_in_rom(fluid_sample_t* sample)
/*
* fluid_sample_import_sfont
*/
int
fluid_sample_import_sfont(fluid_sample_t* sample, SFSample* sfsample, fluid_defsfont_t* sfont)
{
FLUID_STRCPY(sample->name, sfsample->name);
sample->data = sfont->sampledata;
sample->data24 = sfont->sample24data;
sample->start = sfsample->start;
sample->end = sfsample->start + sfsample->end;
sample->loopstart = sfsample->start + sfsample->loopstart;
sample->loopend = sfsample->start + sfsample->loopend;
sample->samplerate = sfsample->samplerate;
sample->origpitch = sfsample->origpitch;
sample->pitchadj = sfsample->pitchadj;
sample->sampletype = sfsample->sampletype;
if (sample->sampletype & FLUID_SAMPLETYPE_OGG_VORBIS)
{
int ret = uncompress_vorbis_sample(sample);
if (sample->data == NULL || ret == FLUID_FAILED)
{
return ret;
}
}
if (sample->sampletype & FLUID_SAMPLETYPE_ROM) {
sample->valid = 0;
FLUID_LOG(FLUID_WARN, "Ignoring sample '%s': can't use ROM samples", sample->name);
}
if (sample->end - sample->start < 8) {
sample->valid = 0;
FLUID_LOG(FLUID_WARN, "Ignoring sample '%s': too few sample data points", sample->name);
} else {
/* if (sample->loopstart < sample->start + 8) { */
/* FLUID_LOG(FLUID_WARN, "Fixing sample %s: at least 8 data points required before loop start", sample->name); */
/* sample->loopstart = sample->start + 8; */
/* } */
/* if (sample->loopend > sample->end - 8) { */
/* FLUID_LOG(FLUID_WARN, "Fixing sample %s: at least 8 data points required after loop end", sample->name); */
/* sample->loopend = sample->end - 8; */
/* } */
}
sample->valid = TRUE;
return FLUID_OK;
}
#if LIBSNDFILE_SUPPORT
// virtual file access rountines to allow for handling
// samples as virtual files in memory
@ -1894,26 +1941,9 @@ sfvio_tell (void* user_data)
return (sf_count_t)sample->userdata;
}
#endif
int
fluid_sample_import_sfont(fluid_sample_t* sample, SFSample* sfsample, fluid_defsfont_t* sfont)
static int uncompress_vorbis_sample(fluid_sample_t *sample)
{
FLUID_STRCPY(sample->name, sfsample->name);
sample->data = sfont->sampledata;
sample->data24 = sfont->sample24data;
sample->start = sfsample->start;
sample->end = sfsample->start + sfsample->end;
sample->loopstart = sfsample->start + sfsample->loopstart;
sample->loopend = sfsample->start + sfsample->loopend;
sample->samplerate = sfsample->samplerate;
sample->origpitch = sfsample->origpitch;
sample->pitchadj = sfsample->pitchadj;
sample->sampletype = sfsample->sampletype;
if (sample->sampletype & FLUID_SAMPLETYPE_OGG_VORBIS)
{
#if LIBSNDFILE_SUPPORT
SNDFILE *sndfile;
SF_INFO sfinfo;
SF_VIRTUAL_IO sfvio = {
@ -2000,32 +2030,15 @@ fluid_sample_import_sfont(fluid_sample_t* sample, SFSample* sfsample, fluid_defs
{
FLUID_LOG (FLUID_WARN, _("Vorbis sample '%s' has invalid loop points"), sample->name);
}
#else
return FLUID_FAILED;
#endif
}
if (sample->sampletype & FLUID_SAMPLETYPE_ROM) {
sample->valid = 0;
FLUID_LOG(FLUID_WARN, "Ignoring sample '%s': can't use ROM samples", sample->name);
}
if (sample->end - sample->start < 8) {
sample->valid = 0;
FLUID_LOG(FLUID_WARN, "Ignoring sample '%s': too few sample data points", sample->name);
} else {
/* if (sample->loopstart < sample->start + 8) { */
/* FLUID_LOG(FLUID_WARN, "Fixing sample %s: at least 8 data points required before loop start", sample->name); */
/* sample->loopstart = sample->start + 8; */
/* } */
/* if (sample->loopend > sample->end - 8) { */
/* FLUID_LOG(FLUID_WARN, "Fixing sample %s: at least 8 data points required after loop end", sample->name); */
/* sample->loopend = sample->end - 8; */
/* } */
}
sample->valid = TRUE;
return FLUID_OK;
return FLUID_OK;
}
#else
static int uncompress_vorbis_sample(fluid_sample_t *sample)
{
return FLUID_FAILED;
}
#endif