software/videomixer: support additive blending (enable with SW1, status on LED)

This commit is contained in:
Sebastien Bourdeauducq 2013-05-16 17:44:49 +02:00
parent ac64701e19
commit a39bf8ca7b
1 changed files with 38 additions and 7 deletions

View File

@ -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);
}
}