summaryrefslogtreecommitdiff
path: root/gen_player.c
diff options
context:
space:
mode:
authorMichael Pavone <pavone@retrodev.com>2020-05-08 00:22:54 -0700
committerMichael Pavone <pavone@retrodev.com>2020-05-08 00:22:54 -0700
commit6a8bc413fbfb25ed90aa83c6854835a759d41c35 (patch)
tree4ed0079facdaebe2f6155705cb3ce40278c55b1a /gen_player.c
parent50eed62a8b67f10b6f1001368fbc3fae3b3d39fd (diff)
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Diffstat (limited to 'gen_player.c')
-rw-r--r--gen_player.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/gen_player.c b/gen_player.c
index 74eab4b..24c4d31 100644
--- a/gen_player.c
+++ b/gen_player.c
@@ -24,9 +24,8 @@ static void sync_sound(gen_player *gen, uint32_t target)
//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 @@ void start_context(system_header *sys, char *statefile)
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 *alloc_config_gen_player_reader(event_reader *reader)
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;
}