From: Hans Verkuil Date: Tue, 12 Mar 2019 11:53:55 +0000 (-0400) Subject: media: vicodec: fix g_selection: either handle crop or compose X-Git-Tag: v5.4-rc1~956^2~148 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=fb56f4be05adb64674a8a4ec230090960a61732e;p=platform%2Fkernel%2Flinux-rpi.git media: vicodec: fix g_selection: either handle crop or compose The logic of g_selection was wrong: encoders support crop, decoders support compose, but the code allowed both. Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab --- diff --git a/drivers/media/platform/vicodec/vicodec-core.c b/drivers/media/platform/vicodec/vicodec-core.c index 570d5d0..c34a1ac 100644 --- a/drivers/media/platform/vicodec/vicodec-core.c +++ b/drivers/media/platform/vicodec/vicodec-core.c @@ -952,18 +952,14 @@ static int vidioc_g_selection(struct file *file, void *priv, * encoder supports only cropping on the OUTPUT buffer * decoder supports only composing on the CAPTURE buffer */ - if ((ctx->is_enc && s->type == V4L2_BUF_TYPE_VIDEO_OUTPUT) || - (!ctx->is_enc && s->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)) { + if (ctx->is_enc && s->type == V4L2_BUF_TYPE_VIDEO_OUTPUT) { switch (s->target) { - case V4L2_SEL_TGT_COMPOSE: case V4L2_SEL_TGT_CROP: s->r.left = 0; s->r.top = 0; s->r.width = q_data->visible_width; s->r.height = q_data->visible_height; return 0; - case V4L2_SEL_TGT_COMPOSE_DEFAULT: - case V4L2_SEL_TGT_COMPOSE_BOUNDS: case V4L2_SEL_TGT_CROP_DEFAULT: case V4L2_SEL_TGT_CROP_BOUNDS: s->r.left = 0; @@ -972,6 +968,22 @@ static int vidioc_g_selection(struct file *file, void *priv, s->r.height = q_data->coded_height; return 0; } + } else if (!ctx->is_enc && s->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) { + switch (s->target) { + case V4L2_SEL_TGT_COMPOSE: + s->r.left = 0; + s->r.top = 0; + s->r.width = q_data->visible_width; + s->r.height = q_data->visible_height; + return 0; + case V4L2_SEL_TGT_COMPOSE_DEFAULT: + case V4L2_SEL_TGT_COMPOSE_BOUNDS: + s->r.left = 0; + s->r.top = 0; + s->r.width = q_data->coded_width; + s->r.height = q_data->coded_height; + return 0; + } } return -EINVAL; }