Mercurial > repos > blastem
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; }