summaryrefslogtreecommitdiff
path: root/libblastem.c
diff options
context:
space:
mode:
authorMichael Pavone <pavone@retrodev.com>2019-09-21 20:26:12 -0700
committerMichael Pavone <pavone@retrodev.com>2019-09-21 20:26:12 -0700
commitd00b29027a1d4a4301109735914bb5faf3481aaf (patch)
treec364354318a68da474a19cd874b4dec73d08469c /libblastem.c
parent0815374d15e39b203a8d133dad9104747e4057be (diff)
Report more accurate frame and sample rates to frontend in libretro target
Diffstat (limited to 'libblastem.c')
-rw-r--r--libblastem.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/libblastem.c b/libblastem.c
index 5563b26..afed82c 100644
--- a/libblastem.c
+++ b/libblastem.c
@@ -126,6 +126,7 @@ static void update_overscan(void)
}
}
+static int32_t sample_rate;
RETRO_API void retro_get_system_av_info(struct retro_system_av_info *info)
{
update_overscan();
@@ -135,8 +136,11 @@ RETRO_API void retro_get_system_av_info(struct retro_system_av_info *info)
last_height = info->geometry.base_height;
info->geometry.max_height = info->geometry.base_height * 2;
info->geometry.aspect_ratio = 0;
- info->timing.fps = video_standard == VID_NTSC ? 60 : 50;
- info->timing.sample_rate = 53267; //approximate sample rate of YM2612
+ double master_clock = video_standard == VID_NTSC ? 53693175 : 53203395;
+ double lines = video_standard == VID_NTSC ? 262 : 313;
+ info->timing.fps = master_clock / (3420.0 * lines);
+ info->timing.sample_rate = master_clock / (7 * 6 * 24); //sample rate of YM2612
+ sample_rate = info->timing.sample_rate;
}
RETRO_API void retro_set_controller_port_device(unsigned port, unsigned device)
@@ -416,7 +420,7 @@ static void check_put_sample(void)
{
for (int i = 0; i < num_audio_sources; i++)
{
- int32_t min_samples = audio_sources[i]->freq / 53267;
+ int32_t min_samples = audio_sources[i]->freq / sample_rate;
if (audio_sources[i]->num_samples < min_samples) {
return;
}