{
retro_audio_buff_active = active;
retro_audio_buff_occupancy = occupancy;
- retro_audio_buff_underrun = underrun_likely;
+ retro_audio_buff_underrun |= underrun_likely;
}
static void retro_set_audio_buff_status_cb(void)
* buffer underruns */
uint32_t frame_time_usec = 1000000.0 / (is_pal_mode ? 50.0 : 60.0);
- /* Set latency to 6x current frame time... */
- retro_audio_latency = (unsigned)(6 * frame_time_usec / 1000);
+ /* Set latency... */
+ retro_audio_latency = (unsigned)((4 + frameskip_interval * 2) * frame_time_usec / 1000);
/* ...then round up to nearest multiple of 32 */
retro_audio_latency = (retro_audio_latency + 0x1F) & ~0x1F;
update_audio_latency = true;
frameskip_counter = 0;
+ pl_rearmed_cbs.fskip_force = 0;
}
static void update_variables(bool in_flight);
set_vout_fb();
print_internal_fps();
- /* Check whether current frame should
- * be skipped */
- pl_rearmed_cbs.fskip_force = 0;
- pl_rearmed_cbs.fskip_dirty = 0;
-
- if (frameskip_type != FRAMESKIP_NONE)
+ /* Check whether current frame should be skipped */
+ if (frameskip_type != FRAMESKIP_NONE && !pl_rearmed_cbs.fskip_force &&
+ frameskip_counter < frameskip_interval)
{
bool skip_frame = false;
break;
}
- if (skip_frame && frameskip_counter < frameskip_interval)
- pl_rearmed_cbs.fskip_force = 1;
+ pl_rearmed_cbs.fskip_force = skip_frame;
}
/* If frameskip/timing settings have changed,
psxRegs.stop = 0;
psxCpu->Execute(&psxRegs);
- if (pl_rearmed_cbs.fskip_dirty == 1) {
- if (frameskip_counter < frameskip_interval)
- frameskip_counter++;
- else if (frameskip_counter >= frameskip_interval || !pl_rearmed_cbs.fskip_force)
+ if (pl_rearmed_cbs.fskip_dirty) {
+ if (frameskip_counter >= frameskip_interval || !pl_rearmed_cbs.fskip_force)
frameskip_counter = 0;
+ else
+ frameskip_counter++;
+
+ if (pl_rearmed_cbs.fskip_force)
+ retro_audio_buff_underrun = false;
+ pl_rearmed_cbs.fskip_force = 0;
+ pl_rearmed_cbs.fskip_dirty = 0;
}
video_cb((vout_fb_dirty || !vout_can_dupe) ? vout_buf_ptr : NULL,
//#define RAW_FB_DISPLAY
#define gpu_log(gpu, fmt, ...) \
- printf("%d:%03d: " fmt, *(gpu)->state.frame_count, *(gpu)->state.hcnt, ##__VA_ARGS__)
+ SysPrintf("%d:%03d: " fmt, *(gpu)->state.frame_count, *(gpu)->state.hcnt, ##__VA_ARGS__)
#ifdef LOG_UNHANDLED
#define log_anomaly gpu_log