On Thu May 21 00:44:13 2026 +0200, Sven Püschel wrote:
> Use the stride instead of the width for the offset calculation. This
> ensures that the bytesperline value doesn't need to match the width
> value of the image.
> 
> Furthermore this patch removes the dependency on the uv_factor property
> and instead reuses the v4l2_format_info to determine the correct
> division factor.
> 
> Reviewed-by: Nicolas Dufresne <[email protected]>
> Signed-off-by: Sven Püschel <[email protected]>
> Signed-off-by: Nicolas Dufresne <[email protected]>
> Signed-off-by: Hans Verkuil <[email protected]>

Patch committed.

Thanks,
Hans Verkuil

 drivers/media/platform/rockchip/rga/rga-buf.c | 14 +++++++++-----
 drivers/media/platform/rockchip/rga/rga.c     | 16 ----------------
 drivers/media/platform/rockchip/rga/rga.h     |  1 -
 3 files changed, 9 insertions(+), 22 deletions(-)

---

diff --git a/drivers/media/platform/rockchip/rga/rga-buf.c 
b/drivers/media/platform/rockchip/rga/rga-buf.c
index bb575873f2b2..65fc0d5b4aa1 100644
--- a/drivers/media/platform/rockchip/rga/rga-buf.c
+++ b/drivers/media/platform/rockchip/rga/rga-buf.c
@@ -14,7 +14,6 @@
 #include <media/videobuf2-dma-sg.h>
 #include <media/videobuf2-v4l2.h>
 
-#include "rga-hw.h"
 #include "rga.h"
 
 static ssize_t fill_descriptors(struct rga_dma_desc *desc, size_t max_desc,
@@ -95,14 +94,19 @@ static int rga_buf_init(struct vb2_buffer *vb)
        return 0;
 }
 
-static int get_plane_offset(struct rga_frame *f, int plane)
+static int get_plane_offset(struct rga_frame *f,
+                           const struct v4l2_format_info *info,
+                           int plane)
 {
+       u32 stride = f->pix.plane_fmt[0].bytesperline;
+
        if (plane == 0)
                return 0;
        if (plane == 1)
-               return f->width * f->height;
+               return stride * f->height;
        if (plane == 2)
-               return f->width * f->height + (f->width * f->height / 
f->fmt->uv_factor);
+               return stride * f->height +
+                      (stride * f->height / info->hdiv / info->vdiv);
 
        return -EINVAL;
 }
@@ -148,7 +152,7 @@ static int rga_buf_prepare(struct vb2_buffer *vb)
        /* Fill the remaining planes */
        info = v4l2_format_info(f->fmt->fourcc);
        for (i = info->mem_planes; i < info->comp_planes; i++)
-               offsets[i] = get_plane_offset(f, i);
+               offsets[i] = get_plane_offset(f, info, i);
 
        rbuf->offset.y_off = offsets[0];
        rbuf->offset.u_off = offsets[1];
diff --git a/drivers/media/platform/rockchip/rga/rga.c 
b/drivers/media/platform/rockchip/rga/rga.c
index 4e710a050cb7..c07207edffdb 100644
--- a/drivers/media/platform/rockchip/rga/rga.c
+++ b/drivers/media/platform/rockchip/rga/rga.c
@@ -190,7 +190,6 @@ static struct rga_fmt formats[] = {
                .color_swap = RGA_COLOR_ALPHA_SWAP,
                .hw_format = RGA_COLOR_FMT_ABGR8888,
                .depth = 32,
-               .uv_factor = 1,
                .y_div = 1,
                .x_div = 1,
        },
@@ -199,7 +198,6 @@ static struct rga_fmt formats[] = {
                .color_swap = RGA_COLOR_RB_SWAP,
                .hw_format = RGA_COLOR_FMT_ABGR8888,
                .depth = 32,
-               .uv_factor = 1,
                .y_div = 1,
                .x_div = 1,
        },
@@ -208,7 +206,6 @@ static struct rga_fmt formats[] = {
                .color_swap = RGA_COLOR_RB_SWAP,
                .hw_format = RGA_COLOR_FMT_XBGR8888,
                .depth = 32,
-               .uv_factor = 1,
                .y_div = 1,
                .x_div = 1,
        },
@@ -217,7 +214,6 @@ static struct rga_fmt formats[] = {
                .color_swap = RGA_COLOR_NONE_SWAP,
                .hw_format = RGA_COLOR_FMT_RGB888,
                .depth = 24,
-               .uv_factor = 1,
                .y_div = 1,
                .x_div = 1,
        },
