(DSP Filters) Add code for HAVE_BUILTIN_FILTERS
This commit is contained in:
parent
1bf9a43db6
commit
cdc60da07f
69
driver.c
69
driver.c
|
@ -967,18 +967,85 @@ void uninit_drivers(void)
|
||||||
driver.input_data_own = false;
|
driver.input_data_own = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_FILTERS_BUILTIN
|
||||||
|
extern const struct dspfilter_implementation *echo_dsp_plugin_init(dspfilter_simd_mask_t simd);
|
||||||
|
extern const struct dspfilter_implementation *eq_dsp_plugin_init(dspfilter_simd_mask_t simd);
|
||||||
|
extern const struct dspfilter_implementation *iir_dsp_plugin_init(dspfilter_simd_mask_t simd);
|
||||||
|
extern const struct dspfilter_implementation *phaser_dsp_plugin_init(dspfilter_simd_mask_t simd);
|
||||||
|
extern const struct dspfilter_implementation *reverb_dsp_plugin_init(dspfilter_simd_mask_t simd);
|
||||||
|
extern const struct dspfilter_implementation *volume_dsp_plugin_init(dspfilter_simd_mask_t simd);
|
||||||
|
extern const struct dspfilter_implementation *wah_dsp_plugin_init(dspfilter_simd_mask_t simd);
|
||||||
|
|
||||||
|
static const struct dspfilter_implementation *(*dspfilter_drivers[]) (dspfilter_simd_mask_t) =
|
||||||
|
{
|
||||||
|
NULL,
|
||||||
|
&echo_dsp_plugin_init,
|
||||||
|
&eq_dsp_plugin_init,
|
||||||
|
&iir_dsp_plugin_init,
|
||||||
|
&phaser_dsp_plugin_init,
|
||||||
|
&reverb_dsp_plugin_init,
|
||||||
|
&volume_dsp_plugin_init,
|
||||||
|
&wah_dsp_plugin_init,
|
||||||
|
};
|
||||||
|
|
||||||
|
unsigned dspfilter_get_last_idx(void)
|
||||||
|
{
|
||||||
|
return sizeof(dspfilter_drivers) / sizeof(dspfilter_drivers[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
static dspfilter_get_implementation_t dspfilter_get_implementation_from_idx(unsigned i)
|
||||||
|
{
|
||||||
|
if (i < dspfilter_get_last_idx())
|
||||||
|
return dspfilter_drivers[i];
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
const char *rarch_dspfilter_get_name(void *data)
|
||||||
|
{
|
||||||
|
const struct dspfilter_implementation *impl;
|
||||||
|
(void)data;
|
||||||
|
#ifdef HAVE_FILTERS_BUILTIN
|
||||||
|
unsigned cpu_features;
|
||||||
|
dspfilter_get_implementation_t cb = (dspfilter_get_implementation_t)dspfilter_get_implementation_from_idx(g_settings.audio.filter_idx);
|
||||||
|
if (cb)
|
||||||
|
{
|
||||||
|
cpu_features = rarch_get_cpu_features();
|
||||||
|
impl = (const struct dspfilter_implementation *)cb(cpu_features);
|
||||||
|
if (impl)
|
||||||
|
return impl->ident;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
#else
|
||||||
|
impl = (const struct dspfilter_implementation*)data;
|
||||||
|
if (!impl || !impl->ident)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return impl->ident;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void rarch_init_dsp_filter(void)
|
void rarch_init_dsp_filter(void)
|
||||||
{
|
{
|
||||||
unsigned cpu_features;
|
unsigned cpu_features;
|
||||||
dspfilter_get_implementation_t cb;
|
dspfilter_get_implementation_t cb;
|
||||||
rarch_dsp_info_t info = {0};
|
rarch_dsp_info_t info = {0};
|
||||||
|
|
||||||
|
#ifdef HAVE_FILTERS_BUILTIN
|
||||||
|
if (!g_settings.audio.filter_idx)
|
||||||
|
#else
|
||||||
if (!(*g_settings.audio.dsp_plugin))
|
if (!(*g_settings.audio.dsp_plugin))
|
||||||
|
#endif
|
||||||
return;
|
return;
|
||||||
|
|
||||||
cb = NULL;
|
cb = NULL;
|
||||||
|
|
||||||
#ifdef HAVE_DYLIB
|
#if defined(HAVE_FILTERS_BUILTIN)
|
||||||
|
cb = (dspfilter_get_implementation_t)dspfilter_get_implementation_from_idx(g_settings.video.filter_idx);
|
||||||
|
#elif defined(HAVE_DYLIB)
|
||||||
g_extern.audio_data.dsp_lib = dylib_load(g_settings.audio.dsp_plugin);
|
g_extern.audio_data.dsp_lib = dylib_load(g_settings.audio.dsp_plugin);
|
||||||
if (!g_extern.audio_data.dsp_lib)
|
if (!g_extern.audio_data.dsp_lib)
|
||||||
{
|
{
|
||||||
|
|
5
driver.h
5
driver.h
|
@ -586,8 +586,13 @@ void rarch_deinit_filter(void);
|
||||||
void rarch_init_filter(enum retro_pixel_format);
|
void rarch_init_filter(enum retro_pixel_format);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_FILTERS_BUILTIN
|
||||||
|
unsigned dspfilter_get_last_idx(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
void rarch_init_dsp_filter(void);
|
void rarch_init_dsp_filter(void);
|
||||||
void rarch_deinit_dsp_filter(void);
|
void rarch_deinit_dsp_filter(void);
|
||||||
|
const char *rarch_dspfilter_get_name(void *data);
|
||||||
|
|
||||||
// Used by RETRO_ENVIRONMENT_GET_CAMERA_INTERFACE
|
// Used by RETRO_ENVIRONMENT_GET_CAMERA_INTERFACE
|
||||||
#ifdef HAVE_CAMERA
|
#ifdef HAVE_CAMERA
|
||||||
|
|
|
@ -2523,13 +2523,30 @@ static int menu_common_setting_set(void *data, unsigned setting, unsigned action
|
||||||
case RGUI_SETTINGS_AUDIO_DSP_FILTER:
|
case RGUI_SETTINGS_AUDIO_DSP_FILTER:
|
||||||
switch (action)
|
switch (action)
|
||||||
{
|
{
|
||||||
|
#ifdef HAVE_FILTERS_BUILTIN
|
||||||
|
case RGUI_ACTION_LEFT:
|
||||||
|
if (g_settings.audio.filter_idx > 0)
|
||||||
|
g_settings.audio.filter_idx--;
|
||||||
|
break;
|
||||||
|
case RGUI_ACTION_RIGHT:
|
||||||
|
if ((g_settings.audio.filter_idx + 1) != dspfilter_get_last_idx())
|
||||||
|
g_settings.audio.filter_idx++;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
case RGUI_ACTION_OK:
|
case RGUI_ACTION_OK:
|
||||||
|
#if defined(HAVE_FILTERS_BUILTIN)
|
||||||
|
rarch_deinit_dsp_filter();
|
||||||
|
rarch_init_dsp_filter();
|
||||||
|
#elif defined(HAVE_DYLIB)
|
||||||
file_list_push(rgui->menu_stack, g_settings.audio.filter_dir, setting, rgui->selection_ptr);
|
file_list_push(rgui->menu_stack, g_settings.audio.filter_dir, setting, rgui->selection_ptr);
|
||||||
menu_clear_navigation(rgui);
|
menu_clear_navigation(rgui);
|
||||||
|
#endif
|
||||||
rgui->need_refresh = true;
|
rgui->need_refresh = true;
|
||||||
break;
|
break;
|
||||||
case RGUI_ACTION_START:
|
case RGUI_ACTION_START:
|
||||||
#ifdef HAVE_DYLIB
|
#if defined(HAVE_FILTERS_BUILTIN)
|
||||||
|
g_settings.audio.filter_idx = 0;
|
||||||
|
#elif defined(HAVE_DYLIB)
|
||||||
strlcpy(g_settings.audio.dsp_plugin, "", sizeof(g_settings.audio.dsp_plugin));
|
strlcpy(g_settings.audio.dsp_plugin, "", sizeof(g_settings.audio.dsp_plugin));
|
||||||
#endif
|
#endif
|
||||||
rarch_deinit_dsp_filter();
|
rarch_deinit_dsp_filter();
|
||||||
|
@ -4027,7 +4044,10 @@ static void menu_common_setting_set_label(char *type_str, size_t type_str_size,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case RGUI_SETTINGS_AUDIO_DSP_FILTER:
|
case RGUI_SETTINGS_AUDIO_DSP_FILTER:
|
||||||
strlcpy(type_str, *g_settings.audio.dsp_plugin ? g_settings.audio.dsp_plugin : "N/A", type_str_size);
|
{
|
||||||
|
const char *filter_name = rarch_dspfilter_get_name((void*)g_extern.audio_data.dsp_plugin);
|
||||||
|
strlcpy(type_str, filter_name ? filter_name : "N/A", type_str_size);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
#ifdef HAVE_OVERLAY
|
#ifdef HAVE_OVERLAY
|
||||||
case RGUI_SETTINGS_OVERLAY_PRESET:
|
case RGUI_SETTINGS_OVERLAY_PRESET:
|
||||||
|
|
|
@ -235,6 +235,9 @@ struct settings
|
||||||
|
|
||||||
char dsp_plugin[PATH_MAX];
|
char dsp_plugin[PATH_MAX];
|
||||||
char filter_dir[PATH_MAX];
|
char filter_dir[PATH_MAX];
|
||||||
|
#ifdef HAVE_FILTERS_BUILTIN
|
||||||
|
unsigned filter_idx;
|
||||||
|
#endif
|
||||||
|
|
||||||
bool rate_control;
|
bool rate_control;
|
||||||
float rate_control_delta;
|
float rate_control_delta;
|
||||||
|
|
|
@ -120,8 +120,9 @@ static softfilter_get_implementation_t softfilter_get_implementation_from_idx(un
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const char *rarch_softfilter_get_name(rarch_softfilter_t *filt)
|
const char *rarch_softfilter_get_name(void *data)
|
||||||
{
|
{
|
||||||
|
(void)data;
|
||||||
#ifdef HAVE_FILTERS_BUILTIN
|
#ifdef HAVE_FILTERS_BUILTIN
|
||||||
unsigned cpu_features;
|
unsigned cpu_features;
|
||||||
const struct softfilter_implementation *impl;
|
const struct softfilter_implementation *impl;
|
||||||
|
@ -136,6 +137,7 @@ const char *rarch_softfilter_get_name(rarch_softfilter_t *filt)
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
#else
|
#else
|
||||||
|
rarch_softfilter_t *filt = (rarch_softfilter_t*)data;
|
||||||
if (!filt || !filt->impl)
|
if (!filt || !filt->impl)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ void rarch_softfilter_process(rarch_softfilter_t *filt,
|
||||||
void *output, size_t output_stride,
|
void *output, size_t output_stride,
|
||||||
const void *input, unsigned width, unsigned height, size_t input_stride);
|
const void *input, unsigned width, unsigned height, size_t input_stride);
|
||||||
|
|
||||||
const char *rarch_softfilter_get_name(rarch_softfilter_t *filt);
|
const char *rarch_softfilter_get_name(void *data);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -484,6 +484,14 @@ FILTERS
|
||||||
#include "../gfx/filters/darken.c"
|
#include "../gfx/filters/darken.c"
|
||||||
#include "../gfx/filters/epx.c"
|
#include "../gfx/filters/epx.c"
|
||||||
#include "../gfx/filters/scale2x.c"
|
#include "../gfx/filters/scale2x.c"
|
||||||
|
|
||||||
|
#include "../audio/filters/echo.c"
|
||||||
|
#include "../audio/filters/eq.c"
|
||||||
|
#include "../audio/filters/iir.c"
|
||||||
|
#include "../audio/filters/phaser.c"
|
||||||
|
#include "../audio/filters/reverb.c"
|
||||||
|
#include "../audio/filters/volume.c"
|
||||||
|
#include "../audio/filters/wah.c"
|
||||||
#endif
|
#endif
|
||||||
/*============================================================
|
/*============================================================
|
||||||
DYNAMIC
|
DYNAMIC
|
||||||
|
|
Loading…
Reference in New Issue