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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2018-11-09 07:56, Tomasz Figa wrote:
Hi Malathi,

On Fri, Nov 9, 2018 at 4:39 PM Malathi Gottam <mgottam@xxxxxxxxxxxxxx> wrote:

Handles target type crop by setting the new active rectangle
to hardware. The new rectangle should be within YUV size.

Signed-off-by: Malathi Gottam <mgottam@xxxxxxxxxxxxxx>
---
drivers/media/platform/qcom/venus/venc.c | 26 ++++++++++++++++++++++----
 1 file changed, 22 insertions(+), 4 deletions(-)

diff --git a/drivers/media/platform/qcom/venus/venc.c b/drivers/media/platform/qcom/venus/venc.c
index ce85962..d26c129 100644
--- a/drivers/media/platform/qcom/venus/venc.c
+++ b/drivers/media/platform/qcom/venus/venc.c
@@ -478,16 +478,34 @@ static int venc_g_fmt(struct file *file, void *fh, struct v4l2_format *f) venc_s_selection(struct file *file, void *fh, struct v4l2_selection *s)
 {
        struct venus_inst *inst = to_inst(file);
+       int ret;
+       u32 buftype;

        if (s->type != V4L2_BUF_TYPE_VIDEO_OUTPUT)
                return -EINVAL;

        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;
+

From semantic point of view, it looks fine, but where is the rectangle
actually set to the hardware?

Best regards,
Tomasz

As this set selection call occurs before the hfi session initialization,
for now we are holding these values in driver.

As this call is followed by VIDIOC_REQBUFS(), as a part of this
we have venc_init_session

static int venc_init_session(struct venus_inst *inst)
{
	int ret;

	ret = hfi_session_init(inst, inst->fmt_cap->pixfmt);
	if (ret)
		return ret;

	ret = venus_helper_set_input_resolution(inst, inst->width,
						inst->height);
	if (ret)
		goto deinit;

	ret = venus_helper_set_output_resolution(inst, inst->width,
						 inst->height,
						 HFI_BUFFER_OUTPUT);
	if (ret)
		goto deinit;

	ret = venus_helper_set_color_format(inst, inst->fmt_out->pixfmt);
	if (ret)
		goto deinit;

	ret = venc_set_properties(inst);


From here we set these values to hardware.



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux