[media] vivid: the overlay API wasn't disabled completely for multiplanar

If the vivid driver is loaded in multiplanar mode, then the capture overlay
functionality should be disabled. This wasn't fully done, which led to
v4l2-compliance errors.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:
Hans Verkuil 2015-03-09 12:34:32 -03:00 committed by Mauro Carvalho Chehab
parent 739cfd9be9
commit 9832e0e013

View File

@ -1012,8 +1012,12 @@ int vivid_vid_cap_cropcap(struct file *file, void *priv,
int vidioc_enum_fmt_vid_overlay(struct file *file, void *priv, int vidioc_enum_fmt_vid_overlay(struct file *file, void *priv,
struct v4l2_fmtdesc *f) struct v4l2_fmtdesc *f)
{ {
struct vivid_dev *dev = video_drvdata(file);
const struct vivid_fmt *fmt; const struct vivid_fmt *fmt;
if (dev->multiplanar)
return -ENOTTY;
if (f->index >= ARRAY_SIZE(formats_ovl)) if (f->index >= ARRAY_SIZE(formats_ovl))
return -EINVAL; return -EINVAL;
@ -1032,6 +1036,9 @@ int vidioc_g_fmt_vid_overlay(struct file *file, void *priv,
struct v4l2_window *win = &f->fmt.win; struct v4l2_window *win = &f->fmt.win;
unsigned clipcount = win->clipcount; unsigned clipcount = win->clipcount;
if (dev->multiplanar)
return -ENOTTY;
win->w.top = dev->overlay_cap_top; win->w.top = dev->overlay_cap_top;
win->w.left = dev->overlay_cap_left; win->w.left = dev->overlay_cap_left;
win->w.width = compose->width; win->w.width = compose->width;
@ -1063,6 +1070,9 @@ int vidioc_try_fmt_vid_overlay(struct file *file, void *priv,
struct v4l2_window *win = &f->fmt.win; struct v4l2_window *win = &f->fmt.win;
int i, j; int i, j;
if (dev->multiplanar)
return -ENOTTY;
win->w.left = clamp_t(int, win->w.left, win->w.left = clamp_t(int, win->w.left,
-dev->fb_cap.fmt.width, dev->fb_cap.fmt.width); -dev->fb_cap.fmt.width, dev->fb_cap.fmt.width);
win->w.top = clamp_t(int, win->w.top, win->w.top = clamp_t(int, win->w.top,
@ -1150,6 +1160,9 @@ int vivid_vid_cap_overlay(struct file *file, void *fh, unsigned i)
{ {
struct vivid_dev *dev = video_drvdata(file); struct vivid_dev *dev = video_drvdata(file);
if (dev->multiplanar)
return -ENOTTY;
if (i && dev->fb_vbase_cap == NULL) if (i && dev->fb_vbase_cap == NULL)
return -EINVAL; return -EINVAL;
@ -1169,6 +1182,9 @@ int vivid_vid_cap_g_fbuf(struct file *file, void *fh,
{ {
struct vivid_dev *dev = video_drvdata(file); struct vivid_dev *dev = video_drvdata(file);
if (dev->multiplanar)
return -ENOTTY;
*a = dev->fb_cap; *a = dev->fb_cap;
a->capability = V4L2_FBUF_CAP_BITMAP_CLIPPING | a->capability = V4L2_FBUF_CAP_BITMAP_CLIPPING |
V4L2_FBUF_CAP_LIST_CLIPPING; V4L2_FBUF_CAP_LIST_CLIPPING;
@ -1185,6 +1201,9 @@ int vivid_vid_cap_s_fbuf(struct file *file, void *fh,
struct vivid_dev *dev = video_drvdata(file); struct vivid_dev *dev = video_drvdata(file);
const struct vivid_fmt *fmt; const struct vivid_fmt *fmt;
if (dev->multiplanar)
return -ENOTTY;
if (!capable(CAP_SYS_ADMIN) && !capable(CAP_SYS_RAWIO)) if (!capable(CAP_SYS_ADMIN) && !capable(CAP_SYS_RAWIO))
return -EPERM; return -EPERM;