2018-10-08 11:09:49

by Vikash Garodia

[permalink] [raw]
Subject: [PATCH v2] venus: vdec: fix decoded data size

Existing code returns the max of the decoded size and buffer size.
It turns out that buffer size is always greater due to hardware
alignment requirement. As a result, payload size given to client
is incorrect. This change ensures that the bytesused is assigned
to actual payload size, when available.

Signed-off-by: Vikash Garodia <[email protected]>
---
drivers/media/platform/qcom/venus/vdec.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/media/platform/qcom/venus/vdec.c b/drivers/media/platform/qcom/venus/vdec.c
index 991e158..189ec97 100644
--- a/drivers/media/platform/qcom/venus/vdec.c
+++ b/drivers/media/platform/qcom/venus/vdec.c
@@ -888,8 +888,7 @@ static void vdec_buf_done(struct venus_inst *inst, unsigned int buf_type,
unsigned int opb_sz = venus_helper_get_opb_size(inst);

vb = &vbuf->vb2_buf;
- vb->planes[0].bytesused =
- max_t(unsigned int, opb_sz, bytesused);
+ vb2_set_plane_payload(vb, 0, bytesused ? : opb_sz);
vb->planes[0].data_offset = data_offset;
vb->timestamp = timestamp_us * NSEC_PER_USEC;
vbuf->sequence = inst->sequence_cap++;
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project



2018-10-08 12:22:24

by Stanimir Varbanov

[permalink] [raw]
Subject: Re: [PATCH v2] venus: vdec: fix decoded data size

Hi Vikash,

On 10/08/2018 02:09 PM, Vikash Garodia wrote:
> Existing code returns the max of the decoded size and buffer size.
> It turns out that buffer size is always greater due to hardware
> alignment requirement. As a result, payload size given to client
> is incorrect. This change ensures that the bytesused is assigned
> to actual payload size, when available.
>
> Signed-off-by: Vikash Garodia <[email protected]>
> ---
> drivers/media/platform/qcom/venus/vdec.c | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/drivers/media/platform/qcom/venus/vdec.c b/drivers/media/platform/qcom/venus/vdec.c
> index 991e158..189ec97 100644
> --- a/drivers/media/platform/qcom/venus/vdec.c
> +++ b/drivers/media/platform/qcom/venus/vdec.c
> @@ -888,8 +888,7 @@ static void vdec_buf_done(struct venus_inst *inst, unsigned int buf_type,
> unsigned int opb_sz = venus_helper_get_opb_size(inst);
>
> vb = &vbuf->vb2_buf;
> - vb->planes[0].bytesused =
> - max_t(unsigned int, opb_sz, bytesused);
> + vb2_set_plane_payload(vb, 0, bytesused ? : opb_sz);
> vb->planes[0].data_offset = data_offset;
> vb->timestamp = timestamp_us * NSEC_PER_USEC;
> vbuf->sequence = inst->sequence_cap++;
>

Acked-by: Stanimir Varbanov <[email protected]>

--
regards,
Stan

2018-10-10 07:02:18

by Alexandre Courbot

[permalink] [raw]
Subject: Re: [PATCH v2] venus: vdec: fix decoded data size

On Mon, Oct 8, 2018 at 8:09 PM Vikash Garodia <[email protected]> wrote:
>
> Existing code returns the max of the decoded size and buffer size.
> It turns out that buffer size is always greater due to hardware
> alignment requirement. As a result, payload size given to client
> is incorrect. This change ensures that the bytesused is assigned
> to actual payload size, when available.
>
> Signed-off-by: Vikash Garodia <[email protected]>

Tested-by: Alexandre Courbot <[email protected]>