mirror of https://gitee.com/openkylin/linux.git
[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:
parent
739cfd9be9
commit
9832e0e013
|
@ -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,
|
||||
struct v4l2_fmtdesc *f)
|
||||
{
|
||||
struct vivid_dev *dev = video_drvdata(file);
|
||||
const struct vivid_fmt *fmt;
|
||||
|
||||
if (dev->multiplanar)
|
||||
return -ENOTTY;
|
||||
|
||||
if (f->index >= ARRAY_SIZE(formats_ovl))
|
||||
return -EINVAL;
|
||||
|
||||
|
@ -1032,6 +1036,9 @@ int vidioc_g_fmt_vid_overlay(struct file *file, void *priv,
|
|||
struct v4l2_window *win = &f->fmt.win;
|
||||
unsigned clipcount = win->clipcount;
|
||||
|
||||
if (dev->multiplanar)
|
||||
return -ENOTTY;
|
||||
|
||||
win->w.top = dev->overlay_cap_top;
|
||||
win->w.left = dev->overlay_cap_left;
|
||||
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;
|
||||
int i, j;
|
||||
|
||||
if (dev->multiplanar)
|
||||
return -ENOTTY;
|
||||
|
||||
win->w.left = clamp_t(int, win->w.left,
|
||||
-dev->fb_cap.fmt.width, dev->fb_cap.fmt.width);
|
||||
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);
|
||||
|
||||
if (dev->multiplanar)
|
||||
return -ENOTTY;
|
||||
|
||||
if (i && dev->fb_vbase_cap == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
|
@ -1169,6 +1182,9 @@ int vivid_vid_cap_g_fbuf(struct file *file, void *fh,
|
|||
{
|
||||
struct vivid_dev *dev = video_drvdata(file);
|
||||
|
||||
if (dev->multiplanar)
|
||||
return -ENOTTY;
|
||||
|
||||
*a = dev->fb_cap;
|
||||
a->capability = V4L2_FBUF_CAP_BITMAP_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);
|
||||
const struct vivid_fmt *fmt;
|
||||
|
||||
if (dev->multiplanar)
|
||||
return -ENOTTY;
|
||||
|
||||
if (!capable(CAP_SYS_ADMIN) && !capable(CAP_SYS_RAWIO))
|
||||
return -EPERM;
|
||||
|
||||
|
|
Loading…
Reference in New Issue