lkml.org 
[lkml]   [2021]   [Sep]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 059/144] media: coda: fix frame_mem_ctrl for YUV420 and YVU420 formats
    Date
    From: Philipp Zabel <p.zabel@pengutronix.de>

    [ Upstream commit 44693d74f5653f82cd7ca0fe730eed0f6b83306a ]

    The frame memory control register value is currently determined
    before userspace selects the final capture format and never corrected.
    Update ctx->frame_mem_ctrl in __coda_start_decoding() to fix decoding
    into YUV420 or YVU420 capture buffers.

    Reported-by: Andrej Picej <andrej.picej@norik.com>
    Fixes: 497e6b8559a6 ("media: coda: add sequence initialization work")
    Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/media/platform/coda/coda-bit.c | 18 +++++++++++++-----
    1 file changed, 13 insertions(+), 5 deletions(-)

    diff --git a/drivers/media/platform/coda/coda-bit.c b/drivers/media/platform/coda/coda-bit.c
    index 00c7bed3dd57..e6b68be09f8f 100644
    --- a/drivers/media/platform/coda/coda-bit.c
    +++ b/drivers/media/platform/coda/coda-bit.c
    @@ -2023,17 +2023,25 @@ static int __coda_start_decoding(struct coda_ctx *ctx)
    u32 src_fourcc, dst_fourcc;
    int ret;

    + q_data_src = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT);
    + q_data_dst = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_CAPTURE);
    + src_fourcc = q_data_src->fourcc;
    + dst_fourcc = q_data_dst->fourcc;
    +
    if (!ctx->initialized) {
    ret = __coda_decoder_seq_init(ctx);
    if (ret < 0)
    return ret;
    + } else {
    + ctx->frame_mem_ctrl &= ~(CODA_FRAME_CHROMA_INTERLEAVE | (0x3 << 9) |
    + CODA9_FRAME_TILED2LINEAR);
    + if (dst_fourcc == V4L2_PIX_FMT_NV12 || dst_fourcc == V4L2_PIX_FMT_YUYV)
    + ctx->frame_mem_ctrl |= CODA_FRAME_CHROMA_INTERLEAVE;
    + if (ctx->tiled_map_type == GDI_TILED_FRAME_MB_RASTER_MAP)
    + ctx->frame_mem_ctrl |= (0x3 << 9) |
    + ((ctx->use_vdoa) ? 0 : CODA9_FRAME_TILED2LINEAR);
    }

    - q_data_src = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT);
    - q_data_dst = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_CAPTURE);
    - src_fourcc = q_data_src->fourcc;
    - dst_fourcc = q_data_dst->fourcc;
    -
    coda_write(dev, ctx->parabuf.paddr, CODA_REG_BIT_PARA_BUF_ADDR);

    ret = coda_alloc_framebuffers(ctx, q_data_dst, src_fourcc);
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-09-13 15:22    [W:5.125 / U:0.732 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site