mirror of
https://github.com/ZDoom/fluidsynth.git
synced 2025-06-02 18:11:19 +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
|
int
|
||||||
fluid_channel_set_preset(fluid_channel_t* chan, fluid_preset_t* preset)
|
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) {
|
if (chan->preset) {
|
||||||
fluid_sfont_t *sfont;
|
|
||||||
sfont = chan->preset->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;
|
chan->preset = preset;
|
||||||
|
|
||||||
|
if (preset) {
|
||||||
|
sfont = preset->sfont;
|
||||||
|
sfont->refcount++;
|
||||||
|
}
|
||||||
|
|
||||||
fluid_preset_notify (preset, FLUID_PRESET_SELECTED, chan->channum);
|
fluid_preset_notify (preset, FLUID_PRESET_SELECTED, chan->channum);
|
||||||
|
|
||||||
return FLUID_OK;
|
return FLUID_OK;
|
||||||
|
|
|
@ -2214,7 +2214,6 @@ static fluid_preset_t*
|
||||||
fluid_synth_get_preset(fluid_synth_t* synth, unsigned int sfontnum,
|
fluid_synth_get_preset(fluid_synth_t* synth, unsigned int sfontnum,
|
||||||
unsigned int banknum, unsigned int prognum)
|
unsigned int banknum, unsigned int prognum)
|
||||||
{
|
{
|
||||||
fluid_preset_t *preset = NULL;
|
|
||||||
fluid_sfont_t *sfont;
|
fluid_sfont_t *sfont;
|
||||||
fluid_list_t *list;
|
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)
|
if (fluid_sfont_get_id (sfont) == sfontnum)
|
||||||
{
|
{
|
||||||
preset = fluid_sfont_get_preset (sfont,
|
return fluid_sfont_get_preset (sfont, banknum - sfont->bankofs, prognum);
|
||||||
banknum - sfont->bankofs, prognum);
|
|
||||||
if (preset) sfont->refcount++; /* Add reference to SoundFont */
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return preset;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get a preset by SoundFont name, bank and program.
|
/* 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,
|
fluid_synth_get_preset_by_sfont_name(fluid_synth_t* synth, const char *sfontname,
|
||||||
unsigned int banknum, unsigned int prognum)
|
unsigned int banknum, unsigned int prognum)
|
||||||
{
|
{
|
||||||
fluid_preset_t *preset = NULL;
|
|
||||||
fluid_sfont_t *sfont;
|
fluid_sfont_t *sfont;
|
||||||
fluid_list_t *list;
|
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)
|
if (FLUID_STRCMP (fluid_sfont_get_name (sfont), sfontname) == 0)
|
||||||
{
|
{
|
||||||
preset = fluid_sfont_get_preset (sfont,
|
return fluid_sfont_get_preset (sfont, banknum - sfont->bankofs, prognum);
|
||||||
banknum - sfont->bankofs, prognum);
|
|
||||||
if (preset) sfont->refcount++; /* Add reference to SoundFont */
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return preset;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Find a preset by bank and program numbers.
|
/* 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,
|
fluid_synth_find_preset(fluid_synth_t* synth, unsigned int banknum,
|
||||||
unsigned int prognum)
|
unsigned int prognum)
|
||||||
{
|
{
|
||||||
fluid_preset_t *preset = NULL;
|
fluid_preset_t *preset;
|
||||||
fluid_sfont_t *sfont;
|
fluid_sfont_t *sfont;
|
||||||
fluid_list_t *list;
|
fluid_list_t *list;
|
||||||
|
|
||||||
for (list = synth->sfont; list; list = fluid_list_next (list)) {
|
for (list = synth->sfont; list; list = fluid_list_next (list)) {
|
||||||
sfont = fluid_list_get (list);
|
sfont = fluid_list_get (list);
|
||||||
|
|
||||||
preset = fluid_sfont_get_preset (sfont,
|
preset = fluid_sfont_get_preset (sfont, banknum - sfont->bankofs, prognum);
|
||||||
banknum - sfont->bankofs, prognum);
|
|
||||||
if (preset)
|
if (preset)
|
||||||
{
|
{
|
||||||
sfont->refcount++; /* Add reference to SoundFont */
|
return preset;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return preset;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue