* [PATCH v1 1/4] media: v4l2-controls: Add control for background detection
2026-03-24 5:03 [PATCH v1 0/4] Add encoder features Jackson.lee
@ 2026-03-24 5:03 ` Jackson.lee
2026-03-24 5:03 ` [PATCH v1 2/4] media: chips-media: wave5: Add support " Jackson.lee
` (2 subsequent siblings)
3 siblings, 0 replies; 7+ messages in thread
From: Jackson.lee @ 2026-03-24 5:03 UTC (permalink / raw)
To: mchehab, nicolas, sebastian.fricke
Cc: linux-media, linux-kernel, hverkuil, nas.chung, lafley.kim,
b-brnich, jackson.lee
From: Jackson Lee <jackson.lee@chipsnmedia.com>
Add a generic V4L2 boolean control V4L2_CID_MPEG_VIDEO_BACKGROUND_DETECTION
that allows encoders to detect background regions in a frame and use fewer
bits or skip mode to encode them, potentially reducing bitrate for streams
with stationary scenes.
Signed-off-by: Jackson Lee <jackson.lee@chipsnmedia.com>
Signed-off-by: Nas Chung <nas.chung@chipsnmedia.com>
---
Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst | 6 ++++++
drivers/media/v4l2-core/v4l2-ctrls-defs.c | 2 ++
include/uapi/linux/v4l2-controls.h | 2 ++
3 files changed, 10 insertions(+)
diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
index c8890cb5e00a..ab865a1a6ba9 100644
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
@@ -737,6 +737,12 @@ enum v4l2_mpeg_video_frame_skip_mode -
Enable writing sample aspect ratio in the Video Usability
Information. Applicable to the H264 encoder.
+``V4L2_CID_MPEG_VIDEO_BACKGROUND_DETECTION (boolean)``
+ If enabled, the encoder detect a background region in frame and
+ use low bits or skip mode to encode the background region.
+ If a lot of scenes are stationary or background, It may help to
+ reduce the video bitrate. Applicable to the encoder.
+
.. _v4l2-mpeg-video-h264-vui-sar-idc:
``V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC``
diff --git a/drivers/media/v4l2-core/v4l2-ctrls-defs.c b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
index 551426c4cd01..e062f2088490 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls-defs.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
@@ -889,6 +889,7 @@ const char *v4l2_ctrl_get_name(u32 id)
case V4L2_CID_MPEG_VIDEO_DEC_DISPLAY_DELAY: return "Display Delay";
case V4L2_CID_MPEG_VIDEO_DEC_DISPLAY_DELAY_ENABLE: return "Display Delay Enable";
case V4L2_CID_MPEG_VIDEO_AU_DELIMITER: return "Generate Access Unit Delimiters";
+ case V4L2_CID_MPEG_VIDEO_BACKGROUND_DETECTION: return "Background Detection";
case V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP: return "H263 I-Frame QP Value";
case V4L2_CID_MPEG_VIDEO_H263_P_FRAME_QP: return "H263 P-Frame QP Value";
case V4L2_CID_MPEG_VIDEO_H263_B_FRAME_QP: return "H263 B-Frame QP Value";
@@ -1296,6 +1297,7 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
case V4L2_CID_MPEG_VIDEO_MPEG4_QPEL:
case V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER:
case V4L2_CID_MPEG_VIDEO_AU_DELIMITER:
+ case V4L2_CID_MPEG_VIDEO_BACKGROUND_DETECTION:
case V4L2_CID_WIDE_DYNAMIC_RANGE:
case V4L2_CID_IMAGE_STABILIZATION:
case V4L2_CID_RDS_RECEPTION:
diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
index 68dd0c4e47b2..affec0ab4781 100644
--- a/include/uapi/linux/v4l2-controls.h
+++ b/include/uapi/linux/v4l2-controls.h
@@ -464,6 +464,8 @@ enum v4l2_mpeg_video_intra_refresh_period_type {
V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE_CYCLIC = 1,
};
+#define V4L2_CID_MPEG_VIDEO_BACKGROUND_DETECTION (V4L2_CID_CODEC_BASE + 238)
+
/* CIDs for the MPEG-2 Part 2 (H.262) codec */
#define V4L2_CID_MPEG_VIDEO_MPEG2_LEVEL (V4L2_CID_CODEC_BASE+270)
enum v4l2_mpeg_video_mpeg2_level {
--
2.43.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH v1 2/4] media: chips-media: wave5: Add support for background detection
2026-03-24 5:03 [PATCH v1 0/4] Add encoder features Jackson.lee
2026-03-24 5:03 ` [PATCH v1 1/4] media: v4l2-controls: Add control for background detection Jackson.lee
@ 2026-03-24 5:03 ` Jackson.lee
2026-03-24 5:03 ` [PATCH v1 3/4] media: chips-media: wave5: Support CBP profile Jackson.lee
2026-03-24 5:04 ` [PATCH v1 4/4] media: chips-media: wave5: Add Support for Packed YUV422 Formats Jackson.lee
3 siblings, 0 replies; 7+ messages in thread
From: Jackson.lee @ 2026-03-24 5:03 UTC (permalink / raw)
To: mchehab, nicolas, sebastian.fricke
Cc: linux-media, linux-kernel, hverkuil, nas.chung, lafley.kim,
b-brnich, jackson.lee
From: Jackson Lee <jackson.lee@chipsnmedia.com>
Implement V4L2_CID_MPEG_VIDEO_BACKGROUND_DETECTION in the Wave5 encoder
driver. When enabled, the hardware detects background regions in a frame
and uses fewer bits or skip mode to encode them, reducing bitrate for
streams with stationary scenes.
Signed-off-by: Jackson Lee <jackson.lee@chipsnmedia.com>
Signed-off-by: Nas Chung <nas.chung@chipsnmedia.com>
---
drivers/media/platform/chips-media/wave5/wave5-hw.c | 4 +++-
drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c | 7 +++++++
drivers/media/platform/chips-media/wave5/wave5-vpuapi.h | 1 +
3 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/drivers/media/platform/chips-media/wave5/wave5-hw.c b/drivers/media/platform/chips-media/wave5/wave5-hw.c
index 687ce6ccf3ae..c516d125f553 100644
--- a/drivers/media/platform/chips-media/wave5/wave5-hw.c
+++ b/drivers/media/platform/chips-media/wave5/wave5-hw.c
@@ -49,6 +49,7 @@
#define FASTIO_ADDRESS_MASK GENMASK(15, 0)
#define SEQ_PARAM_PROFILE_MASK GENMASK(30, 24)
+#define SEQ_BG_PARAM_REG_DATA 0x3800410
static void _wave5_print_reg_err(struct vpu_device *vpu_dev, u32 reg_fail_reason,
const char *func);
@@ -1838,7 +1839,8 @@ int wave5_vpu_enc_init_seq(struct vpu_instance *inst)
vpu_write_reg(inst->dev, W5_CMD_ENC_SEQ_RC_BIT_RATIO_LAYER_4_7, 0);
vpu_write_reg(inst->dev, W5_CMD_ENC_SEQ_ROT_PARAM, rot_mir_mode);
- vpu_write_reg(inst->dev, W5_CMD_ENC_SEQ_BG_PARAM, 0);
+ vpu_write_reg(inst->dev, W5_CMD_ENC_SEQ_BG_PARAM,
+ SEQ_BG_PARAM_REG_DATA | p_param->bg_detection);
vpu_write_reg(inst->dev, W5_CMD_ENC_SEQ_CUSTOM_LAMBDA_ADDR, 0);
vpu_write_reg(inst->dev, W5_CMD_ENC_SEQ_CONF_WIN_TOP_BOT,
p_param->conf_win_bot << 16 | p_param->conf_win_top);
diff --git a/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c b/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c
index 7613fcdbafed..6fe01217233f 100644
--- a/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c
+++ b/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c
@@ -780,6 +780,9 @@ static int wave5_vpu_enc_s_ctrl(struct v4l2_ctrl *ctrl)
case V4L2_CID_MPEG_VIDEO_BITRATE:
inst->bit_rate = ctrl->val;
break;
+ case V4L2_CID_MPEG_VIDEO_BACKGROUND_DETECTION:
+ inst->enc_param.bg_detection = ctrl->val;
+ break;
case V4L2_CID_MPEG_VIDEO_GOP_SIZE:
inst->enc_param.avc_idr_period = ctrl->val;
break;
@@ -1205,6 +1208,7 @@ static int wave5_set_enc_openparam(struct enc_open_param *open_param,
open_param->wave_param.beta_offset_div2 = input.beta_offset_div2;
open_param->wave_param.decoding_refresh_type = input.decoding_refresh_type;
open_param->wave_param.intra_period = input.intra_period;
+ open_param->wave_param.bg_detection = input.bg_detection;
if (inst->std == W_HEVC_ENC) {
if (input.intra_period == 0) {
open_param->wave_param.decoding_refresh_type = DEC_REFRESH_TYPE_IDR;
@@ -1700,6 +1704,9 @@ static int wave5_vpu_open_enc(struct file *filp)
v4l2_ctrl_new_std(v4l2_ctrl_hdl, &wave5_vpu_enc_ctrl_ops,
V4L2_CID_MPEG_VIDEO_AU_DELIMITER,
0, 1, 1, 1);
+ v4l2_ctrl_new_std(v4l2_ctrl_hdl, &wave5_vpu_enc_ctrl_ops,
+ V4L2_CID_MPEG_VIDEO_BACKGROUND_DETECTION,
+ 0, 1, 1, 0);
v4l2_ctrl_new_std(v4l2_ctrl_hdl, &wave5_vpu_enc_ctrl_ops,
V4L2_CID_HFLIP,
0, 1, 1, 0);
diff --git a/drivers/media/platform/chips-media/wave5/wave5-vpuapi.h b/drivers/media/platform/chips-media/wave5/wave5-vpuapi.h
index c64135769869..dc31689e0d27 100644
--- a/drivers/media/platform/chips-media/wave5/wave5-vpuapi.h
+++ b/drivers/media/platform/chips-media/wave5/wave5-vpuapi.h
@@ -570,6 +570,7 @@ struct enc_wave_param {
u32 transform8x8_enable: 1; /* enable 8x8 intra prediction and 8x8 transform */
u32 mb_level_rc_enable: 1; /* enable MB-level rate control */
u32 forced_idr_header_enable: 1; /* enable header encoding before IDR frame */
+ u32 bg_detection: 1; /* enable background detection */
};
struct enc_open_param {
--
2.43.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH v1 3/4] media: chips-media: wave5: Support CBP profile
2026-03-24 5:03 [PATCH v1 0/4] Add encoder features Jackson.lee
2026-03-24 5:03 ` [PATCH v1 1/4] media: v4l2-controls: Add control for background detection Jackson.lee
2026-03-24 5:03 ` [PATCH v1 2/4] media: chips-media: wave5: Add support " Jackson.lee
@ 2026-03-24 5:03 ` Jackson.lee
2026-03-24 20:18 ` Brandon Brnich
2026-03-24 5:04 ` [PATCH v1 4/4] media: chips-media: wave5: Add Support for Packed YUV422 Formats Jackson.lee
3 siblings, 1 reply; 7+ messages in thread
From: Jackson.lee @ 2026-03-24 5:03 UTC (permalink / raw)
To: mchehab, nicolas, sebastian.fricke
Cc: linux-media, linux-kernel, hverkuil, nas.chung, lafley.kim,
b-brnich, jackson.lee
From: Jackson Lee <jackson.lee@chipsnmedia.com>
Constrained Baseline Profile (CBP) and Baseline Profile (BP) have been
treated as the same.
Introduce the ability to differentiate between the two.
Fixes: 9707a6254a8a ("media: chips-media: wave5: Add the v4l2 layer")
Signed-off-by: Jackson Lee <jackson.lee@chipsnmedia.com>
Signed-off-by: Nas Chung <nas.chung@chipsnmedia.com>
---
drivers/media/platform/chips-media/wave5/wave5-hw.c | 3 +++
drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c | 5 ++++-
drivers/media/platform/chips-media/wave5/wave5-vpuapi.h | 1 +
3 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/drivers/media/platform/chips-media/wave5/wave5-hw.c b/drivers/media/platform/chips-media/wave5/wave5-hw.c
index c516d125f553..2392bce8d840 100644
--- a/drivers/media/platform/chips-media/wave5/wave5-hw.c
+++ b/drivers/media/platform/chips-media/wave5/wave5-hw.c
@@ -1763,6 +1763,9 @@ int wave5_vpu_enc_init_seq(struct vpu_instance *inst)
(p_param->skip_intra_trans << 25) |
(p_param->strong_intra_smooth_enable << 27) |
(p_param->en_still_picture << 30);
+ else if (inst->std == W_AVC_ENC)
+ reg_val |= (p_param->constraint_set1_flag << 29);
+
vpu_write_reg(inst->dev, W5_CMD_ENC_SEQ_SPS_PARAM, reg_val);
reg_val = (p_param->lossless_enable) |
diff --git a/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c b/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c
index 6fe01217233f..775beeb10fd4 100644
--- a/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c
+++ b/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c
@@ -939,6 +939,8 @@ static int wave5_vpu_enc_s_ctrl(struct v4l2_ctrl *ctrl)
case V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE:
inst->enc_param.profile = H264_PROFILE_BP;
inst->bit_depth = 8;
+ if (ctrl->val == V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE)
+ inst->enc_param.constraint_set1_flag = 1;
break;
case V4L2_MPEG_VIDEO_H264_PROFILE_MAIN:
inst->enc_param.profile = H264_PROFILE_MP;
@@ -1215,6 +1217,7 @@ static int wave5_set_enc_openparam(struct enc_open_param *open_param,
open_param->wave_param.intra_period = input.avc_idr_period;
}
} else {
+ open_param->wave_param.constraint_set1_flag = input.constraint_set1_flag;
open_param->wave_param.avc_idr_period = input.avc_idr_period;
}
open_param->wave_param.entropy_coding_mode = input.entropy_coding_mode;
@@ -1687,7 +1690,7 @@ static int wave5_vpu_open_enc(struct file *filp)
-6, 6, 1, 0);
v4l2_ctrl_new_std(v4l2_ctrl_hdl, &wave5_vpu_enc_ctrl_ops,
V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM,
- 0, 1, 1, 1);
+ 0, 1, 1, 0);
v4l2_ctrl_new_std(v4l2_ctrl_hdl, &wave5_vpu_enc_ctrl_ops,
V4L2_CID_MPEG_VIDEO_H264_CONSTRAINED_INTRA_PREDICTION,
0, 1, 1, 0);
diff --git a/drivers/media/platform/chips-media/wave5/wave5-vpuapi.h b/drivers/media/platform/chips-media/wave5/wave5-vpuapi.h
index dc31689e0d27..7b08fef58217 100644
--- a/drivers/media/platform/chips-media/wave5/wave5-vpuapi.h
+++ b/drivers/media/platform/chips-media/wave5/wave5-vpuapi.h
@@ -570,6 +570,7 @@ struct enc_wave_param {
u32 transform8x8_enable: 1; /* enable 8x8 intra prediction and 8x8 transform */
u32 mb_level_rc_enable: 1; /* enable MB-level rate control */
u32 forced_idr_header_enable: 1; /* enable header encoding before IDR frame */
+ u32 constraint_set1_flag: 1; /* enable CBP */
u32 bg_detection: 1; /* enable background detection */
};
--
2.43.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH v1 3/4] media: chips-media: wave5: Support CBP profile
2026-03-24 5:03 ` [PATCH v1 3/4] media: chips-media: wave5: Support CBP profile Jackson.lee
@ 2026-03-24 20:18 ` Brandon Brnich
0 siblings, 0 replies; 7+ messages in thread
From: Brandon Brnich @ 2026-03-24 20:18 UTC (permalink / raw)
To: Jackson.lee, mchehab, nicolas, sebastian.fricke
Cc: linux-media, linux-kernel, hverkuil, nas.chung, lafley.kim
Hi Jackson,
On 3/24/26 00:03, Jackson.lee wrote:
> From: Jackson Lee <jackson.lee@chipsnmedia.com>
>
> Constrained Baseline Profile (CBP) and Baseline Profile (BP) have been
> treated as the same.
> Introduce the ability to differentiate between the two.
>
> Fixes: 9707a6254a8a ("media: chips-media: wave5: Add the v4l2 layer")
> Signed-off-by: Jackson Lee <jackson.lee@chipsnmedia.com>
> Signed-off-by: Nas Chung <nas.chung@chipsnmedia.com>
> ---
> drivers/media/platform/chips-media/wave5/wave5-hw.c | 3 +++
> drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c | 5 ++++-
> drivers/media/platform/chips-media/wave5/wave5-vpuapi.h | 1 +
> 3 files changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/media/platform/chips-media/wave5/wave5-hw.c b/drivers/media/platform/chips-media/wave5/wave5-hw.c
> index c516d125f553..2392bce8d840 100644
> --- a/drivers/media/platform/chips-media/wave5/wave5-hw.c
> +++ b/drivers/media/platform/chips-media/wave5/wave5-hw.c
> @@ -1763,6 +1763,9 @@ int wave5_vpu_enc_init_seq(struct vpu_instance *inst)
> (p_param->skip_intra_trans << 25) |
> (p_param->strong_intra_smooth_enable << 27) |
> (p_param->en_still_picture << 30);
> + else if (inst->std == W_AVC_ENC)
> + reg_val |= (p_param->constraint_set1_flag << 29);
> +
> vpu_write_reg(inst->dev, W5_CMD_ENC_SEQ_SPS_PARAM, reg_val);
>
> reg_val = (p_param->lossless_enable) |
> diff --git a/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c b/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c
> index 6fe01217233f..775beeb10fd4 100644
> --- a/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c
> +++ b/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c
> @@ -939,6 +939,8 @@ static int wave5_vpu_enc_s_ctrl(struct v4l2_ctrl *ctrl)
> case V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE:
> inst->enc_param.profile = H264_PROFILE_BP;
> inst->bit_depth = 8;
> + if (ctrl->val == V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE)
> + inst->enc_param.constraint_set1_flag = 1;
> break;
> case V4L2_MPEG_VIDEO_H264_PROFILE_MAIN:
> inst->enc_param.profile = H264_PROFILE_MP;
> @@ -1215,6 +1217,7 @@ static int wave5_set_enc_openparam(struct enc_open_param *open_param,
> open_param->wave_param.intra_period = input.avc_idr_period;
> }
> } else {
> + open_param->wave_param.constraint_set1_flag = input.constraint_set1_flag;
> open_param->wave_param.avc_idr_period = input.avc_idr_period;
> }
Thank you for fixing. Setting GOP and CBP work for me now.
Tested-by: Brandon Brnich <b-brnich@ti.com>
> open_param->wave_param.entropy_coding_mode = input.entropy_coding_mode;
> @@ -1687,7 +1690,7 @@ static int wave5_vpu_open_enc(struct file *filp)
> -6, 6, 1, 0);
> v4l2_ctrl_new_std(v4l2_ctrl_hdl, &wave5_vpu_enc_ctrl_ops,
> V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM,
> - 0, 1, 1, 1);
> + 0, 1, 1, 0);
> v4l2_ctrl_new_std(v4l2_ctrl_hdl, &wave5_vpu_enc_ctrl_ops,
> V4L2_CID_MPEG_VIDEO_H264_CONSTRAINED_INTRA_PREDICTION,
> 0, 1, 1, 0);
> diff --git a/drivers/media/platform/chips-media/wave5/wave5-vpuapi.h b/drivers/media/platform/chips-media/wave5/wave5-vpuapi.h
> index dc31689e0d27..7b08fef58217 100644
> --- a/drivers/media/platform/chips-media/wave5/wave5-vpuapi.h
> +++ b/drivers/media/platform/chips-media/wave5/wave5-vpuapi.h
> @@ -570,6 +570,7 @@ struct enc_wave_param {
> u32 transform8x8_enable: 1; /* enable 8x8 intra prediction and 8x8 transform */
> u32 mb_level_rc_enable: 1; /* enable MB-level rate control */
> u32 forced_idr_header_enable: 1; /* enable header encoding before IDR frame */
> + u32 constraint_set1_flag: 1; /* enable CBP */
> u32 bg_detection: 1; /* enable background detection */
> };
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v1 4/4] media: chips-media: wave5: Add Support for Packed YUV422 Formats
2026-03-24 5:03 [PATCH v1 0/4] Add encoder features Jackson.lee
` (2 preceding siblings ...)
2026-03-24 5:03 ` [PATCH v1 3/4] media: chips-media: wave5: Support CBP profile Jackson.lee
@ 2026-03-24 5:04 ` Jackson.lee
2026-03-24 20:24 ` Brandon Brnich
3 siblings, 1 reply; 7+ messages in thread
From: Jackson.lee @ 2026-03-24 5:04 UTC (permalink / raw)
To: mchehab, nicolas, sebastian.fricke
Cc: linux-media, linux-kernel, hverkuil, nas.chung, lafley.kim,
b-brnich, jackson.lee, Nicolas Dufresne
From: Jackson Lee <jackson.lee@chipsnmedia.com>
Wave5 encoder is capable of reading in numerous raw pixel formats.
Expose these formats and properly configure encoder if selected.
Signed-off-by: Jackson Lee <jackson.lee@chipsnmedia.com>
Signed-off-by: Nas Chung <nas.chung@chipsnmedia.com>
Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
---
.../platform/chips-media/wave5/wave5-helper.h | 2 +-
.../chips-media/wave5/wave5-vpu-enc.c | 32 +++++++++++++++++++
2 files changed, 33 insertions(+), 1 deletion(-)
diff --git a/drivers/media/platform/chips-media/wave5/wave5-helper.h b/drivers/media/platform/chips-media/wave5/wave5-helper.h
index d61fdbda359d..e6f241012c3b 100644
--- a/drivers/media/platform/chips-media/wave5/wave5-helper.h
+++ b/drivers/media/platform/chips-media/wave5/wave5-helper.h
@@ -11,7 +11,7 @@
#include "wave5-vpu.h"
#define FMT_TYPES 2
-#define MAX_FMTS 12
+#define MAX_FMTS 16
const char *state_to_str(enum vpu_instance_state state);
void wave5_cleanup_instance(struct vpu_instance *inst, struct file *filp);
diff --git a/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c b/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c
index 775beeb10fd4..ad63609cbe83 100644
--- a/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c
+++ b/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c
@@ -90,6 +90,22 @@ static const struct vpu_format enc_fmt_list[FMT_TYPES][MAX_FMTS] = {
.v4l2_pix_fmt = V4L2_PIX_FMT_NV61M,
.v4l2_frmsize = &enc_frmsize[VPU_FMT_TYPE_RAW],
},
+ {
+ .v4l2_pix_fmt = V4L2_PIX_FMT_YUYV,
+ .v4l2_frmsize = &enc_frmsize[VPU_FMT_TYPE_RAW],
+ },
+ {
+ .v4l2_pix_fmt = V4L2_PIX_FMT_YVYU,
+ .v4l2_frmsize = &enc_frmsize[VPU_FMT_TYPE_RAW],
+ },
+ {
+ .v4l2_pix_fmt = V4L2_PIX_FMT_UYVY,
+ .v4l2_frmsize = &enc_frmsize[VPU_FMT_TYPE_RAW],
+ },
+ {
+ .v4l2_pix_fmt = V4L2_PIX_FMT_VYUY,
+ .v4l2_frmsize = &enc_frmsize[VPU_FMT_TYPE_RAW],
+ },
}
};
@@ -1161,6 +1177,22 @@ static int wave5_set_enc_openparam(struct enc_open_param *open_param,
else
open_param->src_format = FORMAT_420;
+ switch (info->format) {
+ case V4L2_PIX_FMT_YUYV:
+ open_param->packed_format = PACKED_YUYV;
+ break;
+ case V4L2_PIX_FMT_YVYU:
+ open_param->packed_format = PACKED_YVYU;
+ break;
+ case V4L2_PIX_FMT_UYVY:
+ open_param->packed_format = PACKED_UYVY;
+ break;
+ case V4L2_PIX_FMT_VYUY:
+ open_param->packed_format = PACKED_VYUY;
+ break;
+ default:
+ break;
+ }
open_param->wave_param.gop_preset_idx = PRESET_IDX_IPP_SINGLE;
open_param->wave_param.hvs_qp_scale = 2;
open_param->wave_param.hvs_max_delta_qp = 10;
--
2.43.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH v1 4/4] media: chips-media: wave5: Add Support for Packed YUV422 Formats
2026-03-24 5:04 ` [PATCH v1 4/4] media: chips-media: wave5: Add Support for Packed YUV422 Formats Jackson.lee
@ 2026-03-24 20:24 ` Brandon Brnich
0 siblings, 0 replies; 7+ messages in thread
From: Brandon Brnich @ 2026-03-24 20:24 UTC (permalink / raw)
To: Jackson.lee, mchehab, nicolas, sebastian.fricke
Cc: linux-media, linux-kernel, hverkuil, nas.chung, lafley.kim,
Nicolas Dufresne
Hi Jackson
On 3/24/26 00:04, Jackson.lee wrote:
> From: Jackson Lee <jackson.lee@chipsnmedia.com>
>
> Wave5 encoder is capable of reading in numerous raw pixel formats.
> Expose these formats and properly configure encoder if selected.
>
> Signed-off-by: Jackson Lee <jackson.lee@chipsnmedia.com>
> Signed-off-by: Nas Chung <nas.chung@chipsnmedia.com>
> Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Even though this already has Nicolas's review, wanted to add my tested
by as I have validated this with latest kernel and gstreamer version
1.26.9. Encoder is properly reading these raw formats!
Tested-by: Brandon Brnich <b-brnich@ti.com>
> ---
> .../platform/chips-media/wave5/wave5-helper.h | 2 +-
> .../chips-media/wave5/wave5-vpu-enc.c | 32 +++++++++++++++++++
> 2 files changed, 33 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/media/platform/chips-media/wave5/wave5-helper.h b/drivers/media/platform/chips-media/wave5/wave5-helper.h
> index d61fdbda359d..e6f241012c3b 100644
> --- a/drivers/media/platform/chips-media/wave5/wave5-helper.h
> +++ b/drivers/media/platform/chips-media/wave5/wave5-helper.h
> @@ -11,7 +11,7 @@
> #include "wave5-vpu.h"
>
> #define FMT_TYPES 2
> -#define MAX_FMTS 12
> +#define MAX_FMTS 16
>
> const char *state_to_str(enum vpu_instance_state state);
> void wave5_cleanup_instance(struct vpu_instance *inst, struct file *filp);
> diff --git a/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c b/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c
> index 775beeb10fd4..ad63609cbe83 100644
> --- a/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c
> +++ b/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c
> @@ -90,6 +90,22 @@ static const struct vpu_format enc_fmt_list[FMT_TYPES][MAX_FMTS] = {
> .v4l2_pix_fmt = V4L2_PIX_FMT_NV61M,
> .v4l2_frmsize = &enc_frmsize[VPU_FMT_TYPE_RAW],
> },
> + {
> + .v4l2_pix_fmt = V4L2_PIX_FMT_YUYV,
> + .v4l2_frmsize = &enc_frmsize[VPU_FMT_TYPE_RAW],
> + },
> + {
> + .v4l2_pix_fmt = V4L2_PIX_FMT_YVYU,
> + .v4l2_frmsize = &enc_frmsize[VPU_FMT_TYPE_RAW],
> + },
> + {
> + .v4l2_pix_fmt = V4L2_PIX_FMT_UYVY,
> + .v4l2_frmsize = &enc_frmsize[VPU_FMT_TYPE_RAW],
> + },
> + {
> + .v4l2_pix_fmt = V4L2_PIX_FMT_VYUY,
> + .v4l2_frmsize = &enc_frmsize[VPU_FMT_TYPE_RAW],
> + },
> }
> };
>
> @@ -1161,6 +1177,22 @@ static int wave5_set_enc_openparam(struct enc_open_param *open_param,
> else
> open_param->src_format = FORMAT_420;
>
> + switch (info->format) {
> + case V4L2_PIX_FMT_YUYV:
> + open_param->packed_format = PACKED_YUYV;
> + break;
> + case V4L2_PIX_FMT_YVYU:
> + open_param->packed_format = PACKED_YVYU;
> + break;
> + case V4L2_PIX_FMT_UYVY:
> + open_param->packed_format = PACKED_UYVY;
> + break;
> + case V4L2_PIX_FMT_VYUY:
> + open_param->packed_format = PACKED_VYUY;
> + break;
> + default:
> + break;
> + }
> open_param->wave_param.gop_preset_idx = PRESET_IDX_IPP_SINGLE;
> open_param->wave_param.hvs_qp_scale = 2;
> open_param->wave_param.hvs_max_delta_qp = 10;
^ permalink raw reply [flat|nested] 7+ messages in thread