From a39bf8ca7b59a998b33d811b58059885bc672a6e Mon Sep 17 00:00:00 2001 From: Sebastien Bourdeauducq Date: Thu, 16 May 2013 17:44:49 +0200 Subject: [PATCH] software/videomixer: support additive blending (enable with SW1, status on LED) --- software/videomixer/main.c | 45 ++++++++++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/software/videomixer/main.c b/software/videomixer/main.c index 203d69e20..aa92c0f87 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); } }