From b8abf34785f44879a7739e2bc35c0e532cba7e90 Mon Sep 17 00:00:00 2001 From: Themaister Date: Sat, 13 Oct 2012 20:22:45 +0200 Subject: [PATCH] Purge some now useless code. Removes manual input rate adjustments. Don't allow DSP plugs to resample as it would complicate things alot with dynamic rate control. Also purges optional ssnes_* symbols for external plugs. --- Makefile | 5 +- audio/ext/rarch_dsp.h | 10 +--- audio/ext_audio.c | 2 - audio/sinc.c | 53 +---------------- command.c | 2 - config.def.h | 2 - driver.c | 2 - driver.h | 2 - gfx/ext_gfx.c | 2 - gfx/py_state/py_state.c | 2 - qb/config.libs.sh | 2 +- qb/config.params.sh | 1 - retroarch.c | 122 ++++++++-------------------------------- settings.c | 2 - 14 files changed, 28 insertions(+), 181 deletions(-) diff --git a/Makefile b/Makefile index 71bd24524d..3200e090eb 100644 --- a/Makefile +++ b/Makefile @@ -285,10 +285,7 @@ ifeq ($(HAVE_SINC), 1) else OBJ += audio/hermite.o endif - -ifneq ($(HAVE_FIXED_POINT), 1) - OBJ += audio/utils.o -endif +OBJ += audio/utils.o ifneq ($(V),1) Q := @ diff --git a/audio/ext/rarch_dsp.h b/audio/ext/rarch_dsp.h index 106e2335de..5c91597ad5 100644 --- a/audio/ext/rarch_dsp.h +++ b/audio/ext/rarch_dsp.h @@ -30,7 +30,7 @@ extern "C" { #define RARCH_TRUE 1 #endif -#define RARCH_DSP_API_VERSION 3 +#define RARCH_DSP_API_VERSION 4 typedef struct rarch_dsp_info { @@ -61,14 +61,6 @@ typedef struct rarch_dsp_output // (I.e. 44.1kHz, 16bit stereo will have // 88.2k samples/sec and 44.1k frames/sec.) unsigned frames; - - // If true, the DSP plugin did not resample the input audio, - // and requests resampling to the proper frequency to be - // performed outside the plugin. - // If false, - // it is assumed that the output has the same sample rate as given - // in output_rate. - int should_resample; } rarch_dsp_output_t; typedef struct rarch_dsp_input diff --git a/audio/ext_audio.c b/audio/ext_audio.c index e5e3ceaf6e..4cd79f29fd 100644 --- a/audio/ext_audio.c +++ b/audio/ext_audio.c @@ -66,8 +66,6 @@ static void *audio_ext_init(const char *device, unsigned rate, unsigned latency) } plugin_load = (const rarch_audio_driver_t *(*)(void))dylib_proc(ext->lib, "rarch_audio_driver_init"); - if (!plugin_load) - plugin_load = (const rarch_audio_driver_t *(*)(void))dylib_proc(ext->lib, "ssnes_audio_driver_init"); // Compat. Will be dropped on ABI break. if (!plugin_load) { diff --git a/audio/sinc.c b/audio/sinc.c index a5c8c2833c..62e1640c75 100644 --- a/audio/sinc.c +++ b/audio/sinc.c @@ -84,11 +84,7 @@ static void init_sinc_table(rarch_resampler_t *resamp) double sinc_phase = M_PI * (p + (SIDELOBES - 1 - j)); float val = CUTOFF * sinc(CUTOFF * sinc_phase) * lanzcos(sinc_phase / SIDELOBES); -#ifdef HAVE_FIXED_POINT - resamp->phase_table[i][PHASE_INDEX][j] = (int16_t)(val * 0x7fff); -#else resamp->phase_table[i][PHASE_INDEX][j] = val; -#endif } } @@ -97,13 +93,8 @@ static void init_sinc_table(rarch_resampler_t *resamp) { for (int j = 0; j < TAPS; j++) { -#ifdef HAVE_FIXED_POINT - resamp->phase_table[i][DELTA_INDEX][j] = - (resamp->phase_table[i + 1][PHASE_INDEX][j] - resamp->phase_table[i][PHASE_INDEX][j]); -#else resamp->phase_table[i][DELTA_INDEX][j] = (resamp->phase_table[i + 1][PHASE_INDEX][j] - resamp->phase_table[i][PHASE_INDEX][j]) / SUBPHASES; -#endif } } @@ -114,11 +105,7 @@ static void init_sinc_table(rarch_resampler_t *resamp) double sinc_phase = M_PI * (p + (SIDELOBES - 1 - j)); double phase = CUTOFF * sinc(CUTOFF * sinc_phase) * lanzcos(sinc_phase / SIDELOBES); -#ifdef HAVE_FIXED_POINT - int16_t result = 0x7fff * phase - resamp->phase_table[PHASES - 1][PHASE_INDEX][j]; -#else float result = (phase - resamp->phase_table[PHASES - 1][PHASE_INDEX][j]) / SUBPHASES; -#endif resamp->phase_table[PHASES - 1][DELTA_INDEX][j] = result; } @@ -154,9 +141,7 @@ rarch_resampler_t *resampler_new(void) init_sinc_table(re); -#ifdef HAVE_FIXED_POINT - RARCH_LOG("Sinc resampler [Fixed]\n"); -#elif __SSE__ +#ifdef __SSE__ RARCH_LOG("Sinc resampler [SSE]\n"); #else RARCH_LOG("Sinc resampler [C]\n"); @@ -165,41 +150,7 @@ rarch_resampler_t *resampler_new(void) return re; } -#ifdef HAVE_FIXED_POINT -static inline int16_t saturate(int32_t val) -{ - if (val > 0x7fff) - return 0x7fff; - else if (val < -0x8000) - return -0x8000; - else - return val; -} - -static void process_sinc(rarch_resampler_t *resamp, int16_t *out_buffer) -{ - int32_t sum_l = 0; - int32_t sum_r = 0; - const int16_t *buffer_l = resamp->buffer_l + resamp->ptr; - const int16_t *buffer_r = resamp->buffer_r + resamp->ptr; - - unsigned phase = resamp->time >> PHASES_SHIFT; - unsigned delta = (resamp->time >> SUBPHASES_SHIFT) & SUBPHASES_MASK; - - const int16_t *phase_table = resamp->phase_table[phase][PHASE_INDEX]; - const int16_t *delta_table = resamp->phase_table[phase][DELTA_INDEX]; - - for (unsigned i = 0; i < TAPS; i++) - { - int16_t sinc_val = phase_table[i] + ((delta * delta_table[i] + 0x4000) >> 15); - sum_l += (buffer_l[i] * sinc_val + 0x4000) >> 15; - sum_r += (buffer_r[i] * sinc_val + 0x4000) >> 15; - } - - out_buffer[0] = saturate(sum_l); - out_buffer[1] = saturate(sum_r); -} -#elif __SSE__ +#ifdef __SSE__ static void process_sinc(rarch_resampler_t *resamp, float *out_buffer) { __m128 sum_l = _mm_setzero_ps(); diff --git a/command.c b/command.c index 53207807ae..98ea2a54b9 100644 --- a/command.c +++ b/command.c @@ -185,8 +185,6 @@ static const struct cmd_map map[] = { { "QUIT", RARCH_QUIT_KEY }, { "STATE_SLOT_PLUS", RARCH_STATE_SLOT_PLUS }, { "STATE_SLOT_MINUS", RARCH_STATE_SLOT_MINUS }, - { "AUDIO_INPUT_RATE_PLUS", RARCH_AUDIO_INPUT_RATE_PLUS }, - { "AUDIO_INPUT_RATE_MINUS", RARCH_AUDIO_INPUT_RATE_MINUS }, { "REWIND", RARCH_REWIND }, { "MOVIE_RECORD_TOGGLE", RARCH_MOVIE_RECORD_TOGGLE }, { "PAUSE_TOGGLE", RARCH_PAUSE_TOGGLE }, diff --git a/config.def.h b/config.def.h index 8ce1ae71cb..17e816b1f6 100644 --- a/config.def.h +++ b/config.def.h @@ -368,8 +368,6 @@ static const struct retro_keybind retro_keybinds_1[] = { { true, RARCH_QUIT_KEY, RETROK_ESCAPE, NO_BTN, AXIS_NONE }, { true, RARCH_STATE_SLOT_PLUS, RETROK_F7, NO_BTN, AXIS_NONE }, { true, RARCH_STATE_SLOT_MINUS, RETROK_F6, NO_BTN, AXIS_NONE }, - { true, RARCH_AUDIO_INPUT_RATE_PLUS, RETROK_KP_PLUS, NO_BTN, AXIS_NONE }, - { true, RARCH_AUDIO_INPUT_RATE_MINUS, RETROK_KP_MINUS, NO_BTN, AXIS_NONE }, { true, RARCH_REWIND, RETROK_r, NO_BTN, AXIS_NONE }, { true, RARCH_MOVIE_RECORD_TOGGLE, RETROK_o, NO_BTN, AXIS_NONE }, { true, RARCH_PAUSE_TOGGLE, RETROK_p, NO_BTN, AXIS_NONE }, diff --git a/driver.c b/driver.c index cf02dd888b..cffe27575f 100644 --- a/driver.c +++ b/driver.c @@ -269,8 +269,6 @@ static void init_dsp_plugin(void) const rarch_dsp_plugin_t* (RARCH_API_CALLTYPE *plugin_init)(void) = (const rarch_dsp_plugin_t *(RARCH_API_CALLTYPE*)(void))dylib_proc(g_extern.audio_data.dsp_lib, "rarch_dsp_plugin_init"); - if (!plugin_init) - plugin_init = (const rarch_dsp_plugin_t *(RARCH_API_CALLTYPE*)(void))dylib_proc(g_extern.audio_data.dsp_lib, "ssnes_dsp_plugin_init"); // Compat. Will be dropped on ABI break. if (!plugin_init) { diff --git a/driver.h b/driver.h index 5e711f939f..211c649bba 100644 --- a/driver.h +++ b/driver.h @@ -69,8 +69,6 @@ enum // RetroArch specific bind IDs. RARCH_QUIT_KEY, RARCH_STATE_SLOT_PLUS, RARCH_STATE_SLOT_MINUS, - RARCH_AUDIO_INPUT_RATE_PLUS, - RARCH_AUDIO_INPUT_RATE_MINUS, RARCH_REWIND, RARCH_MOVIE_RECORD_TOGGLE, RARCH_PAUSE_TOGGLE, diff --git a/gfx/ext_gfx.c b/gfx/ext_gfx.c index ded60e4ae8..1c4604bb1b 100644 --- a/gfx/ext_gfx.c +++ b/gfx/ext_gfx.c @@ -350,8 +350,6 @@ static void *video_ext_init(const video_info_t *video, const input_driver_t **in } video_init = (const rarch_video_driver_t *(*)(void))dylib_proc(g_lib, "rarch_video_init"); - if (!video_init) - video_init = (const rarch_video_driver_t *(*)(void))dylib_proc(g_lib, "ssnes_video_init"); // Compat. Will be dropped on ABI break. if (!video_init) { diff --git a/gfx/py_state/py_state.c b/gfx/py_state/py_state.c index e64987268a..57e315ed0e 100644 --- a/gfx/py_state/py_state.c +++ b/gfx/py_state/py_state.c @@ -138,8 +138,6 @@ static void py_set_attrs(PyObject *mod) DECL_ATTR_RARCH(QUIT_KEY); DECL_ATTR_RARCH(STATE_SLOT_PLUS); DECL_ATTR_RARCH(STATE_SLOT_MINUS); - DECL_ATTR_RARCH(AUDIO_INPUT_RATE_PLUS); - DECL_ATTR_RARCH(AUDIO_INPUT_RATE_MINUS); DECL_ATTR_RARCH(REWIND); DECL_ATTR_RARCH(MOVIE_RECORD_TOGGLE); DECL_ATTR_RARCH(PAUSE_TOGGLE); diff --git a/qb/config.libs.sh b/qb/config.libs.sh index 9192114b28..1a4d778c30 100644 --- a/qb/config.libs.sh +++ b/qb/config.libs.sh @@ -185,6 +185,6 @@ check_pkgconf PYTHON python3 add_define_make OS "$OS" # Creates config.mk and config.h. -VARS="ALSA OSS OSS_BSD OSS_LIB AL RSOUND ROAR JACK COREAUDIO PULSE SDL OPENGL GLES VG EGL KMS GBM DRM DYLIB GETOPT_LONG THREADS CG XML SDL_IMAGE LIBPNG DYNAMIC FFMPEG AVCODEC AVFORMAT AVUTIL CONFIGFILE FREETYPE XVIDEO X11 XEXT XF86VM XINERAMA NETPLAY NETWORK_CMD STDIN_CMD COMMAND SOCKET_LEGACY FBO STRL PYTHON FFMPEG_ALLOC_CONTEXT3 FFMPEG_AVCODEC_OPEN2 FFMPEG_AVIO_OPEN FFMPEG_AVFORMAT_WRITE_HEADER FFMPEG_AVFORMAT_NEW_STREAM FFMPEG_AVCODEC_ENCODE_AUDIO2 FFMPEG_AVCODEC_ENCODE_VIDEO2 SINC FIXED_POINT BSV_MOVIE VIDEOCORE" +VARS="ALSA OSS OSS_BSD OSS_LIB AL RSOUND ROAR JACK COREAUDIO PULSE SDL OPENGL GLES VG EGL KMS GBM DRM DYLIB GETOPT_LONG THREADS CG XML SDL_IMAGE LIBPNG DYNAMIC FFMPEG AVCODEC AVFORMAT AVUTIL CONFIGFILE FREETYPE XVIDEO X11 XEXT XF86VM XINERAMA NETPLAY NETWORK_CMD STDIN_CMD COMMAND SOCKET_LEGACY FBO STRL PYTHON FFMPEG_ALLOC_CONTEXT3 FFMPEG_AVCODEC_OPEN2 FFMPEG_AVIO_OPEN FFMPEG_AVFORMAT_WRITE_HEADER FFMPEG_AVFORMAT_NEW_STREAM FFMPEG_AVCODEC_ENCODE_AUDIO2 FFMPEG_AVCODEC_ENCODE_VIDEO2 SINC BSV_MOVIE VIDEOCORE" create_config_make config.mk $VARS create_config_header config.h $VARS diff --git a/qb/config.params.sh b/qb/config.params.sh index 5e50dd9db8..a38f111380 100644 --- a/qb/config.params.sh +++ b/qb/config.params.sh @@ -30,5 +30,4 @@ HAVE_SDL_IMAGE=auto # Enable SDL_image support HAVE_LIBPNG=auto # Enable libpng support HAVE_PYTHON=auto # Enable Python 3 support for shaders HAVE_SINC=yes # Disable SINC resampler -HAVE_FIXED_POINT=no # Enable fixed-point resampler HAVE_BSV_MOVIE=yes # Disable BSV movie support diff --git a/retroarch.c b/retroarch.c index 619a671ab5..93ce6eedce 100644 --- a/retroarch.c +++ b/retroarch.c @@ -325,7 +325,7 @@ static bool audio_flush(const int16_t *data, size_t samples) } #endif - if (g_extern.is_paused) + if (g_extern.is_paused || g_extern.audio_data.mute) return true; if (!g_extern.audio_active) return false; @@ -333,79 +333,42 @@ static bool audio_flush(const int16_t *data, size_t samples) const sample_t *output_data = NULL; unsigned output_frames = 0; -#ifndef HAVE_FIXED_POINT + struct resampler_data src_data = {0}; audio_convert_s16_to_float(g_extern.audio_data.data, data, samples); -#endif -#if defined(HAVE_DYLIB) && !defined(HAVE_FIXED_POINT) +#if defined(HAVE_DYLIB) rarch_dsp_output_t dsp_output = {0}; - dsp_output.should_resample = RARCH_TRUE; - - rarch_dsp_input_t dsp_input = {0}; - dsp_input.samples = g_extern.audio_data.data; - dsp_input.frames = samples >> 1; + rarch_dsp_input_t dsp_input = {0}; + dsp_input.samples = g_extern.audio_data.data; + dsp_input.frames = samples >> 1; if (g_extern.audio_data.dsp_plugin) g_extern.audio_data.dsp_plugin->process(g_extern.audio_data.dsp_handle, &dsp_output, &dsp_input); - if (dsp_output.should_resample) - { -#endif - struct resampler_data src_data = {0}; - -#ifdef HAVE_FIXED_POINT - src_data.data_in = data; - src_data.input_frames = samples >> 1; -#elif defined(HAVE_DYLIB) - src_data.data_in = dsp_output.samples ? dsp_output.samples : g_extern.audio_data.data; - src_data.input_frames = dsp_output.samples ? dsp_output.frames : (samples >> 1); + src_data.data_in = dsp_output.samples ? dsp_output.samples : g_extern.audio_data.data; + src_data.input_frames = dsp_output.samples ? dsp_output.frames : (samples >> 1); #else - src_data.data_in = g_extern.audio_data.data; - src_data.input_frames = samples >> 1; + src_data.data_in = g_extern.audio_data.data; + src_data.input_frames = samples >> 1; #endif - src_data.data_out = g_extern.audio_data.outsamples; + src_data.data_out = g_extern.audio_data.outsamples; - if (g_extern.audio_data.rate_control) - readjust_audio_input_rate(); + if (g_extern.audio_data.rate_control) + readjust_audio_input_rate(); - src_data.ratio = g_extern.audio_data.src_ratio; - if (g_extern.is_slowmotion) - src_data.ratio *= g_settings.slowmotion_ratio; + src_data.ratio = g_extern.audio_data.src_ratio; + if (g_extern.is_slowmotion) + src_data.ratio *= g_settings.slowmotion_ratio; - resampler_process(g_extern.audio_data.source, &src_data); + resampler_process(g_extern.audio_data.source, &src_data); - output_data = g_extern.audio_data.outsamples; - output_frames = src_data.output_frames; -#if defined(HAVE_DYLIB) && !defined(HAVE_FIXED_POINT) - } - else - { - output_data = dsp_output.samples; - output_frames = dsp_output.frames; - } -#endif + output_data = g_extern.audio_data.outsamples; + output_frames = src_data.output_frames; - union - { - float f[0x10000]; - int16_t i[0x10000 * sizeof(float) / sizeof(int16_t)]; - } static empty_buf; // Const here would require us to statically initialize it, bloating the binary. - -#ifdef HAVE_FIXED_POINT - if (g_extern.audio_data.mute) - output_data = empty_buf.i; - - if (audio_write_func(output_data, output_frames * sizeof(int16_t) * 2) < 0) - { - RARCH_ERR("Audio backend failed to write. Will continue without sound.\n"); - return false; - } -#else if (g_extern.audio_data.use_float) { - if (audio_write_func(g_extern.audio_data.mute ? empty_buf.f : output_data, - output_frames * sizeof(float) * 2) < 0) + if (audio_write_func(output_data, output_frames * sizeof(float) * 2) < 0) { RARCH_ERR("Audio backend failed to write. Will continue without sound.\n"); return false; @@ -413,20 +376,15 @@ static bool audio_flush(const int16_t *data, size_t samples) } else { - if (!g_extern.audio_data.mute) - { - audio_convert_float_to_s16(g_extern.audio_data.conv_outsamples, - output_data, output_frames * 2); - } + audio_convert_float_to_s16(g_extern.audio_data.conv_outsamples, + output_data, output_frames * 2); - if (audio_write_func(g_extern.audio_data.mute ? empty_buf.i : g_extern.audio_data.conv_outsamples, - output_frames * sizeof(int16_t) * 2) < 0) + if (audio_write_func(g_extern.audio_data.conv_outsamples, output_frames * sizeof(int16_t) * 2) < 0) { RARCH_ERR("Audio backend failed to write. Will continue without sound.\n"); return false; } } -#endif return true; } @@ -1985,34 +1943,6 @@ static void check_stateslots(void) old_should_slot_decrease = should_slot_decrease; } -static void check_input_rate(void) -{ - bool display = false; - if (input_key_pressed_func(RARCH_AUDIO_INPUT_RATE_PLUS)) - { - g_settings.audio.in_rate += g_settings.audio.rate_step; - display = true; - } - else if (input_key_pressed_func(RARCH_AUDIO_INPUT_RATE_MINUS)) - { - g_settings.audio.in_rate -= g_settings.audio.rate_step; - display = true; - } - - if (display) - { - char msg[256]; - snprintf(msg, sizeof(msg), "Audio input rate: %.2f Hz", g_settings.audio.in_rate); - - msg_queue_clear(g_extern.msg_queue); - msg_queue_push(g_extern.msg_queue, msg, 1, 180); - RARCH_LOG("%s\n", msg); - - g_extern.audio_data.src_ratio = - (double)g_settings.audio.out_rate / g_settings.audio.in_rate; - } -} - static inline void flush_rewind_audio(void) { if (g_extern.frame_is_reverse) // We just rewound. Flush rewind audio buffer. @@ -2511,12 +2441,6 @@ static void do_state_checks(void) #endif } #endif - -#ifdef HAVE_DYLIB - // DSP plugin doesn't use variable input rate. - if (!g_extern.audio_data.dsp_plugin) -#endif - check_input_rate(); } static void init_state(void) diff --git a/settings.c b/settings.c index 8795add4b5..1372cc13fa 100644 --- a/settings.c +++ b/settings.c @@ -599,8 +599,6 @@ static const struct bind_map bind_maps[MAX_PLAYERS][RARCH_BIND_LIST_END_NULL] = DECLARE_BIND(exit_emulator, RARCH_QUIT_KEY), DECLARE_BIND(state_slot_increase, RARCH_STATE_SLOT_PLUS), DECLARE_BIND(state_slot_decrease, RARCH_STATE_SLOT_MINUS), - DECLARE_BIND(rate_step_up, RARCH_AUDIO_INPUT_RATE_PLUS), - DECLARE_BIND(rate_step_down, RARCH_AUDIO_INPUT_RATE_MINUS), DECLARE_BIND(rewind, RARCH_REWIND), DECLARE_BIND(movie_record_toggle, RARCH_MOVIE_RECORD_TOGGLE), DECLARE_BIND(pause_toggle, RARCH_PAUSE_TOGGLE),