From: Sebastien Bourdeauducq Date: Thu, 16 May 2013 15:44:49 +0000 (+0200) Subject: software/videomixer: support additive blending (enable with SW1, status on LED) X-Git-Tag: 24jan2021_ls180~2923 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a39bf8ca7b59a998b33d811b58059885bc672a6e;p=litex.git software/videomixer: support additive blending (enable with SW1, status on LED) --- diff --git a/software/videomixer/main.c b/software/videomixer/main.c index 203d69e2..aa92c0f8 100644 --- a/software/videomixer/main.c +++ b/software/videomixer/main.c @@ -25,20 +25,51 @@ static int scale_pot(int raw, int range) return scaled; } -static void pots_service(void) +static void regular_blend(int p0, int p1) { - static int last_event; int blackout; int crossfade; + blackout = scale_pot(p0, 256); + crossfade = scale_pot(p1, 255); + + fb_blender_f0_write(crossfade*blackout >> 8); + fb_blender_f1_write((255-crossfade)*blackout >> 8); +} + +static void additive_blend(int p0, int p1) +{ + fb_blender_f0_write(scale_pot(p0, 255)); + fb_blender_f1_write(scale_pot(p1, 255)); +} + +static void pots_service(void) +{ + static int last_event; + static int additive_blend_enabled; + static int old_btn; + int btn; + int p0, p1; + if(elapsed(&last_event, identifier_frequency_read()/32)) { + btn = buttons_in_read() & 0x1; + if(btn && !old_btn) { + additive_blend_enabled = !additive_blend_enabled; + if(additive_blend_enabled) + leds_out_write(leds_out_read() | 0x1); + else + leds_out_write(leds_out_read() & ~0x1); + } + old_btn = btn; + pots_start_busy_write(1); while(pots_start_busy_read()); - blackout = scale_pot(pots_res0_read(), 256); - crossfade = scale_pot(pots_res1_read(), 255); - - fb_blender_f0_write(crossfade*blackout >> 8); - fb_blender_f1_write((255-crossfade)*blackout >> 8); + p0 = pots_res0_read(); + p1 = pots_res1_read(); + if(!additive_blend_enabled) + regular_blend(p0, p1); + else + additive_blend(p0, p1); } }