aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/v4l2-core/v4l2-ioctl.c
diff options
context:
space:
mode:
authorHans Verkuil <hverkuil@xs4all.nl>2014-07-17 17:45:45 -0400
committerMauro Carvalho Chehab <m.chehab@samsung.com>2014-07-17 18:38:06 -0400
commite5ce558a6157e49374ba762471b77ce89ada4df0 (patch)
treed94e062ab9b8e01e394cec860414f990efb03166 /drivers/media/v4l2-core/v4l2-ioctl.c
parent9409945c7ff7ba39727df8ede2551bd22e76b58b (diff)
[media] v4l2-ioctl: clips, clipcount and bitmap should not be zeroed
Otherwise you cannot get the current clip and bitmap information from an overlay. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
Diffstat (limited to 'drivers/media/v4l2-core/v4l2-ioctl.c')
-rw-r--r--drivers/media/v4l2-core/v4l2-ioctl.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
index 46f45f087a83..e620387b29ca 100644
--- a/drivers/media/v4l2-core/v4l2-ioctl.c
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
@@ -1145,6 +1145,30 @@ static int v4l_g_fmt(const struct v4l2_ioctl_ops *ops,
1145 1145
1146 p->fmt.pix.priv = V4L2_PIX_FMT_PRIV_MAGIC; 1146 p->fmt.pix.priv = V4L2_PIX_FMT_PRIV_MAGIC;
1147 1147
1148 /*
1149 * fmt can't be cleared for these overlay types due to the 'clips'
1150 * 'clipcount' and 'bitmap' pointers in struct v4l2_window.
1151 * Those are provided by the user. So handle these two overlay types
1152 * first, and then just do a simple memset for the other types.
1153 */
1154 switch (p->type) {
1155 case V4L2_BUF_TYPE_VIDEO_OVERLAY:
1156 case V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY: {
1157 struct v4l2_clip *clips = p->fmt.win.clips;
1158 u32 clipcount = p->fmt.win.clipcount;
1159 void *bitmap = p->fmt.win.bitmap;
1160
1161 memset(&p->fmt, 0, sizeof(p->fmt));
1162 p->fmt.win.clips = clips;
1163 p->fmt.win.clipcount = clipcount;
1164 p->fmt.win.bitmap = bitmap;
1165 break;
1166 }
1167 default:
1168 memset(&p->fmt, 0, sizeof(p->fmt));
1169 break;
1170 }
1171
1148 switch (p->type) { 1172 switch (p->type) {
1149 case V4L2_BUF_TYPE_VIDEO_CAPTURE: 1173 case V4L2_BUF_TYPE_VIDEO_CAPTURE:
1150 if (unlikely(!is_rx || !is_vid || !ops->vidioc_g_fmt_vid_cap)) 1174 if (unlikely(!is_rx || !is_vid || !ops->vidioc_g_fmt_vid_cap))
@@ -2140,7 +2164,7 @@ struct v4l2_ioctl_info {
2140static struct v4l2_ioctl_info v4l2_ioctls[] = { 2164static struct v4l2_ioctl_info v4l2_ioctls[] = {
2141 IOCTL_INFO_FNC(VIDIOC_QUERYCAP, v4l_querycap, v4l_print_querycap, 0), 2165 IOCTL_INFO_FNC(VIDIOC_QUERYCAP, v4l_querycap, v4l_print_querycap, 0),
2142 IOCTL_INFO_FNC(VIDIOC_ENUM_FMT, v4l_enum_fmt, v4l_print_fmtdesc, INFO_FL_CLEAR(v4l2_fmtdesc, type)), 2166 IOCTL_INFO_FNC(VIDIOC_ENUM_FMT, v4l_enum_fmt, v4l_print_fmtdesc, INFO_FL_CLEAR(v4l2_fmtdesc, type)),
2143 IOCTL_INFO_FNC(VIDIOC_G_FMT, v4l_g_fmt, v4l_print_format, INFO_FL_CLEAR(v4l2_format, type)), 2167 IOCTL_INFO_FNC(VIDIOC_G_FMT, v4l_g_fmt, v4l_print_format, 0),
2144 IOCTL_INFO_FNC(VIDIOC_S_FMT, v4l_s_fmt, v4l_print_format, INFO_FL_PRIO), 2168 IOCTL_INFO_FNC(VIDIOC_S_FMT, v4l_s_fmt, v4l_print_format, INFO_FL_PRIO),
2145 IOCTL_INFO_FNC(VIDIOC_REQBUFS, v4l_reqbufs, v4l_print_requestbuffers, INFO_FL_PRIO | INFO_FL_QUEUE), 2169 IOCTL_INFO_FNC(VIDIOC_REQBUFS, v4l_reqbufs, v4l_print_requestbuffers, INFO_FL_PRIO | INFO_FL_QUEUE),
2146 IOCTL_INFO_FNC(VIDIOC_QUERYBUF, v4l_querybuf, v4l_print_buffer, INFO_FL_QUEUE | INFO_FL_CLEAR(v4l2_buffer, length)), 2170 IOCTL_INFO_FNC(VIDIOC_QUERYBUF, v4l_querybuf, v4l_print_buffer, INFO_FL_QUEUE | INFO_FL_CLEAR(v4l2_buffer, length)),