Re: [PATCH v3] media: venus: add support for selection rectangles

From: Jeffrey Kardatzke
Date: Tue Feb 18 2020 - 14:14:43 EST


(again, sorry for duplicate to some people, didn't know the plain text
email rule before)
There were a few comments made when this patch was originally posted
that were not addressed. I left the patch as it last stood, except
for removing the unused variables.

The outstanding comments were:
1. In venc_init_session, it is only using the inst->width/height
rectangles and not the inst->out_width/out_height rectangles. So there
was a question about whether the OUTUPT rectangle should be set to
out_width/out_height. I'm looking for feedback here as I'm not
familiar enough with this driver code yet.
2. We should return EBUSY if the selection rectangles are changed
after we are initialized (I will update it to do this)
3. Support for non-zero top/left parameters. I'm suspicious that the
HFI_INDEX_EXTRADATA_INPUT_CROP property is what should be used for
that, but it's not currently used anywhere. Does anybody have details
on if that's what it's for?


On Tue, Feb 18, 2020 at 10:42 AM Jeffrey Kardatzke
<jkardatzke@xxxxxxxxxx> wrote:
>
> From: Malathi Gottam <>
>
> Handles target type crop by setting the new active rectangle
> to hardware. The new rectangle should be within YUV size.
>
> This was taken from: https://lkml.org/lkml/2018/11/9/899
>
> Signed-off-by: Malathi Gottam <mgottam@xxxxxxxxxxxxxx>
> Signed-off-by: Jeffrey Kardatzke <jkardatzke@xxxxxxxxxx>
> ---
> drivers/media/platform/qcom/venus/venc.c | 24 ++++++++++++++++++++----
> 1 file changed, 20 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/media/platform/qcom/venus/venc.c b/drivers/media/platform/qcom/venus/venc.c
> index 453edf966d4f..73b3181eed9a 100644
> --- a/drivers/media/platform/qcom/venus/venc.c
> +++ b/drivers/media/platform/qcom/venus/venc.c
> @@ -479,10 +479,26 @@ venc_s_selection(struct file *file, void *fh, struct v4l2_selection *s)
>
> switch (s->target) {
> case V4L2_SEL_TGT_CROP:
> - if (s->r.width != inst->out_width ||
> - s->r.height != inst->out_height ||
> - s->r.top != 0 || s->r.left != 0)
> - return -EINVAL;
> + if (s->r.left != 0) {
> + s->r.width += s->r.left;
> + s->r.left = 0;
> + }
> +
> + if (s->r.top != 0) {
> + s->r.height += s->r.top;
> + s->r.top = 0;
> + }
> +
> + if (s->r.width > inst->width)
> + s->r.width = inst->width;
> + else
> + inst->width = s->r.width;
> +
> + if (s->r.height > inst->height)
> + s->r.height = inst->height;
> + else
> + inst->height = s->r.height;
> +
> break;
> default:
> return -EINVAL;
> --
> 2.25.0.265.gbab2e86ba0-goog
>