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