lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAA8EJpp7CjBuyWmgZGApihMBWvsfh_1yJdGTzjKidR3u=iQeJw@mail.gmail.com>
Date: Wed, 20 Dec 2023 10:15:22 +0200
From: Dmitry Baryshkov <dmitry.baryshkov@...aro.org>
To: Dikshita Agarwal <quic_dikshita@...cinc.com>
Cc: linux-media@...r.kernel.org, linux-kernel@...r.kernel.org, 
	stanimir.k.varbanov@...il.com, quic_vgarodia@...cinc.com, agross@...nel.org, 
	andersson@...nel.org, konrad.dybcio@...aro.org, mchehab@...nel.org, 
	bryan.odonoghue@...aro.org, linux-arm-msm@...r.kernel.org, 
	quic_abhinavk@...cinc.com
Subject: Re: [PATCH v2 03/34] media: introduce common helpers for buffer size calculation

On Wed, 20 Dec 2023 at 10:04, Dikshita Agarwal
<quic_dikshita@...cinc.com> wrote:
>
>
>
> On 12/19/2023 12:02 AM, Dmitry Baryshkov wrote:
> > On 18/12/2023 13:31, Dikshita Agarwal wrote:
> >> Introduce helper to calculate size of pixel buffer and
> >> use in venus driver.
> >>
> >> Signed-off-by: Dikshita Agarwal <quic_dikshita@...cinc.com>
> >> ---
> >>   drivers/media/platform/qcom/vcodec/buffers.c       | 103 ++++++++++++
> >>   drivers/media/platform/qcom/vcodec/buffers.h       |  15 ++
> >>   drivers/media/platform/qcom/vcodec/venus/Makefile  |   4 +-
> >>   drivers/media/platform/qcom/vcodec/venus/helpers.c | 172
> >> ++++-----------------
> >>   drivers/media/platform/qcom/vcodec/venus/helpers.h |   2 +-
> >>   .../platform/qcom/vcodec/venus/hfi_plat_bufs.h     |   4 +-
> >>   .../platform/qcom/vcodec/venus/hfi_plat_bufs_v6.c  |  10 +-
> >>   drivers/media/platform/qcom/vcodec/venus/vdec.c    |   5 +-
> >>   8 files changed, 157 insertions(+), 158 deletions(-)
> >>   create mode 100644 drivers/media/platform/qcom/vcodec/buffers.c
> >>   create mode 100644 drivers/media/platform/qcom/vcodec/buffers.h
> >>
> >> diff --git a/drivers/media/platform/qcom/vcodec/buffers.c
> >> b/drivers/media/platform/qcom/vcodec/buffers.c
> >> new file mode 100644
> >> index 0000000..58ab3b0
> >> --- /dev/null
> >> +++ b/drivers/media/platform/qcom/vcodec/buffers.c
> >> @@ -0,0 +1,103 @@
> >> +// SPDX-License-Identifier: GPL-2.0-only
> >> +/*
> >> + * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights
> >> reserved.
> >> + */
> >> +#include <linux/videodev2.h>
> >> +
> >> +#include "buffers.h"
> >> +
> >> +u32 video_raw_buffer_size(u32 colorformat,
> >
> > Usual drill, non-prefixed name.
> Will fix in next version.
> >
> >> +              u32 pix_width,
> >> +              u32 pix_height)
> >
> > My gut tells me that this is misaligned.
> >
> >> +{
> >> +    u32 size = 0;
> >> +    u32 y_plane, uv_plane, y_stride,
> >> +    uv_stride, y_sclines, uv_sclines;
> >> +    u32 y_ubwc_plane = 0, uv_ubwc_plane = 0;
> >> +    u32 y_meta_stride = 0, y_meta_scanlines = 0;
> >> +    u32 uv_meta_stride = 0, uv_meta_scanlines = 0;
> >> +    u32 y_meta_plane = 0, uv_meta_plane = 0;
> >> +
> >> +    if (!pix_width || !pix_height)
> >> +        goto invalid_input;
> >> +
> >> +    switch (colorformat) {
> >> +    case V4L2_PIX_FMT_NV12:
> >> +    case V4L2_PIX_FMT_NV21:
> >> +        y_stride = ALIGN(pix_width, 128);
> >> +        uv_stride = ALIGN(pix_width, 128);
> >> +        y_sclines = ALIGN(pix_height, 32);
> >> +        uv_sclines = ALIGN((pix_height + 1) >> 1, 16);
> >> +        y_plane = y_stride * y_sclines;
> >> +        uv_plane = uv_stride * uv_sclines;
> >> +        size = y_plane + uv_plane;
> >> +        break;
> >> +    case V4L2_PIX_FMT_QC08C:
> >> +        y_stride = ALIGN(pix_width, 128);
> >> +        uv_stride = ALIGN(pix_width, 128);
> >> +        y_sclines = ALIGN(pix_height, 32);
> >> +        uv_sclines = ALIGN((pix_height + 1) >> 1, 32);
> >> +        y_meta_stride = ALIGN(DIV_ROUND_UP(pix_width, 32), 64);
> >> +        uv_meta_stride = ALIGN(DIV_ROUND_UP((pix_width + 1) >> 1, 16), 64);
> >> +        y_ubwc_plane =
> >> +            ALIGN(y_stride * y_sclines, 4096);
> >> +        uv_ubwc_plane =
> >> +            ALIGN(uv_stride * uv_sclines, 4096);
> >> +        y_meta_scanlines =
> >> +            ALIGN(DIV_ROUND_UP(pix_height, 8), 16);
> >> +        y_meta_plane =
> >> +            ALIGN(y_meta_stride * y_meta_scanlines, 4096);
> >> +        uv_meta_scanlines =
> >> +            ALIGN(DIV_ROUND_UP((pix_height + 1) >> 1, 8), 16);
> >> +        uv_meta_plane =
> >> +            ALIGN(uv_meta_stride * uv_meta_scanlines, 4096);
> >> +        size = (y_ubwc_plane + uv_ubwc_plane + y_meta_plane +
> >> +            uv_meta_plane);
> >> +        break;
> >> +    case V4L2_PIX_FMT_QC10C:
> >> +        y_stride =
> >> +            ALIGN(ALIGN(pix_width, 192) * 4 / 3, 256);
> >> +        uv_stride =
> >> +            ALIGN(ALIGN(pix_width, 192) * 4 / 3, 256);
> >> +        y_sclines =
> >> +            ALIGN(pix_height, 16);
> >> +        uv_sclines =
> >> +            ALIGN((pix_height + 1) >> 1, 16);
> >> +        y_ubwc_plane =
> >> +            ALIGN(y_stride * y_sclines, 4096);
> >> +        uv_ubwc_plane =
> >> +            ALIGN(uv_stride * uv_sclines, 4096);
> >> +        y_meta_stride =
> >> +            ALIGN(DIV_ROUND_UP(pix_width, 48), 64);
> >> +        y_meta_scanlines =
> >> +            ALIGN(DIV_ROUND_UP(pix_height, 4), 16);
> >> +        y_meta_plane =
> >> +            ALIGN(y_meta_stride * y_meta_scanlines, 4096);
> >> +        uv_meta_stride =
> >> +            ALIGN(DIV_ROUND_UP((pix_width + 1) >> 1, 24), 64);
> >> +        uv_meta_scanlines =
> >> +            ALIGN(DIV_ROUND_UP((pix_height + 1) >> 1, 4), 16);
> >> +        uv_meta_plane =
> >> +            ALIGN(uv_meta_stride * uv_meta_scanlines, 4096);
> >> +
> >> +        size = y_ubwc_plane + uv_ubwc_plane + y_meta_plane +
> >> +            uv_meta_plane;
> >> +        break;
> >> +    case V4L2_PIX_FMT_P010:
> >> +        y_stride = ALIGN(pix_width * 2, 128);
> >> +        uv_stride = ALIGN(pix_width * 2, 128);
> >> +        y_sclines = ALIGN(pix_height, 32);
> >> +        uv_sclines = ALIGN((pix_height + 1) >> 1, 16);
> >> +        y_plane = y_stride * y_sclines;
> >> +        uv_plane = uv_stride * uv_sclines;
> >> +
> >> +        size = y_plane + uv_plane;
> >> +        break;
> >> +    default:
> >> +        break;
> >> +    }
> >> +
> >> +invalid_input:
> >> +
> >> +    return ALIGN(size, 4096);
> >> +}
> >> diff --git a/drivers/media/platform/qcom/vcodec/buffers.h
> >> b/drivers/media/platform/qcom/vcodec/buffers.h
> >> new file mode 100644
> >> index 0000000..ac1d052
> >> --- /dev/null
> >> +++ b/drivers/media/platform/qcom/vcodec/buffers.h
> >> @@ -0,0 +1,15 @@
> >> +/* SPDX-License-Identifier: GPL-2.0-only */
> >> +/*
> >> + * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights
> >> reserved.
> >> + */
> >> +
> >> +#ifndef _BUFFERS_H_
> >> +#define _BUFFERS_H_
> >> +
> >> +#include <linux/types.h>
> >> +
> >> +u32 video_raw_buffer_size(u32 colorformat,
> >> +              u32 pix_width,
> >> +              u32 pix_height);
> >> +
> >> +#endif
> >> diff --git a/drivers/media/platform/qcom/vcodec/venus/Makefile
> >> b/drivers/media/platform/qcom/vcodec/venus/Makefile
> >> index 1941ef4..6abd54a 100644
> >> --- a/drivers/media/platform/qcom/vcodec/venus/Makefile
> >> +++ b/drivers/media/platform/qcom/vcodec/venus/Makefile
> >> @@ -1,8 +1,7 @@
> >>   # SPDX-License-Identifier: GPL-2.0
> >>   # Makefile for Qualcomm Venus driver
> >>   -venus-core-objs += ../firmware.o \
> >> -           ../hfi_queue.o
> >> +venus-core-objs += ../firmware.o ../hfi_queue.o ../buffers.o
> >
> > Ugh. I missed that in the previous patches. This is not how the helpers are
> > done. Add normal kernel module instead.
> >
> I unnderstand this looks little messy, I can try to move the makefile one
> level up (in new vcodec folder), compile the common object by default and
> compile venus or iris based on config.
> Please let me know what do you think of this apporach.

