Move buffer_free_samples variables to audio_driver.c

This commit is contained in:
twinaphex 2015-05-20 05:27:53 +02:00
parent 969bbdd85d
commit 415a983705
2 changed files with 15 additions and 18 deletions

View File

@ -27,6 +27,10 @@
#include "../performance.h" #include "../performance.h"
#include "../intl/intl.h" #include "../intl/intl.h"
#ifndef AUDIO_BUFFER_FREE_SAMPLES_COUNT
#define AUDIO_BUFFER_FREE_SAMPLES_COUNT (8 * 1024)
#endif
typedef struct audio_driver_input_data typedef struct audio_driver_input_data
{ {
float *data; float *data;
@ -56,6 +60,9 @@ typedef struct audio_driver_input_data
float volume_gain; float volume_gain;
struct retro_audio_callback audio_callback; struct retro_audio_callback audio_callback;
unsigned buffer_free_samples[AUDIO_BUFFER_FREE_SAMPLES_COUNT];
uint64_t buffer_free_samples_count;
} audio_driver_input_data_t; } audio_driver_input_data_t;
static audio_driver_input_data_t audio_data; static audio_driver_input_data_t audio_data;
@ -142,22 +149,21 @@ static void compute_audio_buffer_statistics(void)
uint64_t accum = 0, accum_var = 0; uint64_t accum = 0, accum_var = 0;
unsigned low_water_count = 0, high_water_count = 0; unsigned low_water_count = 0, high_water_count = 0;
unsigned samples = 0; unsigned samples = 0;
runloop_t *runloop = rarch_main_get_ptr();
samples = min(runloop->measure_data.buffer_free_samples_count, samples = min(audio_data.buffer_free_samples_count,
AUDIO_BUFFER_FREE_SAMPLES_COUNT); AUDIO_BUFFER_FREE_SAMPLES_COUNT);
if (samples < 3) if (samples < 3)
return; return;
for (i = 1; i < samples; i++) for (i = 1; i < samples; i++)
accum += runloop->measure_data.buffer_free_samples[i]; accum += audio_data.buffer_free_samples[i];
avg = accum / (samples - 1); avg = accum / (samples - 1);
for (i = 1; i < samples; i++) for (i = 1; i < samples; i++)
{ {
int diff = avg - runloop->measure_data.buffer_free_samples[i]; int diff = avg - audio_data.buffer_free_samples[i];
accum_var += diff * diff; accum_var += diff * diff;
} }
@ -170,9 +176,9 @@ static void compute_audio_buffer_statistics(void)
for (i = 1; i < samples; i++) for (i = 1; i < samples; i++)
{ {
if (runloop->measure_data.buffer_free_samples[i] >= low_water_size) if (audio_data.buffer_free_samples[i] >= low_water_size)
low_water_count++; low_water_count++;
else if (runloop->measure_data.buffer_free_samples[i] <= high_water_size) else if (audio_data.buffer_free_samples[i] <= high_water_size)
high_water_count++; high_water_count++;
} }
@ -321,7 +327,6 @@ void uninit_audio(void)
void init_audio(void) void init_audio(void)
{ {
size_t outsamples_max, max_bufsamples = AUDIO_CHUNK_SIZE_NONBLOCKING * 2; size_t outsamples_max, max_bufsamples = AUDIO_CHUNK_SIZE_NONBLOCKING * 2;
runloop_t *runloop = rarch_main_get_ptr();
driver_t *driver = driver_get_ptr(); driver_t *driver = driver_get_ptr();
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
@ -454,7 +459,7 @@ void init_audio(void)
event_command(EVENT_CMD_DSP_FILTER_INIT); event_command(EVENT_CMD_DSP_FILTER_INIT);
runloop->measure_data.buffer_free_samples_count = 0; audio_data.buffer_free_samples_count = 0;
if (driver->audio_active && !settings->audio.mute_enable && if (driver->audio_active && !settings->audio.mute_enable &&
audio_data.audio_callback.callback) audio_data.audio_callback.callback)
@ -516,9 +521,8 @@ static int audio_driver_write_avail(void)
*/ */
void audio_driver_readjust_input_rate(void) void audio_driver_readjust_input_rate(void)
{ {
runloop_t *runloop = rarch_main_get_ptr();
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
unsigned write_idx = runloop->measure_data.buffer_free_samples_count++ & unsigned write_idx = audio_data.buffer_free_samples_count++ &
(AUDIO_BUFFER_FREE_SAMPLES_COUNT - 1); (AUDIO_BUFFER_FREE_SAMPLES_COUNT - 1);
int half_size = audio_data.driver_buffer_size / 2; int half_size = audio_data.driver_buffer_size / 2;
int avail = audio_driver_write_avail(); int avail = audio_driver_write_avail();
@ -531,7 +535,7 @@ void audio_driver_readjust_input_rate(void)
(unsigned)(100 - (avail * 100) / audio_data.driver_buffer_size)); (unsigned)(100 - (avail * 100) / audio_data.driver_buffer_size));
#endif #endif
runloop->measure_data.buffer_free_samples[write_idx] = avail; audio_data.buffer_free_samples[write_idx] = avail;
audio_data.src_ratio = audio_data.orig_src_ratio * adjust; audio_data.src_ratio = audio_data.orig_src_ratio * adjust;
#if 0 #if 0

View File

@ -27,10 +27,6 @@
#include "movie.h" #include "movie.h"
#include "cheats.h" #include "cheats.h"
#ifndef AUDIO_BUFFER_FREE_SAMPLES_COUNT
#define AUDIO_BUFFER_FREE_SAMPLES_COUNT (8 * 1024)
#endif
#ifndef MEASURE_FRAME_TIME_SAMPLES_COUNT #ifndef MEASURE_FRAME_TIME_SAMPLES_COUNT
#define MEASURE_FRAME_TIME_SAMPLES_COUNT (2 * 1024) #define MEASURE_FRAME_TIME_SAMPLES_COUNT (2 * 1024)
#endif #endif
@ -65,9 +61,6 @@ typedef struct runloop
struct struct
{ {
unsigned buffer_free_samples[AUDIO_BUFFER_FREE_SAMPLES_COUNT];
uint64_t buffer_free_samples_count;
retro_time_t frame_time_samples[MEASURE_FRAME_TIME_SAMPLES_COUNT]; retro_time_t frame_time_samples[MEASURE_FRAME_TIME_SAMPLES_COUNT];
uint64_t frame_time_samples_count; uint64_t frame_time_samples_count;
} measure_data; } measure_data;