Mercurial > repos > blastem
comparison 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 |
comparison
equal
deleted
inserted
replaced
1966:b3c2dcae7dfc | 1967:bd70f1e15684 |
---|---|
22 ym_run(gen->ym, target); | 22 ym_run(gen->ym, target); |
23 | 23 |
24 //printf("Target: %d, YM bufferpos: %d, PSG bufferpos: %d\n", target, gen->ym->buffer_pos, gen->psg->buffer_pos * 2); | 24 //printf("Target: %d, YM bufferpos: %d, PSG bufferpos: %d\n", target, gen->ym->buffer_pos, gen->psg->buffer_pos * 2); |
25 } | 25 } |
26 | 26 |
27 void start_context(system_header *sys, char *statefile) | 27 static void run(gen_player *player) |
28 { | 28 { |
29 gen_player *player = (gen_player *)sys; | |
30 while(player->reader.socket || player->reader.buffer.cur_pos < player->reader.buffer.size) | 29 while(player->reader.socket || player->reader.buffer.cur_pos < player->reader.buffer.size) |
31 { | 30 { |
32 uint32_t cycle; | 31 uint32_t cycle; |
33 uint8_t event = reader_next_event(&player->reader, &cycle); | 32 uint8_t event = reader_next_event(&player->reader, &cycle); |
34 switch (event) | 33 switch (event) |
90 } | 89 } |
91 if (!player->reader.socket) { | 90 if (!player->reader.socket) { |
92 reader_ensure_data(&player->reader, 1); | 91 reader_ensure_data(&player->reader, 1); |
93 } | 92 } |
94 } | 93 } |
95 | 94 } |
95 | |
96 static int thread_main(void *player) | |
97 { | |
98 run(player); | |
99 return 0; | |
100 } | |
101 | |
102 void start_context(system_header *sys, char *statefile) | |
103 { | |
104 gen_player *player = (gen_player *)sys; | |
105 if (player->reader.socket) { | |
106 render_create_thread(&player->thread, "player", thread_main, player); | |
107 } else { | |
108 run(player); | |
109 } | |
96 } | 110 } |
97 | 111 |
98 static void gamepad_down(system_header *system, uint8_t gamepad_num, uint8_t button) | 112 static void gamepad_down(system_header *system, uint8_t gamepad_num, uint8_t button) |
99 { | 113 { |
100 gen_player *player = (gen_player *)system; | 114 gen_player *player = (gen_player *)system; |
149 gen_player *alloc_config_gen_player_reader(event_reader *reader) | 163 gen_player *alloc_config_gen_player_reader(event_reader *reader) |
150 { | 164 { |
151 gen_player *player = calloc(1, sizeof(gen_player)); | 165 gen_player *player = calloc(1, sizeof(gen_player)); |
152 player->reader = *reader; | 166 player->reader = *reader; |
153 inflateCopy(&player->reader.input_stream, &reader->input_stream); | 167 inflateCopy(&player->reader.input_stream, &reader->input_stream); |
168 render_set_external_sync(1); | |
154 config_common(player); | 169 config_common(player); |
155 return player; | 170 return player; |
156 } | 171 } |
157 | 172 |