Make Blargg_snes filter customizable.

This commit is contained in:
Tatsuya79 2020-07-20 22:57:07 +02:00
parent 4ca1692174
commit 3bdf636e52
4 changed files with 84 additions and 1 deletions

View File

@ -0,0 +1,47 @@
filter = blargg_ntsc_snes
blargg_ntsc_snes_tvtype = "custom"
# tvtype presets for reference:
# monochrome = 0,-1, 0, 0, .2, 0, .2,-.2,-.2,-1, 1, 1
# composite = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1
# svideo = 0, 0, 0, 0, .2, 0, .2, -1, -1, 0, 1, 1
# rgb = 0, 0, 0, 0, .2, 0, .7, -1, -1,-1, 1, 1
blargg_ntsc_snes_hue = 0.0
# -1 = -180 degrees +1 = +180 degrees
blargg_ntsc_snes_saturation = 0.0
# -1 = grayscale (0.0) +1 = oversaturated colors (2.0)
blargg_ntsc_snes_contrast = 0.0
# -1 = dark (0.5) +1 = light (1.5)
blargg_ntsc_snes_brightness = 0.0
# -1 = dark (0.5) +1 = light (1.5)
blargg_ntsc_snes_sharpness = 0.2
# edge contrast enhancement/blurring
blargg_ntsc_snes_gamma = 0.0
# -1 = dark (1.5) +1 = light (0.5)
blargg_ntsc_snes_resolution = 0.7
# image resolution (composite 0 - svideo 0.2 - rgb 0.7)
blargg_ntsc_snes_artifacts = 0.0
# artifacts caused by color changes (-1 is off)
blargg_ntsc_snes_fringing = 0.0
# color artifacts caused by brightness changes (-1 is off)
blargg_ntsc_snes_bleed = 0.0
# color bleed (color resolution reduction) (-1 is off)
blargg_ntsc_snes_merge_fields = 0.0
# if 1, merges even and odd fields together to reduce flicker
# if 0, alternate fields every frame
blargg_ntsc_snes_hires_blit = 0
# do hires blitting when set to 1, assuming 512 width for any res >256 (made for SNES 512 mode)
# set it to 0 for other resolutions such as 320 (even if a bit out of specs for this filter)

View File

@ -78,6 +78,21 @@ static void blargg_ntsc_snes_initialize(void *data,
snes_ntsc_setup_t setup;
struct filter_data *filt = (struct filter_data*)data;
float custom_hue, custom_saturation, custom_contrast, custom_brightness, custom_sharpness,
custom_gamma, custom_resolution, custom_artifacts, custom_fringing, custom_bleed, custom_merge_fields;
config->get_float(userdata, "hue", &custom_hue, 0.0f);
config->get_float(userdata, "saturation", &custom_saturation, 0.0f);
config->get_float(userdata, "contrast", &custom_contrast, 0.0f);
config->get_float(userdata, "brightness", &custom_brightness, 0.0f);
config->get_float(userdata, "sharpness", &custom_sharpness, 0.0f);
config->get_float(userdata, "gamma", &custom_gamma, 0.0f);
config->get_float(userdata, "resolution", &custom_resolution, 0.0f);
config->get_float(userdata, "artifacts", &custom_artifacts, 0.0f);
config->get_float(userdata, "fringing", &custom_fringing, 0.0f);
config->get_float(userdata, "bleed", &custom_bleed, 0.0f);
config->get_float(userdata, "merge_fields", &custom_merge_fields, 1.0f);
filt->ntsc = (snes_ntsc_t*)calloc(1, sizeof(*filt->ntsc));
if (config->get_string(userdata, "tvtype", &tvtype, "composite"))
@ -102,6 +117,22 @@ static void blargg_ntsc_snes_initialize(void *data,
setup = retroarch_snes_ntsc_svideo;
setup.merge_fields = 1;
}
else if (memcmp(tvtype, "custom", 6) == 0)
{
setup = retroarch_snes_ntsc_composite;
setup.hue = custom_hue;
setup.saturation = custom_saturation;
setup.contrast = custom_contrast;
setup.brightness = custom_brightness;
setup.sharpness = custom_sharpness;
setup.gamma = custom_gamma;
setup.resolution = custom_resolution;
setup.artifacts = custom_artifacts;
setup.fringing = custom_fringing;
setup.bleed = custom_bleed;
setup.merge_fields = custom_merge_fields;
config->get_int(userdata, "hires_blit", &hires_blit, 1);
}
}
else
{
@ -169,7 +200,7 @@ static void blargg_ntsc_snes_render_rgb565(void *data, int width, int height,
uint16_t *input, int pitch, uint16_t *output, int outpitch)
{
struct filter_data *filt = (struct filter_data*)data;
if(width <= 256)
if(width <= 256 || !hires_blit)
retroarch_snes_ntsc_blit(filt->ntsc, input, pitch, filt->burst,
width, height, output, outpitch * 2, first, last);
else

View File

@ -20,6 +20,8 @@ snes_ntsc_setup_t const retroarch_snes_ntsc_composite = { 0, 0, 0, 0, 0, 0, 0,
snes_ntsc_setup_t const retroarch_snes_ntsc_svideo = { 0, 0, 0, 0,.2, 0,.2, -1, -1, 0, 1, 0, 0 };
snes_ntsc_setup_t const retroarch_snes_ntsc_rgb = { 0, 0, 0, 0,.2, 0,.7, -1, -1,-1, 1, 0, 0 };
int hires_blit = 1;
#define alignment_count 3
#define burst_count 3
#define rescale_in 8

View File

@ -39,6 +39,9 @@ extern snes_ntsc_setup_t const retroarch_snes_ntsc_svideo; /* color bleeding
extern snes_ntsc_setup_t const retroarch_snes_ntsc_rgb; /* crisp image */
extern snes_ntsc_setup_t const retroarch_snes_ntsc_monochrome;/* desaturated + artifacts */
/* Do hires blitting when set to 1, assuming 512 width for any res >256. Made for SNES 512 mode. */
extern int hires_blit;
/* Initializes and adjusts parameters. Can be called multiple times on the same
snes_ntsc_t object. Can pass NULL for either parameter. */
typedef struct snes_ntsc_t snes_ntsc_t;