mirror of
https://github.com/ZDoom/fluidsynth.git
synced 2025-02-22 11:51:56 +00:00
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:
parent
c6bdc4bc12
commit
efa97718fa
2 changed files with 23 additions and 22 deletions
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in a new issue