No need to download the video (which requires a Motion JPEG codec), here are a couple of frames :-
Just like the initial splashscreen (that had too small a buffer size), we have three columns and an interlaced effect.
For those interested, here is current zebra code :-
int gui_osd_draw_zebra() {
unsigned int v, s, x, y, f, over;
color cl_under=conf.zebra_color>>8, cl_over=conf.zebra_color&0xFF;
static int need_restore=0;
int viewport_height;
if (!buf) {
buf = malloc(screen_size);
scr_buf = vid_get_bitmap_fb();
}
if (buf) {
++timer;
img_buf=((mode_get()&MODE_MASK) == MODE_PLAY)?vid_get_viewport_fb_d():vid_get_viewport_fb();
viewport_height = vid_get_viewport_height();
switch (conf.zebra_mode) {
case ZEBRA_MODE_ZEBRA_1:
f = 4;
break;
case ZEBRA_MODE_ZEBRA_2:
f = 8;
break;
case ZEBRA_MODE_SOLID:
f = 1;
break;
case ZEBRA_MODE_BLINKED_1:
f = timer&2;
break;
case ZEBRA_MODE_BLINKED_3:
f = timer&8;
break;
case ZEBRA_MODE_BLINKED_2:
default:
f = timer&4;
break;
}
if (!f) {
if (need_restore) {
if (conf.zebra_restore_screen || conf.zebra_restore_osd) {
draw_restore();
} else {
memset(buf, COLOR_TRANSPARENT, screen_size);
gui_osd_draw_zebra_osd();
memcpy(scr_buf, buf, screen_size);
memcpy(scr_buf+screen_size, buf, screen_size);
}
need_restore=0;
}
return !(conf.zebra_restore_screen && conf.zebra_restore_osd);
} else {
over = 255-conf.zebra_over;
if (conf.zebra_mode == ZEBRA_MODE_ZEBRA_1 || conf.zebra_mode == ZEBRA_MODE_ZEBRA_2) {
for (s=0, y=0; y<screen_height; ++y) {
#if !defined(CAMERA_tx1)
v=y*viewport_height/screen_height*screen_width*3+1;
for (x=0; x<screen_width; ++x, ++s, v+=3) {
#else
v=y*viewport_height/screen_height*(screen_width-120)*3+1;
for (x=0; x<screen_width-120; ++x, ++s, v+=3) {
#endif
buf[
s]=(img_buf[v]>over && ((y-x-timer)&f))?cl_over:((img_buf[v]<conf.zebra_under && ((y-x-timer)&f))?cl_under:COLOR_TRANSPARENT);
}
}
} else {
for (s=0, v=y=1; y<=viewport_height; ++y) {
#if !defined(CAMERA_tx1)
for (x=0; x<screen_width; ++x, ++s, v+=3) {
buf[
s]=(img_buf[v]>over)?cl_over:((img_buf[v]<conf.zebra_under)?cl_under:COLOR_TRANSPARENT);
}
if (y*screen_height/viewport_height == (s+screen_width)/screen_width) {
memcpy(buf+s, buf+s-screen_width, screen_width);
s+=screen_width;
#else
for (x=0; x<screen_width-120; ++x, ++s, v+=3) {
buf[
s]=(img_buf[v]>over)?cl_over:((img_buf[v]<conf.zebra_under)?cl_under:COLOR_TRANSPARENT);
}
if (y*screen_height/viewport_height == (s+screen_width-120)/screen_width-120) {
memcpy(buf+s, buf+s-(screen_width-120), screen_width-120);
s+=screen_width-120;
#endif
}
}
}
gui_osd_draw_zebra_osd();
memcpy(scr_buf, buf, screen_size);
memcpy(scr_buf+screen_size, buf, screen_size);
need_restore=1;
return 1;
}
}
return 0;
}