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);
--- a/mediaplayer.h	Fri Nov 17 01:05:32 2023 -0800
+++ b/mediaplayer.h	Sat Nov 18 09:36:29 2023 -0800
@@ -21,6 +21,7 @@
 	chip_adjust_fun adjust;
 	chip_scope_fun  scope;
 	chip_noarg_fun  no_scope;
+	chip_noarg_fun  free;
 	data_block      *blocks;
 	uint32_t        clock;
 	uint32_t        samples;