@@ -226,7 +222,6 @@ static struct rga_fmt formats[] = {
                .color_swap = RGA_COLOR_RB_SWAP,
                .hw_format = RGA_COLOR_FMT_RGB888,
                .depth = 24,
-               .uv_factor = 1,
                .y_div = 1,
                .x_div = 1,
        },
@@ -235,7 +230,6 @@ static struct rga_fmt formats[] = {
                .color_swap = RGA_COLOR_RB_SWAP,
                .hw_format = RGA_COLOR_FMT_ABGR4444,
                .depth = 16,
-               .uv_factor = 1,
                .y_div = 1,
                .x_div = 1,
        },
@@ -244,7 +238,6 @@ static struct rga_fmt formats[] = {
                .color_swap = RGA_COLOR_RB_SWAP,
                .hw_format = RGA_COLOR_FMT_ABGR1555,
                .depth = 16,
-               .uv_factor = 1,
                .y_div = 1,
                .x_div = 1,
        },
@@ -253,7 +246,6 @@ static struct rga_fmt formats[] = {
                .color_swap = RGA_COLOR_RB_SWAP,
                .hw_format = RGA_COLOR_FMT_BGR565,
                .depth = 16,
-               .uv_factor = 1,
                .y_div = 1,
                .x_div = 1,
        },
@@ -262,7 +254,6 @@ static struct rga_fmt formats[] = {
                .color_swap = RGA_COLOR_UV_SWAP,
                .hw_format = RGA_COLOR_FMT_YUV420SP,
                .depth = 12,
-               .uv_factor = 4,
                .y_div = 2,
                .x_div = 1,
        },
@@ -271,7 +262,6 @@ static struct rga_fmt formats[] = {
                .color_swap = RGA_COLOR_UV_SWAP,
                .hw_format = RGA_COLOR_FMT_YUV422SP,
                .depth = 16,
-               .uv_factor = 2,
                .y_div = 1,
                .x_div = 1,
        },
@@ -280,7 +270,6 @@ static struct rga_fmt formats[] = {
                .color_swap = RGA_COLOR_NONE_SWAP,
                .hw_format = RGA_COLOR_FMT_YUV420SP,
                .depth = 12,
-               .uv_factor = 4,
                .y_div = 2,
                .x_div = 1,
        },
@@ -289,7 +278,6 @@ static struct rga_fmt formats[] = {
                .color_swap = RGA_COLOR_NONE_SWAP,
                .hw_format = RGA_COLOR_FMT_YUV420SP,
                .depth = 12,
-               .uv_factor = 4,
                .y_div = 2,
                .x_div = 1,
        },
@@ -298,7 +286,6 @@ static struct rga_fmt formats[] = {
                .color_swap = RGA_COLOR_NONE_SWAP,
                .hw_format = RGA_COLOR_FMT_YUV422SP,
                .depth = 16,
-               .uv_factor = 2,
                .y_div = 1,
                .x_div = 1,
        },
@@ -307,7 +294,6 @@ static struct rga_fmt formats[] = {
                .color_swap = RGA_COLOR_NONE_SWAP,
                .hw_format = RGA_COLOR_FMT_YUV420P,
                .depth = 12,
-               .uv_factor = 4,
                .y_div = 2,
                .x_div = 2,
        },
@@ -316,7 +302,6 @@ static struct rga_fmt formats[] = {
                .color_swap = RGA_COLOR_NONE_SWAP,
                .hw_format = RGA_COLOR_FMT_YUV422P,
                .depth = 16,
-               .uv_factor = 2,
                .y_div = 1,
                .x_div = 2,
        },
@@ -325,7 +310,6 @@ static struct rga_fmt formats[] = {
                .color_swap = RGA_COLOR_UV_SWAP,
                .hw_format = RGA_COLOR_FMT_YUV420P,
                .depth = 12,
-               .uv_factor = 4,
                .y_div = 2,
                .x_div = 2,
        },
diff --git a/drivers/media/platform/rockchip/rga/rga.h 
b/drivers/media/platform/rockchip/rga/rga.h
index 2db10acecb40..477cf5b62bbb 100644
--- a/drivers/media/platform/rockchip/rga/rga.h
+++ b/drivers/media/platform/rockchip/rga/rga.h
@@ -17,7 +17,6 @@
 struct rga_fmt {
        u32 fourcc;
        int depth;
-       u8 uv_factor;
        u8 y_div;
        u8 x_div;
        u8 color_swap;
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to