Increase soundfont references only when assigning preset to channel

Previously, the refcount was increased when retrieving a preset from
a soundfont. That doesn't really make sense anymore.
This commit is contained in:
Marcus Weseloh 2018-04-08 22:56:02 +02:00
parent c6bdc4bc12
commit efa97718fa
2 changed files with 23 additions and 22 deletions

View file

@ -219,16 +219,27 @@ fluid_channel_reset(fluid_channel_t* chan)
int
fluid_channel_set_preset(fluid_channel_t* chan, fluid_preset_t* preset)
{
fluid_preset_notify (chan->preset, FLUID_PRESET_UNSELECTED, chan->channum);
fluid_sfont_t *sfont;
if (chan->preset == preset)
{
return FLUID_OK;
}
if (chan->preset) {
fluid_sfont_t *sfont;
sfont = chan->preset->sfont;
fluid_synth_sfont_unref (chan->synth, sfont); /* -- unref preset's SoundFont */
sfont->refcount--;
}
fluid_preset_notify (chan->preset, FLUID_PRESET_UNSELECTED, chan->channum);
chan->preset = preset;
if (preset) {
sfont = preset->sfont;
sfont->refcount++;
}
fluid_preset_notify (preset, FLUID_PRESET_SELECTED, chan->channum);
return FLUID_OK;

View file

@ -2214,7 +2214,6 @@ static fluid_preset_t*
fluid_synth_get_preset(fluid_synth_t* synth, unsigned int sfontnum,
unsigned int banknum, unsigned int prognum)
{
fluid_preset_t *preset = NULL;
fluid_sfont_t *sfont;
fluid_list_t *list;
@ -2226,14 +2225,11 @@ fluid_synth_get_preset(fluid_synth_t* synth, unsigned int sfontnum,
if (fluid_sfont_get_id (sfont) == sfontnum)
{
preset = fluid_sfont_get_preset (sfont,
banknum - sfont->bankofs, prognum);
if (preset) sfont->refcount++; /* Add reference to SoundFont */
break;
return fluid_sfont_get_preset (sfont, banknum - sfont->bankofs, prognum);
}
}
return preset;
return NULL;
}
/* Get a preset by SoundFont name, bank and program.
@ -2243,7 +2239,6 @@ static fluid_preset_t*
fluid_synth_get_preset_by_sfont_name(fluid_synth_t* synth, const char *sfontname,
unsigned int banknum, unsigned int prognum)
{
fluid_preset_t *preset = NULL;
fluid_sfont_t *sfont;
fluid_list_t *list;
@ -2252,14 +2247,11 @@ fluid_synth_get_preset_by_sfont_name(fluid_synth_t* synth, const char *sfontname
if (FLUID_STRCMP (fluid_sfont_get_name (sfont), sfontname) == 0)
{
preset = fluid_sfont_get_preset (sfont,
banknum - sfont->bankofs, prognum);
if (preset) sfont->refcount++; /* Add reference to SoundFont */
break;
return fluid_sfont_get_preset (sfont, banknum - sfont->bankofs, prognum);
}
}
return preset;
return NULL;
}
/* Find a preset by bank and program numbers.
@ -2269,23 +2261,21 @@ fluid_preset_t*
fluid_synth_find_preset(fluid_synth_t* synth, unsigned int banknum,
unsigned int prognum)
{
fluid_preset_t *preset = NULL;
fluid_preset_t *preset;
fluid_sfont_t *sfont;
fluid_list_t *list;
for (list = synth->sfont; list; list = fluid_list_next (list)) {
sfont = fluid_list_get (list);
preset = fluid_sfont_get_preset (sfont,
banknum - sfont->bankofs, prognum);
preset = fluid_sfont_get_preset (sfont, banknum - sfont->bankofs, prognum);
if (preset)
{
sfont->refcount++; /* Add reference to SoundFont */
break;
return preset;
}
}
return preset;
return NULL;
}
/**