mirror of
https://github.com/genesi/linux-legacy.git
synced 2026-07-08 17:56:11 +00:00
ENGR00132543 v4l2 output: fill black in streamoff
Fill black data in streamoff, otherwise the last frame will keep in fb. Signed-off-by: Jason Chen <b02280@freescale.com>
This commit is contained in:
@@ -1536,6 +1536,49 @@ static int mxc_v4l2out_streamoff(vout_data * vout)
|
||||
if (vout->ic_bypass)
|
||||
cancel_work_sync(&vout->timer_work);
|
||||
|
||||
/* fill black color for fb, we assume fb has double buffer*/
|
||||
if (format_is_yuv(vout->v2f.fmt.pix.pixelformat)) {
|
||||
int i;
|
||||
|
||||
if ((vout->v2f.fmt.pix.pixelformat == V4L2_PIX_FMT_UYVY) ||
|
||||
(vout->v2f.fmt.pix.pixelformat == V4L2_PIX_FMT_YUYV) ||
|
||||
(!vout->ic_bypass)) {
|
||||
short * tmp = (short *) fbi->screen_base;
|
||||
short color;
|
||||
if (vout->v2f.fmt.pix.pixelformat == V4L2_PIX_FMT_YUYV)
|
||||
color = 0x8000;
|
||||
else
|
||||
color = 0x80;
|
||||
for (i = 0; i < (fbi->fix.line_length * fbi->var.yres_virtual)/2;
|
||||
i++, tmp++)
|
||||
*tmp = color;
|
||||
} else if ((vout->v2f.fmt.pix.pixelformat == V4L2_PIX_FMT_YUV420) ||
|
||||
(vout->v2f.fmt.pix.pixelformat == V4L2_PIX_FMT_YVU420) ||
|
||||
(vout->v2f.fmt.pix.pixelformat == V4L2_PIX_FMT_NV12)) {
|
||||
char * base = (char *)fbi->screen_base;
|
||||
int j, screen_size = fbi->var.xres * fbi->var.yres;
|
||||
|
||||
for (j = 0; j < 2; j++) {
|
||||
memset(base, 0, screen_size);
|
||||
base += screen_size;
|
||||
for (i = 0; i < screen_size/2; i++, base++)
|
||||
*base = 0x80;
|
||||
}
|
||||
} else if (vout->v2f.fmt.pix.pixelformat == V4L2_PIX_FMT_YUV422P) {
|
||||
char * base = (char *)fbi->screen_base;
|
||||
int j, screen_size = fbi->var.xres * fbi->var.yres;
|
||||
|
||||
for (j = 0; j < 2; j++) {
|
||||
memset(base, 0, screen_size);
|
||||
base += screen_size;
|
||||
for (i = 0; i < screen_size; i++, base++)
|
||||
*base = 0x80;
|
||||
}
|
||||
}
|
||||
} else
|
||||
memset(fbi->screen_base, 0x0,
|
||||
fbi->fix.line_length * fbi->var.yres_virtual);
|
||||
|
||||
spin_lock_irqsave(&g_lock, lockflag);
|
||||
|
||||
del_timer(&vout->output_timer);
|
||||
|
||||
Reference in New Issue
Block a user