I think that you want a venus-common or qcom-vcodec-common kernel
module instead. It will have a clean API and clean interfaces.

But, what we really want is to have iris as a subdir and subdriver inside venus.

>
> >>     venus-core-objs += core.o helpers.o firmware_no_tz.o \
> >>              hfi_venus.o hfi_msgs.o hfi_cmds.o hfi.o \
> >> @@ -10,6 +9,7 @@ venus-core-objs += core.o helpers.o firmware_no_tz.o \
> >>              hfi_platform.o hfi_platform_v4.o \
> >>              hfi_platform_v6.o hfi_plat_bufs_v6.o \
> >>   +venus-dec-objs += ../buffers.o
> >
> > I really wonder, why doesn't this end up with 'symbol defined multiple
> > times' error.
> >
> >>   venus-dec-objs += vdec.o vdec_ctrls.o
> >>   venus-enc-objs += venc.o venc_ctrls.o
> >>   diff --git a/drivers/media/platform/qcom/vcodec/venus/helpers.c
> >> b/drivers/media/platform/qcom/vcodec/venus/helpers.c
> >> index 8295542..95e4424 100644
> >> --- a/drivers/media/platform/qcom/vcodec/venus/helpers.c
> >> +++ b/drivers/media/platform/qcom/vcodec/venus/helpers.c
> >> @@ -12,6 +12,7 @@
> >>   #include <media/v4l2-mem2mem.h>
> >>   #include <asm/div64.h>
> >>   +#include "../buffers.h"
> >>   #include "core.h"
> >>   #include "helpers.h"
> >>   #include "hfi_helper.h"
> >> @@ -616,6 +617,27 @@ static u32 to_hfi_raw_fmt(u32 v4l2_fmt)
> >>       return 0;
> >>   }
> >>   +u32 to_v4l2_raw_fmt(u32 hfi_color_fmt)
> >> +{
> >> +    switch (hfi_color_fmt) {
> >> +    case HFI_COLOR_FORMAT_NV12:
> >> +        return V4L2_PIX_FMT_NV12;
> >> +    case HFI_COLOR_FORMAT_NV21:
> >> +        return V4L2_PIX_FMT_NV21;
> >> +    case HFI_COLOR_FORMAT_NV12_UBWC:
> >> +        return V4L2_PIX_FMT_QC08C;
> >> +    case HFI_COLOR_FORMAT_YUV420_TP10_UBWC:
> >> +        return V4L2_PIX_FMT_QC10C;
> >> +    case HFI_COLOR_FORMAT_P010:
> >> +        return V4L2_PIX_FMT_P010;
> >> +    default:
> >> +        break;
> >> +    }
> >> +
> >> +    return 0;
> >> +}
> >> +EXPORT_SYMBOL_GPL(to_v4l2_raw_fmt);
> >> +
> >>   static int platform_get_bufreq(struct venus_inst *inst, u32 buftype,
> >>                      struct hfi_buffer_requirements *req)
> >>   {
> >> @@ -639,20 +661,20 @@ static int platform_get_bufreq(struct venus_inst
> >> *inst, u32 buftype,
> >>           params.out_width = inst->out_width;
> >>           params.out_height = inst->out_height;
> >>           params.codec = inst->fmt_out->pixfmt;
> >> -        params.hfi_color_fmt = to_hfi_raw_fmt(inst->fmt_cap->pixfmt);
> >> +        params.color_fmt = inst->fmt_cap->pixfmt;
> >>           params.dec.max_mbs_per_frame = mbs_per_frame_max(inst);
> >>           params.dec.buffer_size_limit = 0;
> >>           params.dec.is_secondary_output =
> >>               inst->opb_buftype == HFI_BUFFER_OUTPUT2;
> >>           if (params.dec.is_secondary_output)
> >> -            params.hfi_dpb_color_fmt = inst->dpb_fmt;
> >> +            params.dpb_color_fmt = to_v4l2_raw_fmt(inst->dpb_fmt);
> >>           params.dec.is_interlaced =
> >>               inst->pic_struct != HFI_INTERLACE_FRAME_PROGRESSIVE;
> >>       } else {
> >>           params.width = inst->out_width;
> >>           params.height = inst->out_height;
> >>           params.codec = inst->fmt_cap->pixfmt;
> >> -        params.hfi_color_fmt = to_hfi_raw_fmt(inst->fmt_out->pixfmt);
> >> +        params.color_fmt = inst->fmt_out->pixfmt;
> >>           params.enc.work_mode = VIDC_WORK_MODE_2;
> >>           params.enc.rc_type = HFI_RATE_CONTROL_OFF;
> >>           if (enc_ctr->bitrate_mode == V4L2_MPEG_VIDEO_BITRATE_MODE_CQ)
> >> @@ -942,146 +964,10 @@ int venus_helper_set_profile_level(struct
> >> venus_inst *inst, u32 profile, u32 lev
> >>   }
> >>   EXPORT_SYMBOL_GPL(venus_helper_set_profile_level);
> >>   -static u32 get_framesize_raw_nv12(u32 width, u32 height)
> >> -{
> >> -    u32 y_stride, uv_stride, y_plane;
> >> -    u32 y_sclines, uv_sclines, uv_plane;
> >> -    u32 size;
> >> -
> >> -    y_stride = ALIGN(width, 128);
> >> -    uv_stride = ALIGN(width, 128);
> >> -    y_sclines = ALIGN(height, 32);
> >> -    uv_sclines = ALIGN(((height + 1) >> 1), 16);
> >> -
> >> -    y_plane = y_stride * y_sclines;
> >> -    uv_plane = uv_stride * uv_sclines + SZ_4K;
> >> -    size = y_plane + uv_plane + SZ_8K;
> >> -
> >> -    return ALIGN(size, SZ_4K);
> >> -}
> >> -
> >> -static u32 get_framesize_raw_nv12_ubwc(u32 width, u32 height)
> >> -{
> >> -    u32 y_meta_stride, y_meta_plane;
> >> -    u32 y_stride, y_plane;
> >> -    u32 uv_meta_stride, uv_meta_plane;
> >> -    u32 uv_stride, uv_plane;
> >> -    u32 extradata = SZ_16K;
> >> -
> >> -    y_meta_stride = ALIGN(DIV_ROUND_UP(width, 32), 64);
> >> -    y_meta_plane = y_meta_stride * ALIGN(DIV_ROUND_UP(height, 8), 16);
> >> -    y_meta_plane = ALIGN(y_meta_plane, SZ_4K);
> >> -
> >> -    y_stride = ALIGN(width, 128);
> >> -    y_plane = ALIGN(y_stride * ALIGN(height, 32), SZ_4K);
> >> -
> >> -    uv_meta_stride = ALIGN(DIV_ROUND_UP(width / 2, 16), 64);
> >> -    uv_meta_plane = uv_meta_stride * ALIGN(DIV_ROUND_UP(height / 2, 8),
> >> 16);
> >> -    uv_meta_plane = ALIGN(uv_meta_plane, SZ_4K);
> >> -
> >> -    uv_stride = ALIGN(width, 128);
> >> -    uv_plane = ALIGN(uv_stride * ALIGN(height / 2, 32), SZ_4K);
> >> -
> >> -    return ALIGN(y_meta_plane + y_plane + uv_meta_plane + uv_plane +
> >> -             max(extradata, y_stride * 48), SZ_4K);
> >> -}
> >> -
> >> -static u32 get_framesize_raw_p010(u32 width, u32 height)
> >> -{
> >> -    u32 y_plane, uv_plane, y_stride, uv_stride, y_sclines, uv_sclines;
> >> -
> >> -    y_stride = ALIGN(width * 2, 128);
> >> -    uv_stride = ALIGN(width * 2, 128);
> >> -    y_sclines = ALIGN(height, 32);
> >> -    uv_sclines = ALIGN((height + 1) >> 1, 16);
> >> -    y_plane = y_stride * y_sclines;
> >> -    uv_plane = uv_stride * uv_sclines;
> >> -
> >> -    return ALIGN((y_plane + uv_plane), SZ_4K);
> >> -}
> >> -
> >> -static u32 get_framesize_raw_p010_ubwc(u32 width, u32 height)
> >> -{
> >> -    u32 y_stride, uv_stride, y_sclines, uv_sclines;
> >> -    u32 y_ubwc_plane, uv_ubwc_plane;
> >> -    u32 y_meta_stride, y_meta_scanlines;
> >> -    u32 uv_meta_stride, uv_meta_scanlines;
> >> -    u32 y_meta_plane, uv_meta_plane;
> >> -    u32 size;
> >> -
> >> -    y_stride = ALIGN(width * 2, 256);
> >> -    uv_stride = ALIGN(width * 2, 256);
> >> -    y_sclines = ALIGN(height, 16);
> >> -    uv_sclines = ALIGN((height + 1) >> 1, 16);
> >> -
> >> -    y_ubwc_plane = ALIGN(y_stride * y_sclines, SZ_4K);
> >> -    uv_ubwc_plane = ALIGN(uv_stride * uv_sclines, SZ_4K);
> >> -    y_meta_stride = ALIGN(DIV_ROUND_UP(width, 32), 64);
> >> -    y_meta_scanlines = ALIGN(DIV_ROUND_UP(height, 4), 16);
> >> -    y_meta_plane = ALIGN(y_meta_stride * y_meta_scanlines, SZ_4K);
> >> -    uv_meta_stride = ALIGN(DIV_ROUND_UP((width + 1) >> 1, 16), 64);
> >> -    uv_meta_scanlines = ALIGN(DIV_ROUND_UP((height + 1) >> 1, 4), 16);
> >> -    uv_meta_plane = ALIGN(uv_meta_stride * uv_meta_scanlines, SZ_4K);
> >> -
> >> -    size = y_ubwc_plane + uv_ubwc_plane + y_meta_plane + uv_meta_plane;
> >> -
> >> -    return ALIGN(size, SZ_4K);
> >> -}
> >> -
> >> -static u32 get_framesize_raw_yuv420_tp10_ubwc(u32 width, u32 height)
> >> -{
> >> -    u32 y_stride, uv_stride, y_sclines, uv_sclines;
> >> -    u32 y_ubwc_plane, uv_ubwc_plane;
> >> -    u32 y_meta_stride, y_meta_scanlines;
> >> -    u32 uv_meta_stride, uv_meta_scanlines;
> >> -    u32 y_meta_plane, uv_meta_plane;
> >> -    u32 extradata = SZ_16K;
> >> -    u32 size;
> >> -
> >> -    y_stride = ALIGN(width * 4 / 3, 256);
> >> -    uv_stride = ALIGN(width * 4 / 3, 256);
> >> -    y_sclines = ALIGN(height, 16);
> >> -    uv_sclines = ALIGN((height + 1) >> 1, 16);
> >> -
> >> -    y_ubwc_plane = ALIGN(y_stride * y_sclines, SZ_4K);
> >> -    uv_ubwc_plane = ALIGN(uv_stride * uv_sclines, SZ_4K);
> >> -    y_meta_stride = ALIGN(DIV_ROUND_UP(width, 48), 64);
> >> -    y_meta_scanlines = ALIGN(DIV_ROUND_UP(height, 4), 16);
> >> -    y_meta_plane = ALIGN(y_meta_stride * y_meta_scanlines, SZ_4K);
> >> -    uv_meta_stride = ALIGN(DIV_ROUND_UP((width + 1) >> 1, 24), 64);
> >> -    uv_meta_scanlines = ALIGN(DIV_ROUND_UP((height + 1) >> 1, 4), 16);
> >> -    uv_meta_plane = ALIGN(uv_meta_stride * uv_meta_scanlines, SZ_4K);
> >> -
> >> -    size = y_ubwc_plane + uv_ubwc_plane + y_meta_plane + uv_meta_plane;
> >> -    size += max(extradata + SZ_8K, y_stride * 48);
> >> -
> >> -    return ALIGN(size, SZ_4K);
> >> -}
> >> -
> >> -u32 venus_helper_get_framesz_raw(u32 hfi_fmt, u32 width, u32 height)
> >> -{
> >> -    switch (hfi_fmt) {
> >> -    case HFI_COLOR_FORMAT_NV12:
> >> -    case HFI_COLOR_FORMAT_NV21:
> >> -        return get_framesize_raw_nv12(width, height);
> >> -    case HFI_COLOR_FORMAT_NV12_UBWC:
> >> -        return get_framesize_raw_nv12_ubwc(width, height);
> >> -    case HFI_COLOR_FORMAT_P010:
> >> -        return get_framesize_raw_p010(width, height);
> >> -    case HFI_COLOR_FORMAT_P010_UBWC:
> >> -        return get_framesize_raw_p010_ubwc(width, height);
> >> -    case HFI_COLOR_FORMAT_YUV420_TP10_UBWC:
> >> -        return get_framesize_raw_yuv420_tp10_ubwc(width, height);
> >> -    default:
> >> -        return 0;
> >> -    }
> >> -}
> >> -EXPORT_SYMBOL_GPL(venus_helper_get_framesz_raw);
> >> -
> >>   u32 venus_helper_get_framesz(u32 v4l2_fmt, u32 width, u32 height)
> >>   {
> >> -    u32 hfi_fmt, sz;
> >>       bool compressed;
> >> +    u32 sz;
> >>         switch (v4l2_fmt) {
> >>       case V4L2_PIX_FMT_MPEG:
> >> @@ -1112,11 +998,7 @@ u32 venus_helper_get_framesz(u32 v4l2_fmt, u32
> >> width, u32 height)
> >>           return ALIGN(sz, SZ_4K);
> >>       }
> >>   -    hfi_fmt = to_hfi_raw_fmt(v4l2_fmt);
> >> -    if (!hfi_fmt)
> >> -        return 0;
> >> -
> >> -    return venus_helper_get_framesz_raw(hfi_fmt, width, height);
> >> +    return video_raw_buffer_size(v4l2_fmt, width, height);
> >>   }
> >>   EXPORT_SYMBOL_GPL(venus_helper_get_framesz);
> >>   diff --git a/drivers/media/platform/qcom/vcodec/venus/helpers.h
> >> b/drivers/media/platform/qcom/vcodec/venus/helpers.h
> >> index 358e4f3..9b72d18 100644
> >> --- a/drivers/media/platform/qcom/vcodec/venus/helpers.h
> >> +++ b/drivers/media/platform/qcom/vcodec/venus/helpers.h
> >> @@ -11,6 +11,7 @@
> >>   struct venus_inst;
> >>   struct venus_core;
> >>   +u32 to_v4l2_raw_fmt(u32 hfi_color_fmt);
> >>   bool venus_helper_check_codec(struct venus_inst *inst, u32 v4l2_pixfmt);
> >>   struct vb2_v4l2_buffer *venus_helper_find_buf(struct venus_inst *inst,
> >>                             unsigned int type, u32 idx);
> >> @@ -29,7 +30,6 @@ void venus_helper_m2m_device_run(void *priv);
> >>   void venus_helper_m2m_job_abort(void *priv);
> >>   int venus_helper_get_bufreq(struct venus_inst *inst, u32 type,
> >>                   struct hfi_buffer_requirements *req);
> >> -u32 venus_helper_get_framesz_raw(u32 hfi_fmt, u32 width, u32 height);
> >>   u32 venus_helper_get_framesz(u32 v4l2_fmt, u32 width, u32 height);
> >>   int venus_helper_set_input_resolution(struct venus_inst *inst,
> >>                         unsigned int width, unsigned int height);
> >> diff --git a/drivers/media/platform/qcom/vcodec/venus/hfi_plat_bufs.h
> >> b/drivers/media/platform/qcom/vcodec/venus/hfi_plat_bufs.h
> >> index 25e6074..20f684e 100644
> >> --- a/drivers/media/platform/qcom/vcodec/venus/hfi_plat_bufs.h
> >> +++ b/drivers/media/platform/qcom/vcodec/venus/hfi_plat_bufs.h
> >> @@ -15,8 +15,8 @@ struct hfi_plat_buffers_params {
> >>       u32 out_width;
> >>       u32 out_height;
> >>       u32 codec;
> >> -    u32 hfi_color_fmt;
> >> -    u32 hfi_dpb_color_fmt;
> >> +    u32 color_fmt;
> >> +    u32 dpb_color_fmt;
> >
> > As usual. This is not a helper introduction. This is field rename. Could
> > you please split that.
> >
> >>       enum hfi_version version;
> >>       u32 num_vpp_pipes;
> >>       union {
> >> diff --git a/drivers/media/platform/qcom/vcodec/venus/hfi_plat_bufs_v6.c
> >> b/drivers/media/platform/qcom/vcodec/venus/hfi_plat_bufs_v6.c
> >> index f5a6559..3e06516 100644
> >> --- a/drivers/media/platform/qcom/vcodec/venus/hfi_plat_bufs_v6.c
> >> +++ b/drivers/media/platform/qcom/vcodec/venus/hfi_plat_bufs_v6.c
> >> @@ -6,6 +6,7 @@
> >>   #include <linux/sizes.h>
> >>   #include <linux/videodev2.h>
> >>   +#include "../buffers.h"
> >>   #include "hfi.h"
> >>   #include "hfi_plat_bufs.h"
> >>   #include "helpers.h"
> >> @@ -1233,13 +1234,11 @@ static int bufreq_dec(struct
> >> hfi_plat_buffers_params *params, u32 buftype,
> >>                                  buffer_size_limit);
> >>       } else if (buftype == HFI_BUFFER_OUTPUT || buftype ==
> >> HFI_BUFFER_OUTPUT2) {
> >>           hfi_bufreq_set_count_min(bufreq, version, out_min_count);
> >> -        bufreq->size =
> >> -            venus_helper_get_framesz_raw(params->hfi_color_fmt,
> >> +        bufreq->size = video_raw_buffer_size(params->color_fmt,
> >>                                out_width, out_height);
> >>           if (buftype == HFI_BUFFER_OUTPUT &&
> >>               params->dec.is_secondary_output)
> >> -            bufreq->size =
> >> -                venus_helper_get_framesz_raw(params->hfi_dpb_color_fmt,
> >> +            bufreq->size = video_raw_buffer_size(params->dpb_color_fmt,
> >>                                    out_width, out_height);
> >>       } else if (buftype == HFI_BUFFER_INTERNAL_SCRATCH(version)) {
> >>           bufreq->size = dec_ops->scratch(width, height, is_interlaced);
> >> @@ -1297,8 +1296,7 @@ static int bufreq_enc(struct
> >> hfi_plat_buffers_params *params, u32 buftype,
> >>         if (buftype == HFI_BUFFER_INPUT) {
> >>           hfi_bufreq_set_count_min(bufreq, version, MIN_INPUT_BUFFERS);
> >> -        bufreq->size =
> >> -            venus_helper_get_framesz_raw(params->hfi_color_fmt,
> >> +        bufreq->size = video_raw_buffer_size(params->color_fmt,
> >>                                width, height);
> >>       } else if (buftype == HFI_BUFFER_OUTPUT ||
> >>              buftype == HFI_BUFFER_OUTPUT2) {
> >> diff --git a/drivers/media/platform/qcom/vcodec/venus/vdec.c
> >> b/drivers/media/platform/qcom/vcodec/venus/vdec.c
> >> index dbf305c..e6316be 100644
> >> --- a/drivers/media/platform/qcom/vcodec/venus/vdec.c
> >> +++ b/drivers/media/platform/qcom/vcodec/venus/vdec.c
> >> @@ -15,6 +15,7 @@
> >>   #include <media/v4l2-mem2mem.h>
> >>   #include <media/videobuf2-dma-contig.h>
> >>   +#include "../buffers.h"
> >>   #include "hfi_venus_io.h"
> >>   #include "hfi_parser.h"
> >>   #include "core.h"
> >> @@ -777,9 +778,9 @@ static int vdec_output_conf(struct venus_inst *inst)
> >>           return ret;
> >>         inst->output_buf_size =
> >> -            venus_helper_get_framesz_raw(out_fmt, width, height);
> >> +            video_raw_buffer_size(to_v4l2_raw_fmt(out_fmt), width, height);
> >>       inst->output2_buf_size =
> >> -            venus_helper_get_framesz_raw(out2_fmt, width, height);
> >> +            video_raw_buffer_size(to_v4l2_raw_fmt(out2_fmt), width,
> >> height);
> >>         if (is_ubwc_fmt(out_fmt)) {
> >>           inst->opb_buftype = HFI_BUFFER_OUTPUT2;
> >



-- 
With best wishes
Dmitry

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