mirror of
https://github.com/libretro/RetroArch
synced 2025-04-07 13:23:32 +00:00
(Auto frame delay) silence some warnings that pop up in Xcode
This commit is contained in:
parent
5d065e7efc
commit
a34598512e
@ -4189,29 +4189,29 @@ uint32_t video_driver_get_st_flags(void)
|
|||||||
void video_frame_delay_auto(video_driver_state_t *video_st, video_frame_delay_auto_t *vfda)
|
void video_frame_delay_auto(video_driver_state_t *video_st, video_frame_delay_auto_t *vfda)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
uint32_t frame_time_average = 0;
|
retro_time_t frame_time_avg = 0;
|
||||||
uint32_t frame_time_delta = 0;
|
retro_time_t frame_time_delta = 0;
|
||||||
uint16_t frame_time_index = (video_st->frame_time_count & (MEASURE_FRAME_TIME_SAMPLES_COUNT - 1));
|
uint16_t frame_time_index = (video_st->frame_time_count & (MEASURE_FRAME_TIME_SAMPLES_COUNT - 1));
|
||||||
uint16_t frame_time_target = 1000000.0f / vfda->refresh_rate;
|
retro_time_t frame_time_target = 1000000.0f / vfda->refresh_rate;
|
||||||
uint16_t frame_time_limit_mar = frame_time_target * 1.15f;
|
retro_time_t frame_time_limit_mar = frame_time_target * 1.15f;
|
||||||
uint16_t frame_time_limit_min = frame_time_target * 1.30f;
|
retro_time_t frame_time_limit_min = frame_time_target * 1.30f;
|
||||||
uint16_t frame_time_limit_med = frame_time_target * 1.50f;
|
retro_time_t frame_time_limit_med = frame_time_target * 1.50f;
|
||||||
uint16_t frame_time_limit_max = frame_time_target * 1.85f;
|
retro_time_t frame_time_limit_max = frame_time_target * 1.85f;
|
||||||
uint16_t frame_time_limit_cap = frame_time_target * 3.00f;
|
retro_time_t frame_time_limit_cap = frame_time_target * 3.00f;
|
||||||
uint16_t frame_time_limit_ign = frame_time_target * 3.25f;
|
retro_time_t frame_time_limit_ign = frame_time_target * 3.25f;
|
||||||
uint8_t frame_time_frames = vfda->frame_time_interval;
|
uint8_t frame_time_frames = vfda->frame_time_interval;
|
||||||
uint8_t frame_time_count_pos = 0;
|
uint8_t frame_time_count_pos = 0;
|
||||||
uint8_t frame_time_count_min = 0;
|
uint8_t frame_time_count_min = 0;
|
||||||
uint8_t frame_time_count_med = 0;
|
uint8_t frame_time_count_med = 0;
|
||||||
uint8_t frame_time_count_max = 0;
|
uint8_t frame_time_count_max = 0;
|
||||||
uint8_t frame_time_count_ign = 0;
|
uint8_t frame_time_count_ign = 0;
|
||||||
uint32_t frame_time_min = frame_time_target;
|
retro_time_t frame_time_min = frame_time_target;
|
||||||
uint32_t frame_time_max = frame_time_target;
|
retro_time_t frame_time_max = frame_time_target;
|
||||||
|
|
||||||
/* Calculate average frame time */
|
/* Calculate average frame time */
|
||||||
for (i = 1; i < frame_time_frames + 1; i++)
|
for (i = 1; i < frame_time_frames + 1; i++)
|
||||||
{
|
{
|
||||||
uint32_t frame_time_i = 0;
|
retro_time_t frame_time_i = 0;
|
||||||
|
|
||||||
if (i > frame_time_index)
|
if (i > frame_time_index)
|
||||||
continue;
|
continue;
|
||||||
@ -4241,19 +4241,19 @@ void video_frame_delay_auto(video_driver_state_t *video_st, video_frame_delay_au
|
|||||||
frame_time_i = frame_time_limit_cap;
|
frame_time_i = frame_time_limit_cap;
|
||||||
}
|
}
|
||||||
|
|
||||||
frame_time_average += frame_time_i;
|
frame_time_avg += frame_time_i;
|
||||||
}
|
}
|
||||||
|
|
||||||
frame_time_average /= frame_time_frames;
|
frame_time_avg /= frame_time_frames;
|
||||||
frame_time_delta = frame_time_max - frame_time_min;
|
frame_time_delta = frame_time_max - frame_time_min;
|
||||||
|
|
||||||
/* Ignore values when core is doing internal frame skipping */
|
/* Ignore values when core is doing internal frame skipping */
|
||||||
if (frame_time_count_ign > 0)
|
if (frame_time_count_ign > 0)
|
||||||
frame_time_average = frame_time_target;
|
frame_time_avg = frame_time_target;
|
||||||
|
|
||||||
/* Special handlings for different video driver frame timings */
|
/* Special handlings for different video driver frame timings */
|
||||||
if ( ( frame_time_average > frame_time_target
|
if ( ( frame_time_avg > frame_time_target
|
||||||
&& frame_time_average < frame_time_limit_med)
|
&& frame_time_avg < frame_time_limit_med)
|
||||||
|| (frame_time_delta > frame_time_limit_max))
|
|| (frame_time_delta > frame_time_limit_max))
|
||||||
{
|
{
|
||||||
uint8_t frame_time_frames_half = frame_time_frames / 2;
|
uint8_t frame_time_frames_half = frame_time_frames / 2;
|
||||||
@ -4279,7 +4279,7 @@ void video_frame_delay_auto(video_driver_state_t *video_st, video_frame_delay_au
|
|||||||
(frame_time_count_pos > frame_time_frames_half)
|
(frame_time_count_pos > frame_time_frames_half)
|
||||||
&& ( frame_time_count_med > 1
|
&& ( frame_time_count_med > 1
|
||||||
|| frame_time_count_max > 0)
|
|| frame_time_count_max > 0)
|
||||||
&& (frame_time_average > frame_time_limit_mar)
|
&& (frame_time_avg > frame_time_limit_mar)
|
||||||
&& (frame_time_delta < frame_time_limit_min)
|
&& (frame_time_delta < frame_time_limit_min)
|
||||||
)
|
)
|
||||||
mode = 4;
|
mode = 4;
|
||||||
@ -4289,7 +4289,7 @@ void video_frame_delay_auto(video_driver_state_t *video_st, video_frame_delay_au
|
|||||||
&& ( frame_time_count_min > 1
|
&& ( frame_time_count_min > 1
|
||||||
|| frame_time_count_med > 0)
|
|| frame_time_count_med > 0)
|
||||||
&& (frame_time_count_max == 0)
|
&& (frame_time_count_max == 0)
|
||||||
&& (frame_time_average > frame_time_limit_mar)
|
&& (frame_time_avg > frame_time_limit_mar)
|
||||||
)
|
)
|
||||||
mode = 5;
|
mode = 5;
|
||||||
/* Ignore */
|
/* Ignore */
|
||||||
@ -4299,33 +4299,33 @@ void video_frame_delay_auto(video_driver_state_t *video_st, video_frame_delay_au
|
|||||||
)
|
)
|
||||||
mode = -1;
|
mode = -1;
|
||||||
|
|
||||||
if (mode > 0 && frame_time_average < frame_time_limit_med)
|
if (mode > 0 && frame_time_avg < frame_time_limit_med)
|
||||||
{
|
{
|
||||||
#if FRAME_DELAY_AUTO_DEBUG
|
#if FRAME_DELAY_AUTO_DEBUG
|
||||||
RARCH_LOG("[Video]: Frame delay nudge %d by mode %d.\n", frame_time_average, mode);
|
RARCH_LOG("[Video]: Frame delay nudge %d by mode %d.\n", frame_time_avg, mode);
|
||||||
#endif
|
#endif
|
||||||
frame_time_average = frame_time_limit_med;
|
frame_time_avg = frame_time_limit_med;
|
||||||
}
|
}
|
||||||
else if (mode < 0)
|
else if (mode < 0)
|
||||||
{
|
{
|
||||||
#if FRAME_DELAY_AUTO_DEBUG
|
#if FRAME_DELAY_AUTO_DEBUG
|
||||||
RARCH_LOG("[Video]: Frame delay ignore %d.\n", frame_time_average);
|
RARCH_LOG("[Video]: Frame delay ignore %d.\n", frame_time_avg);
|
||||||
#endif
|
#endif
|
||||||
frame_time_average = frame_time_target;
|
frame_time_avg = frame_time_target;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Final output decision */
|
/* Final output decision */
|
||||||
if (frame_time_average > frame_time_limit_min)
|
if (frame_time_avg > frame_time_limit_min)
|
||||||
{
|
{
|
||||||
uint8_t delay_decrease = 1;
|
uint8_t delay_decrease = 1;
|
||||||
|
|
||||||
/* Increase decrease the more frame time is off target */
|
/* Increase decrease the more frame time is off target */
|
||||||
if ( frame_time_average > frame_time_limit_med
|
if ( frame_time_avg > frame_time_limit_med
|
||||||
&& video_st->frame_delay_effective > delay_decrease)
|
&& video_st->frame_delay_effective > delay_decrease)
|
||||||
{
|
{
|
||||||
delay_decrease++;
|
delay_decrease++;
|
||||||
if ( frame_time_average > frame_time_limit_max
|
if ( frame_time_avg > frame_time_limit_max
|
||||||
&& video_st->frame_delay_effective > delay_decrease)
|
&& video_st->frame_delay_effective > delay_decrease)
|
||||||
delay_decrease++;
|
delay_decrease++;
|
||||||
}
|
}
|
||||||
@ -4333,13 +4333,13 @@ void video_frame_delay_auto(video_driver_state_t *video_st, video_frame_delay_au
|
|||||||
vfda->delay_decrease = delay_decrease;
|
vfda->delay_decrease = delay_decrease;
|
||||||
}
|
}
|
||||||
|
|
||||||
vfda->frame_time_average = frame_time_average;
|
vfda->frame_time_avg = frame_time_avg;
|
||||||
vfda->frame_time_target = frame_time_target;
|
vfda->frame_time_target = frame_time_target;
|
||||||
|
|
||||||
#if FRAME_DELAY_AUTO_DEBUG
|
#if FRAME_DELAY_AUTO_DEBUG
|
||||||
if (frame_time_index > frame_time_frames)
|
if (frame_time_index > frame_time_frames)
|
||||||
RARCH_LOG("[Video]: %5d / pos:%d min:%d med:%d max:%d ign:%d / delta:%5d = %5d %5d %5d %5d %5d %5d %5d %5d\n",
|
RARCH_LOG("[Video]: %5d / pos:%d min:%d med:%d max:%d ign:%d / delta:%5d = %5d %5d %5d %5d %5d %5d %5d %5d\n",
|
||||||
frame_time_average,
|
frame_time_avg,
|
||||||
frame_time_count_pos,
|
frame_time_count_pos,
|
||||||
frame_time_count_min,
|
frame_time_count_min,
|
||||||
frame_time_count_med,
|
frame_time_count_med,
|
||||||
|
@ -884,7 +884,7 @@ typedef struct video_frame_delay_auto
|
|||||||
{
|
{
|
||||||
float refresh_rate;
|
float refresh_rate;
|
||||||
uint16_t frame_time_target;
|
uint16_t frame_time_target;
|
||||||
uint16_t frame_time_average;
|
uint16_t frame_time_avg;
|
||||||
uint8_t frame_time_interval;
|
uint8_t frame_time_interval;
|
||||||
uint8_t delay_decrease;
|
uint8_t delay_decrease;
|
||||||
} video_frame_delay_auto_t;
|
} video_frame_delay_auto_t;
|
||||||
|
@ -7972,7 +7972,7 @@ int runloop_iterate(void)
|
|||||||
{
|
{
|
||||||
video_frame_delay_effective -= vfda.delay_decrease;
|
video_frame_delay_effective -= vfda.delay_decrease;
|
||||||
RARCH_LOG("[Video]: Frame delay decrease by %d ms to %d ms due to frame time average: %d > %d.\n",
|
RARCH_LOG("[Video]: Frame delay decrease by %d ms to %d ms due to frame time average: %d > %d.\n",
|
||||||
vfda.delay_decrease, video_frame_delay_effective, vfda.frame_time_average, vfda.frame_time_target);
|
vfda.delay_decrease, video_frame_delay_effective, vfda.frame_time_avg, vfda.frame_time_target);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user