Mercurial > repos > blastem
changeset 2377:30e59954eab9
Properly free sound chips in VGM player
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 18 Nov 2023 09:36:29 -0800 |
parents | 1c09f5be285b |
children | af3075c1e421 |
files | mediaplayer.c mediaplayer.h |
diffstat | 2 files changed, 13 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/mediaplayer.c Fri Nov 17 01:05:32 2023 -0800 +++ b/mediaplayer.c Sat Nov 18 09:36:29 2023 -0800 @@ -94,6 +94,13 @@ pcm->scope = NULL; } +void pcm_free(void *context) +{ + rf5c164 *pcm = context; + rf5c164_deinit(pcm); + free(pcm); +} + uint8_t *find_block(data_block *head, uint32_t offset, uint32_t size) { if (!head) { @@ -547,6 +554,7 @@ .adjust = ym_adjust, .scope = ym_scope, .no_scope = ym_no_scope, + .free = (chip_noarg_fun)ym_free, .clock = player->vgm->ym2612_clk, .samples = 0, .cmd = CMD_YM2612_0, @@ -562,6 +570,7 @@ .adjust = psg_adjust, .scope = psg_scope, .no_scope = ym_no_scope, + .free = (chip_noarg_fun)psg_free, .clock = player->vgm->sn76489_clk, .samples = 0, .cmd = CMD_PSG, @@ -577,6 +586,7 @@ .adjust = pcm_adjust, .scope = pcm_scope, .no_scope = pcm_no_scope, + .free = pcm_free, .clock = player->vgm_ext->rf5c68_clk, .samples = 0, .cmd = CMD_PCM68_REG, @@ -592,6 +602,7 @@ .adjust = pcm_adjust, .scope = pcm_scope, .no_scope = pcm_no_scope, + .free = pcm_free, .clock = player->vgm_ext->rf5c164_clk, .samples = 0, .cmd = CMD_PCM164_REG, @@ -719,8 +730,7 @@ media_player *player = (media_player *)system; for (uint32_t i = 0; i < player->num_chips; i++) { - //TODO properly free chips - free(player->chips[i].context); + player->chips[i].free(player->chips[i].context); } free(player->chips); free(player->vgm);