diff options
author | Michael Pavone <pavone@retrodev.com> | 2020-05-08 00:22:54 -0700 |
---|---|---|
committer | Michael Pavone <pavone@retrodev.com> | 2020-05-08 00:22:54 -0700 |
commit | 6a8bc413fbfb25ed90aa83c6854835a759d41c35 (patch) | |
tree | 4ed0079facdaebe2f6155705cb3ce40278c55b1a /gen_player.c | |
parent | 50eed62a8b67f10b6f1001368fbc3fae3b3d39fd (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.c | 21 |
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; } |