diff ym2612.c @ 1551:ce1f93be0104

Small cleanup to audio interface between emulation code and renderer backend
author Michael Pavone <pavone@retrodev.com>
date Wed, 28 Mar 2018 23:36:08 -0700
parents 08bc099a622f
children 6ce36c3f250b
line wrap: on
line diff
--- a/ym2612.c	Mon Mar 26 23:36:39 2018 -0700
+++ b/ym2612.c	Wed Mar 28 23:36:08 2018 -0700
@@ -168,8 +168,8 @@
 	static uint8_t registered_finalize;
 	dfopen(debug_file, "ym_debug.txt", "w");
 	memset(context, 0, sizeof(*context));
-	context->audio_buffer = malloc(sizeof(*context->audio_buffer) * sample_limit*2);
-	context->back_buffer = malloc(sizeof(*context->audio_buffer) * sample_limit*2);
+	context->audio = render_audio_source(2);
+	context->audio_buffer = render_audio_source_buffer(context->audio);
 	context->sample_rate = sample_rate;
 	context->clock_inc = clock_div * 6;
 	ym_adjust_master_clock(context, master_clock);
@@ -266,13 +266,10 @@
 
 void ym_free(ym2612_context *context)
 {
+	render_free_source(context->audio);
 	if (context == log_context) {
 		ym_finalize_log();
 	}
-	free(context->audio_buffer);
-	//TODO: Figure out how to make this 100% safe
-	//audio thread could still be using this
-	free(context->back_buffer);
 	free(context);
 }
 
@@ -649,7 +646,8 @@
 				context->buffer_pos += 2;
 				if (context->buffer_pos == context->sample_limit) {
 					if (!headless) {
-						render_wait_ym(context);
+						context->audio_buffer = render_audio_ready(context->audio);
+						context->buffer_pos = 0;
 					}
 				}
 			}