diff gen_player.c @ 1967:bd70f1e15684

Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
author Michael Pavone <pavone@retrodev.com>
date Fri, 08 May 2020 00:22:54 -0700
parents 9c01945b5d20
children a042e046f7f2
line wrap: on
line diff
--- a/gen_player.c	Mon May 04 23:58:37 2020 -0700
+++ b/gen_player.c	Fri May 08 00:22:54 2020 -0700
@@ -24,9 +24,8 @@
 	//printf("Target: %d, YM bufferpos: %d, PSG bufferpos: %d\n", target, gen->ym->buffer_pos, gen->psg->buffer_pos * 2);
 }
 
-void start_context(system_header *sys, char *statefile)
+static void run(gen_player *player)
 {
-	gen_player *player = (gen_player *)sys;
 	while(player->reader.socket || player->reader.buffer.cur_pos < player->reader.buffer.size)
 	{
 		uint32_t cycle;
@@ -92,7 +91,22 @@
 			reader_ensure_data(&player->reader, 1);
 		}
 	}
-	
+}
+
+static int thread_main(void *player)
+{
+	run(player);
+	return 0;
+}
+
+void start_context(system_header *sys, char *statefile)
+{
+	gen_player *player = (gen_player *)sys;
+	if (player->reader.socket) {
+		render_create_thread(&player->thread, "player", thread_main, player);
+	} else {
+		run(player);
+	}
 }
 
 static void gamepad_down(system_header *system, uint8_t gamepad_num, uint8_t button)
@@ -151,6 +165,7 @@
 	gen_player *player = calloc(1, sizeof(gen_player));
 	player->reader = *reader;
 	inflateCopy(&player->reader.input_stream, &reader->input_stream);
+	render_set_external_sync(1);
 	config_common(player);
 	return player;
 }