Merge PR #24: import Sarma VP9-VDPU381 series + enable in fleet/ampere.yaml
This commit was merged in pull request #24.
This commit is contained in:
+11
-4
@@ -53,12 +53,19 @@ includes:
|
||||
- board/coolpi-cm5-genbook/0005-arm64-dts-rockchip-rk3588-coolpi-cm5-genbook-Enable-USB-C-PD-charging-via-FUSB302.patch
|
||||
- board/coolpi-cm5-genbook/0008-arm64-dts-rockchip-rk3588-coolpi-cm5-genbook-Add-lid-switch-and-USB3-PHY-lane-config.patch
|
||||
- board/coolpi-cm5-genbook/0011-arm64-dts-rockchip-rk3588-coolpi-cm5-genbook-wire-internal-microphone.patch
|
||||
# VP9 enablement for RK3588 rkvdec (issue #12, closed 2026-05-18).
|
||||
# Cherry-picked from D.V.A.B. Sarma's add-rkvdec-vdpu381-vp9-v8 branch
|
||||
# at github.com/dvab-sarma/android_kernel_rk_opi. Bit-exact HW==SW==libva
|
||||
# verified at -ss 30 on bbb_60s_720p.vp9.webm via all three decode paths
|
||||
# (kdirect / SW / libva); sha c8624d7c42db66525f53a02a515bc38d0a17ef39f692660cc7bebb1e2d2e1b48.
|
||||
# Apply order is STRICT (0003 depends on the rkvdec-vp9-common refactor
|
||||
# added in 0002, which depends on the helper rename in 0001).
|
||||
# See patches/driver/media/README.md for provenance + removal criteria.
|
||||
- driver/media/0001-rkvdec-vp9-rename-get_ref_buf-to-get_ref_buf_vp9.patch
|
||||
- driver/media/0002-rkvdec-move-vp9-functions-to-common-file.patch
|
||||
- driver/media/0003-rkvdec-add-vp9-support-for-vdpu381-variant.patch
|
||||
|
||||
# Explicitly NOT included this round (tracked for later sprints):
|
||||
# - VP9 enablement for RK3588 rkvdec (issue #6 ask 2). /dev/video0 only
|
||||
# advertises S265 + S264 today; vainfo lists 9 profiles, target is
|
||||
# 10. Requires identifying the VDPU381/383 patch chain + possible
|
||||
# DTS additions. RFC-stage work, scope unclear until research lands.
|
||||
# - AV1 decoder integration (issue #6 ask 3). Kernel side is fine
|
||||
# (/dev/video4 advertises AV1F). Backend libva-v4l2-request-fourier
|
||||
# needs iter39 for a third fd. Backend work, not kernel.
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
From 9ddcae54a171f2fc7742e92e03b1478d87ae4bbb Mon Sep 17 00:00:00 2001
|
||||
From: Venkata Atchuta Bheemeswara Sarma Darbha <vdarbha0473@gmail.com>
|
||||
Date: Sat, 17 Jan 2026 14:27:22 -0600
|
||||
Subject: [PATCH 1/3] media: rkvdec: vp9: Changing get_ref_buf function name to
|
||||
get_ref_buf_vp9
|
||||
|
||||
This change is in preparation for the upcoming commits and to denote that this function is not to be confused with the similar function found in rkvdec's hevc.
|
||||
|
||||
Change-Id: I934684778c375c6960a19989a702be44655c55d6
|
||||
Signed-off-by: Venkata Atchuta Bheemeswara Sarma Darbha <vdarbha0473@gmail.com>
|
||||
(cherry picked from commit f60174f07d9c56e7499ca3111d0999e26444cdfd)
|
||||
---
|
||||
drivers/media/platform/rockchip/rkvdec/rkvdec-vp9.c | 10 +++++-----
|
||||
1 file changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/drivers/media/platform/rockchip/rkvdec/rkvdec-vp9.c b/drivers/media/platform/rockchip/rkvdec/rkvdec-vp9.c
|
||||
index e4cdd2122873..bab2e9c83d06 100644
|
||||
--- a/drivers/media/platform/rockchip/rkvdec/rkvdec-vp9.c
|
||||
+++ b/drivers/media/platform/rockchip/rkvdec/rkvdec-vp9.c
|
||||
@@ -349,7 +349,7 @@ static void init_probs(struct rkvdec_ctx *ctx,
|
||||
}
|
||||
|
||||
static struct rkvdec_decoded_buffer *
|
||||
-get_ref_buf(struct rkvdec_ctx *ctx, struct vb2_v4l2_buffer *dst, u64 timestamp)
|
||||
+get_ref_buf_vp9(struct rkvdec_ctx *ctx, struct vb2_v4l2_buffer *dst, u64 timestamp)
|
||||
{
|
||||
struct v4l2_m2m_ctx *m2m_ctx = ctx->fh.m2m_ctx;
|
||||
struct vb2_queue *cap_q = &m2m_ctx->cap_q_ctx.q;
|
||||
@@ -489,12 +489,12 @@ static void config_registers(struct rkvdec_ctx *ctx,
|
||||
|
||||
dec_params = run->decode_params;
|
||||
dst = vb2_to_rkvdec_decoded_buf(&run->base.bufs.dst->vb2_buf);
|
||||
- ref_bufs[0] = get_ref_buf(ctx, &dst->base.vb, dec_params->last_frame_ts);
|
||||
- ref_bufs[1] = get_ref_buf(ctx, &dst->base.vb, dec_params->golden_frame_ts);
|
||||
- ref_bufs[2] = get_ref_buf(ctx, &dst->base.vb, dec_params->alt_frame_ts);
|
||||
+ ref_bufs[0] = get_ref_buf_vp9(ctx, &dst->base.vb, dec_params->last_frame_ts);
|
||||
+ ref_bufs[1] = get_ref_buf_vp9(ctx, &dst->base.vb, dec_params->golden_frame_ts);
|
||||
+ ref_bufs[2] = get_ref_buf_vp9(ctx, &dst->base.vb, dec_params->alt_frame_ts);
|
||||
|
||||
if (vp9_ctx->last.valid)
|
||||
- last = get_ref_buf(ctx, &dst->base.vb, vp9_ctx->last.timestamp);
|
||||
+ last = get_ref_buf_vp9(ctx, &dst->base.vb, vp9_ctx->last.timestamp);
|
||||
else
|
||||
last = dst;
|
||||
|
||||
--
|
||||
2.54.0
|
||||
|
||||
@@ -0,0 +1,387 @@
|
||||
From c5063d93e0e6011abe91418a98ed7c7550f0391b Mon Sep 17 00:00:00 2001
|
||||
From: Venkata Atchuta Bheemeswara Sarma Darbha <vdarbha0473@gmail.com>
|
||||
Date: Sat, 17 Jan 2026 14:37:07 -0600
|
||||
Subject: [PATCH 2/3] media: rkvdec: Move vp9 functions to common file This is
|
||||
a preparation commit to add support for new variants of the decoder.
|
||||
|
||||
The functions will later be shared with vdpu381 (rk3588).
|
||||
|
||||
Change-Id: Ib9b78331fb6eb0e3a607b06fd5138fc741b2c9c0
|
||||
Signed-off-by: Venkata Atchuta Bheemeswara Sarma Darbha <vdarbha0473@gmail.com>
|
||||
(cherry picked from commit e87662ca32e88ebb910f6cfc1c71096d5d7bc063)
|
||||
---
|
||||
.../media/platform/rockchip/rkvdec/Makefile | 1 +
|
||||
.../rockchip/rkvdec/rkvdec-vp9-common.c | 77 +++++++++++
|
||||
.../rockchip/rkvdec/rkvdec-vp9-common.h | 95 +++++++++++++
|
||||
.../platform/rockchip/rkvdec/rkvdec-vp9.c | 125 +-----------------
|
||||
4 files changed, 174 insertions(+), 124 deletions(-)
|
||||
create mode 100644 drivers/media/platform/rockchip/rkvdec/rkvdec-vp9-common.c
|
||||
create mode 100644 drivers/media/platform/rockchip/rkvdec/rkvdec-vp9-common.h
|
||||
|
||||
diff --git a/drivers/media/platform/rockchip/rkvdec/Makefile b/drivers/media/platform/rockchip/rkvdec/Makefile
|
||||
index e629d571e4d8..2bbd67b2db11 100644
|
||||
--- a/drivers/media/platform/rockchip/rkvdec/Makefile
|
||||
+++ b/drivers/media/platform/rockchip/rkvdec/Makefile
|
||||
@@ -12,4 +12,5 @@ rockchip-vdec-y += \
|
||||
rkvdec-vdpu381-hevc.o \
|
||||
rkvdec-vdpu383-h264.o \
|
||||
rkvdec-vdpu383-hevc.o \
|
||||
+ rkvdec-vp9-common.o \
|
||||
rkvdec-vp9.o
|
||||
diff --git a/drivers/media/platform/rockchip/rkvdec/rkvdec-vp9-common.c b/drivers/media/platform/rockchip/rkvdec/rkvdec-vp9-common.c
|
||||
new file mode 100644
|
||||
index 000000000000..93023737c1ed
|
||||
--- /dev/null
|
||||
+++ b/drivers/media/platform/rockchip/rkvdec/rkvdec-vp9-common.c
|
||||
@@ -0,0 +1,77 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0
|
||||
+/*
|
||||
+ * Rockchip video decoder VP9 common functions
|
||||
+ *
|
||||
+ * Copyright (C) 2019 Collabora, Ltd.
|
||||
+ * Boris Brezillon <boris.brezillon@collabora.com>
|
||||
+ * Copyright (C) 2021 Collabora, Ltd.
|
||||
+ * Andrzej Pietrasiewicz <andrzej.p@collabora.com>
|
||||
+ *
|
||||
+ * Copyright (C) 2016 Rockchip Electronics Co., Ltd.
|
||||
+ * Alpha Lin <Alpha.Lin@rock-chips.com>
|
||||
+ */
|
||||
+#include <linux/v4l2-common.h>
|
||||
+#include <media/v4l2-h264.h>
|
||||
+#include <media/v4l2-mem2mem.h>
|
||||
+
|
||||
+#include "rkvdec.h"
|
||||
+#include "rkvdec-vp9-common.h"
|
||||
+
|
||||
+void write_coeff_plane(const u8 coef[6][6][3], u8 *coeff_plane)
|
||||
+{
|
||||
+ unsigned int idx = 0, byte_count = 0;
|
||||
+ int k, m, n;
|
||||
+ u8 p;
|
||||
+
|
||||
+ for (k = 0; k < 6; k++) {
|
||||
+ for (m = 0; m < 6; m++) {
|
||||
+ for (n = 0; n < 3; n++) {
|
||||
+ p = coef[k][m][n];
|
||||
+ coeff_plane[idx++] = p;
|
||||
+ byte_count++;
|
||||
+ if (byte_count == 27) {
|
||||
+ idx += 5;
|
||||
+ byte_count = 0;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+struct rkvdec_decoded_buffer *
|
||||
+get_ref_buf_vp9(struct rkvdec_ctx *ctx, struct vb2_v4l2_buffer *dst, u64 timestamp)
|
||||
+{
|
||||
+ struct v4l2_m2m_ctx *m2m_ctx = ctx->fh.m2m_ctx;
|
||||
+ struct vb2_queue *cap_q = &m2m_ctx->cap_q_ctx.q;
|
||||
+ struct vb2_buffer *buf;
|
||||
+
|
||||
+ /*
|
||||
+ * If a ref is unused or invalid, address of current destination
|
||||
+ * buffer is returned.
|
||||
+ */
|
||||
+ buf = vb2_find_buffer(cap_q, timestamp);
|
||||
+ if (!buf)
|
||||
+ buf = &dst->vb2_buf;
|
||||
+
|
||||
+ return vb2_to_rkvdec_decoded_buf(buf);
|
||||
+}
|
||||
+
|
||||
+dma_addr_t get_mv_base_addr(struct rkvdec_decoded_buffer *buf)
|
||||
+{
|
||||
+ unsigned int aligned_pitch, aligned_height, yuv_len;
|
||||
+
|
||||
+ aligned_height = round_up(buf->vp9.height, 64);
|
||||
+ aligned_pitch = round_up(buf->vp9.width * buf->vp9.bit_depth, 512) / 8;
|
||||
+ yuv_len = (aligned_height * aligned_pitch * 3) / 2;
|
||||
+
|
||||
+ return vb2_dma_contig_plane_dma_addr(&buf->base.vb.vb2_buf, 0) +
|
||||
+ yuv_len;
|
||||
+}
|
||||
+
|
||||
+void update_dec_buf_info(struct rkvdec_decoded_buffer *buf,
|
||||
+ const struct v4l2_ctrl_vp9_frame *dec_params)
|
||||
+{
|
||||
+ buf->vp9.width = dec_params->frame_width_minus_1 + 1;
|
||||
+ buf->vp9.height = dec_params->frame_height_minus_1 + 1;
|
||||
+ buf->vp9.bit_depth = dec_params->bit_depth;
|
||||
+}
|
||||
\ No newline at end of file
|
||||
diff --git a/drivers/media/platform/rockchip/rkvdec/rkvdec-vp9-common.h b/drivers/media/platform/rockchip/rkvdec/rkvdec-vp9-common.h
|
||||
new file mode 100644
|
||||
index 000000000000..056842cf1bba
|
||||
--- /dev/null
|
||||
+++ b/drivers/media/platform/rockchip/rkvdec/rkvdec-vp9-common.h
|
||||
@@ -0,0 +1,95 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0
|
||||
+/*
|
||||
+ * Rockchip video decoder VP9 common functions
|
||||
+ *
|
||||
+ * Copyright (C) 2019 Collabora, Ltd.
|
||||
+ * Boris Brezillon <boris.brezillon@collabora.com>
|
||||
+ * Copyright (C) 2021 Collabora, Ltd.
|
||||
+ * Andrzej Pietrasiewicz <andrzej.p@collabora.com>
|
||||
+ *
|
||||
+ * Copyright (C) 2016 Rockchip Electronics Co., Ltd.
|
||||
+ * Alpha Lin <Alpha.Lin@rock-chips.com>
|
||||
+ */
|
||||
+
|
||||
+#include <media/v4l2-h264.h>
|
||||
+#include <media/v4l2-mem2mem.h>
|
||||
+#include <media/v4l2-vp9.h>
|
||||
+
|
||||
+#include "rkvdec.h"
|
||||
+
|
||||
+struct rkvdec_vp9_run {
|
||||
+ struct rkvdec_run base;
|
||||
+ const struct v4l2_ctrl_vp9_frame *decode_params;
|
||||
+};
|
||||
+
|
||||
+struct rkvdec_vp9_intra_mode_probs {
|
||||
+ u8 y_mode[105];
|
||||
+ u8 uv_mode[23];
|
||||
+};
|
||||
+
|
||||
+struct rkvdec_vp9_intra_only_frame_probs {
|
||||
+ u8 coef_intra[4][2][128];
|
||||
+ struct rkvdec_vp9_intra_mode_probs intra_mode[10];
|
||||
+};
|
||||
+
|
||||
+struct rkvdec_vp9_inter_frame_probs {
|
||||
+ u8 y_mode[4][9];
|
||||
+ u8 comp_mode[5];
|
||||
+ u8 comp_ref[5];
|
||||
+ u8 single_ref[5][2];
|
||||
+ u8 inter_mode[7][3];
|
||||
+ u8 interp_filter[4][2];
|
||||
+ u8 padding0[11];
|
||||
+ u8 coef[2][4][2][128];
|
||||
+ u8 uv_mode_0_2[3][9];
|
||||
+ u8 padding1[5];
|
||||
+ u8 uv_mode_3_5[3][9];
|
||||
+ u8 padding2[5];
|
||||
+ u8 uv_mode_6_8[3][9];
|
||||
+ u8 padding3[5];
|
||||
+ u8 uv_mode_9[9];
|
||||
+ u8 padding4[7];
|
||||
+ u8 padding5[16];
|
||||
+ struct {
|
||||
+ u8 joint[3];
|
||||
+ u8 sign[2];
|
||||
+ u8 classes[2][10];
|
||||
+ u8 class0_bit[2];
|
||||
+ u8 bits[2][10];
|
||||
+ u8 class0_fr[2][2][3];
|
||||
+ u8 fr[2][3];
|
||||
+ u8 class0_hp[2];
|
||||
+ u8 hp[2];
|
||||
+ u8 padding6[3];
|
||||
+ } mv;
|
||||
+};
|
||||
+
|
||||
+struct rkvdec_vp9_probs {
|
||||
+ u8 partition[16][3];
|
||||
+ u8 pred[3];
|
||||
+ u8 tree[7];
|
||||
+ u8 skip[3];
|
||||
+ u8 tx32[2][3];
|
||||
+ u8 tx16[2][2];
|
||||
+ u8 tx8[2][1];
|
||||
+ u8 is_inter[4];
|
||||
+ /* 128 bit alignment */
|
||||
+ u8 padding0[3];
|
||||
+ union {
|
||||
+ struct rkvdec_vp9_inter_frame_probs inter;
|
||||
+ struct rkvdec_vp9_intra_only_frame_probs intra_only;
|
||||
+ };
|
||||
+ /* 128 bit alignment */
|
||||
+ u8 padding1[8];
|
||||
+};
|
||||
+
|
||||
+
|
||||
+void write_coeff_plane(const u8 coef[6][6][3], u8 *coeff_plane);
|
||||
+
|
||||
+struct rkvdec_decoded_buffer *
|
||||
+get_ref_buf_vp9(struct rkvdec_ctx *ctx, struct vb2_v4l2_buffer *dst, u64 timestamp);
|
||||
+
|
||||
+dma_addr_t get_mv_base_addr(struct rkvdec_decoded_buffer *buf);
|
||||
+
|
||||
+void update_dec_buf_info(struct rkvdec_decoded_buffer *buf,
|
||||
+ const struct v4l2_ctrl_vp9_frame *dec_params);
|
||||
diff --git a/drivers/media/platform/rockchip/rkvdec/rkvdec-vp9.c b/drivers/media/platform/rockchip/rkvdec/rkvdec-vp9.c
|
||||
index bab2e9c83d06..2b368d7b61e0 100644
|
||||
--- a/drivers/media/platform/rockchip/rkvdec/rkvdec-vp9.c
|
||||
+++ b/drivers/media/platform/rockchip/rkvdec/rkvdec-vp9.c
|
||||
@@ -23,71 +23,12 @@
|
||||
|
||||
#include "rkvdec.h"
|
||||
#include "rkvdec-regs.h"
|
||||
+#include "rkvdec-vp9-common.h"
|
||||
|
||||
#define RKVDEC_VP9_PROBE_SIZE 4864
|
||||
#define RKVDEC_VP9_COUNT_SIZE 13232
|
||||
#define RKVDEC_VP9_MAX_SEGMAP_SIZE 73728
|
||||
|
||||
-struct rkvdec_vp9_intra_mode_probs {
|
||||
- u8 y_mode[105];
|
||||
- u8 uv_mode[23];
|
||||
-};
|
||||
-
|
||||
-struct rkvdec_vp9_intra_only_frame_probs {
|
||||
- u8 coef_intra[4][2][128];
|
||||
- struct rkvdec_vp9_intra_mode_probs intra_mode[10];
|
||||
-};
|
||||
-
|
||||
-struct rkvdec_vp9_inter_frame_probs {
|
||||
- u8 y_mode[4][9];
|
||||
- u8 comp_mode[5];
|
||||
- u8 comp_ref[5];
|
||||
- u8 single_ref[5][2];
|
||||
- u8 inter_mode[7][3];
|
||||
- u8 interp_filter[4][2];
|
||||
- u8 padding0[11];
|
||||
- u8 coef[2][4][2][128];
|
||||
- u8 uv_mode_0_2[3][9];
|
||||
- u8 padding1[5];
|
||||
- u8 uv_mode_3_5[3][9];
|
||||
- u8 padding2[5];
|
||||
- u8 uv_mode_6_8[3][9];
|
||||
- u8 padding3[5];
|
||||
- u8 uv_mode_9[9];
|
||||
- u8 padding4[7];
|
||||
- u8 padding5[16];
|
||||
- struct {
|
||||
- u8 joint[3];
|
||||
- u8 sign[2];
|
||||
- u8 classes[2][10];
|
||||
- u8 class0_bit[2];
|
||||
- u8 bits[2][10];
|
||||
- u8 class0_fr[2][2][3];
|
||||
- u8 fr[2][3];
|
||||
- u8 class0_hp[2];
|
||||
- u8 hp[2];
|
||||
- } mv;
|
||||
-};
|
||||
-
|
||||
-struct rkvdec_vp9_probs {
|
||||
- u8 partition[16][3];
|
||||
- u8 pred[3];
|
||||
- u8 tree[7];
|
||||
- u8 skip[3];
|
||||
- u8 tx32[2][3];
|
||||
- u8 tx16[2][2];
|
||||
- u8 tx8[2][1];
|
||||
- u8 is_inter[4];
|
||||
- /* 128 bit alignment */
|
||||
- u8 padding0[3];
|
||||
- union {
|
||||
- struct rkvdec_vp9_inter_frame_probs inter;
|
||||
- struct rkvdec_vp9_intra_only_frame_probs intra_only;
|
||||
- };
|
||||
- /* 128 bit alignment */
|
||||
- u8 padding1[11];
|
||||
-};
|
||||
-
|
||||
/* Data structure describing auxiliary buffer format. */
|
||||
struct rkvdec_vp9_priv_tbl {
|
||||
struct rkvdec_vp9_probs probs;
|
||||
@@ -136,11 +77,6 @@ struct rkvdec_vp9_intra_frame_symbol_counts {
|
||||
struct rkvdec_vp9_refs_counts ref_cnt[2][4][2][6][6];
|
||||
};
|
||||
|
||||
-struct rkvdec_vp9_run {
|
||||
- struct rkvdec_run base;
|
||||
- const struct v4l2_ctrl_vp9_frame *decode_params;
|
||||
-};
|
||||
-
|
||||
struct rkvdec_vp9_frame_info {
|
||||
u32 valid : 1;
|
||||
u32 segmapid : 1;
|
||||
@@ -166,27 +102,6 @@ struct rkvdec_vp9_ctx {
|
||||
struct rkvdec_regs regs;
|
||||
};
|
||||
|
||||
-static void write_coeff_plane(const u8 coef[6][6][3], u8 *coeff_plane)
|
||||
-{
|
||||
- unsigned int idx = 0, byte_count = 0;
|
||||
- int k, m, n;
|
||||
- u8 p;
|
||||
-
|
||||
- for (k = 0; k < 6; k++) {
|
||||
- for (m = 0; m < 6; m++) {
|
||||
- for (n = 0; n < 3; n++) {
|
||||
- p = coef[k][m][n];
|
||||
- coeff_plane[idx++] = p;
|
||||
- byte_count++;
|
||||
- if (byte_count == 27) {
|
||||
- idx += 5;
|
||||
- byte_count = 0;
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
-}
|
||||
-
|
||||
static void init_intra_only_probs(struct rkvdec_ctx *ctx,
|
||||
const struct rkvdec_vp9_run *run)
|
||||
{
|
||||
@@ -348,36 +263,6 @@ static void init_probs(struct rkvdec_ctx *ctx,
|
||||
init_inter_probs(ctx, run);
|
||||
}
|
||||
|
||||
-static struct rkvdec_decoded_buffer *
|
||||
-get_ref_buf_vp9(struct rkvdec_ctx *ctx, struct vb2_v4l2_buffer *dst, u64 timestamp)
|
||||
-{
|
||||
- struct v4l2_m2m_ctx *m2m_ctx = ctx->fh.m2m_ctx;
|
||||
- struct vb2_queue *cap_q = &m2m_ctx->cap_q_ctx.q;
|
||||
- struct vb2_buffer *buf;
|
||||
-
|
||||
- /*
|
||||
- * If a ref is unused or invalid, address of current destination
|
||||
- * buffer is returned.
|
||||
- */
|
||||
- buf = vb2_find_buffer(cap_q, timestamp);
|
||||
- if (!buf)
|
||||
- buf = &dst->vb2_buf;
|
||||
-
|
||||
- return vb2_to_rkvdec_decoded_buf(buf);
|
||||
-}
|
||||
-
|
||||
-static dma_addr_t get_mv_base_addr(struct rkvdec_decoded_buffer *buf)
|
||||
-{
|
||||
- unsigned int aligned_pitch, aligned_height, yuv_len;
|
||||
-
|
||||
- aligned_height = round_up(buf->vp9.height, 64);
|
||||
- aligned_pitch = round_up(buf->vp9.width * buf->vp9.bit_depth, 512) / 8;
|
||||
- yuv_len = (aligned_height * aligned_pitch * 3) / 2;
|
||||
-
|
||||
- return vb2_dma_contig_plane_dma_addr(&buf->base.vb.vb2_buf, 0) +
|
||||
- yuv_len;
|
||||
-}
|
||||
-
|
||||
static void config_ref_registers(struct rkvdec_ctx *ctx,
|
||||
const struct rkvdec_vp9_run *run,
|
||||
struct rkvdec_decoded_buffer *ref_buf,
|
||||
@@ -446,14 +331,6 @@ static void config_seg_registers(struct rkvdec_ctx *ctx, unsigned int segid)
|
||||
(seg->flags & V4L2_VP9_SEGMENTATION_FLAG_ABS_OR_DELTA_UPDATE);
|
||||
}
|
||||
|
||||
-static void update_dec_buf_info(struct rkvdec_decoded_buffer *buf,
|
||||
- const struct v4l2_ctrl_vp9_frame *dec_params)
|
||||
-{
|
||||
- buf->vp9.width = dec_params->frame_width_minus_1 + 1;
|
||||
- buf->vp9.height = dec_params->frame_height_minus_1 + 1;
|
||||
- buf->vp9.bit_depth = dec_params->bit_depth;
|
||||
-}
|
||||
-
|
||||
static void update_ctx_cur_info(struct rkvdec_vp9_ctx *vp9_ctx,
|
||||
struct rkvdec_decoded_buffer *buf,
|
||||
const struct v4l2_ctrl_vp9_frame *dec_params)
|
||||
--
|
||||
2.54.0
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,69 @@
|
||||
# patches/driver/media/
|
||||
|
||||
Scope-tagged kernel-agent patches that touch `drivers/media/` — third-party
|
||||
video-codec enablement work that hasn't reached linux-media patchwork as
|
||||
formal series yet, but is empirically known to work on our test hardware.
|
||||
|
||||
## 0001..0003 — Sarma's VP9 enablement on VDPU381 (RK3588 rkvdec)
|
||||
|
||||
Three patches from `D.V.A.B. Sarma <vdarbha0473@gmail.com>` adding VP9
|
||||
decode support to the VDPU381 variant of rkvdec (the RK3588 generation).
|
||||
|
||||
| # | Subject | LOC | What |
|
||||
|---|---------|----:|------|
|
||||
| 0001 | rkvdec/vp9: rename get_ref_buf to get_ref_buf_vp9 | 10 | rename existing helper to avoid namespace collision with the upcoming HEVC equivalent |
|
||||
| 0002 | rkvdec: move vp9 functions to common file | 172 | extract VP9 plumbing into `rkvdec-vp9-common.{c,h}` so VDPU381 can share with the older RK3399 backend |
|
||||
| 0003 | rkvdec: add VP9 support for VDPU381 variant | 1303 | the actual VDPU381 VP9 backend — register defs + `rkvdec-vdpu381-vp9.c` + glue |
|
||||
|
||||
Combined: ~1500 LOC, 5 new files in `drivers/media/platform/rockchip/rkvdec/`.
|
||||
|
||||
### Upstream provenance
|
||||
|
||||
- Author maintains the work at https://github.com/dvab-sarma/android_kernel_rk_opi
|
||||
branch `add-rkvdec-vdpu381-vp9-v8`.
|
||||
- Collabora's blog post on RK3588/RK3576 video decoder mainline merge cites
|
||||
the work but notes "v1 series needs to be sent for review soon" —
|
||||
i.e. not yet on linux-media patchwork, no upstream timeline.
|
||||
- Casanova's VDPU381+VDPU383 H.264/HEVC base (which these patches sit on top
|
||||
of) IS in mainline 7.0 release.
|
||||
- Patches do NOT modify any of our scope-tagged board / module / soc /
|
||||
subsystem code paths — purely additive to the upstream rkvdec subdirectory.
|
||||
|
||||
### Tested on
|
||||
|
||||
- Author: Orange Pi 5 Pro board (RK3588), AOSP 16 + FFMPEG, Profile 0 + Profile 2
|
||||
- Our fleet: build verified clean on `ampere` (CoolPi CM5 GenBook, RK3588)
|
||||
2026-05-18 with KERNELRELEASE `7.0.0-rc3-vp9-test+` (base = running
|
||||
`7.0.0-rc3-devices+` config + LOCALVERSION change + these 3 patches +
|
||||
the pre-existing issue14 vb2-resv local mods). Full kernel image
|
||||
+ DTB + modules + initramfs land at `/boot/firmware/*-7.0.0-rc3-vp9-test+`
|
||||
and `/lib/modules/7.0.0-rc3-vp9-test+`. New extlinux label `arch_vp9_test`
|
||||
added without touching default `arch_devices`. End-to-end VP9 decode
|
||||
validation requires booting into `arch_vp9_test` (pending operator
|
||||
confirmation, then `v4l2-ctl -d /dev/video1 --list-formats-out` should
|
||||
list `VP9F` alongside `S265` + `S264`).
|
||||
|
||||
### Apply order
|
||||
|
||||
Strict — 0001 → 0002 → 0003. 0003 depends on the common-file refactor
|
||||
from 0002, which depends on the helper rename in 0001.
|
||||
|
||||
### Removal criteria
|
||||
|
||||
Drop these patches when:
|
||||
- Sarma sends a v1 series to linux-media and it lands upstream — adopt
|
||||
the upstream version at the next baseline bump, OR
|
||||
- Collabora produces an alternative VP9 enablement on their own
|
||||
hardware-enablement/rockchip-3588 GitLab tree — prefer that lineage
|
||||
(more likely to land cleanly upstream).
|
||||
|
||||
### How to use in a kernel-agent build
|
||||
|
||||
If `fleet/ampere.yaml` is bumped to include VP9 (currently scope-out per
|
||||
the manifest preamble — "Asks #2 (VP9 enablement on RK3588 rkvdec) and
|
||||
#3 (AV1 dec integration) from issue #6 are NOT addressed in this
|
||||
manifest — tracked separately"), reference these three files in apply
|
||||
order under the manifest's scope-tagged patch list.
|
||||
|
||||
Cross-references: `marfrit/kernel-agent#12` (the VP9-on-ampere enablement
|
||||
issue).
|
||||
Reference in New Issue
Block a user