public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v1 0/4] Add encoder features
@ 2026-03-24  5:03 Jackson.lee
  2026-03-24  5:03 ` [PATCH v1 1/4] media: v4l2-controls: Add control for background detection Jackson.lee
                   ` (3 more replies)
  0 siblings, 4 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>

This series adds several encoder-side enhancements for the Wave5 driver.

The following features are introduced:
- Background detection support via V4L2 controls
- CBP profile support
- Support for packed YUV422 formats

Background detection allows the encoder to differentiate between
foreground and background regions, potentially improving compression
efficiency depending on the use case.

CBP profile support extends compatibility with additional encoding
profiles.

Support for packed YUV422 formats enables handling of commonly used
input formats such as YUYV and YVYU.

The changes include updates to control definitions, documentation,
and driver implementation.

Tested on Wave5 encoder pipeline with GStreamer.

Change since v0:
* For [PATCH v1 1/4] media: v4l2-controls: Add control
      for background detection
 - Added spaces around '+' in CID macro definition per CI suggestion

* For [PATCH v1 2/4] media: chips-media: wave5: Add support 
      for background detection
 - Split into two patches: API addition and driver implementation

* For [PATCH v1 3/4] media: chips-media: wave5: Support CBP profile
 - Added Fixed tag
 - Added braces to all branches in the else-if/else block

* For [PATCH v1 4/4] media: chips-media: wave5: Add Support
       for Packed YUV422 Formats
 - Added Reviewed-by tag

Jackson Lee (4):
  media: v4l2-controls: Add control for background detection
  media: chips-media: wave5: Add support for background detection
  media: chips-media: wave5: Support CBP profile
  media: chips-media: wave5: Add Support for Packed YUV422 Formats

 .../media/v4l/ext-ctrls-codec.rst             |  6 +++
 .../platform/chips-media/wave5/wave5-helper.h |  2 +-
 .../platform/chips-media/wave5/wave5-hw.c     |  7 ++-
 .../chips-media/wave5/wave5-vpu-enc.c         | 45 ++++++++++++++++++-
 .../platform/chips-media/wave5/wave5-vpuapi.h |  2 +
 drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  2 +
 include/uapi/linux/v4l2-controls.h            |  2 +
 7 files changed, 63 insertions(+), 3 deletions(-)

-- 
2.43.0


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [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

* [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 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

* 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

end of thread, other threads:[~2026-03-24 20:24 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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 ` [PATCH v1 3/4] media: chips-media: wave5: Support CBP profile 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
2026-03-24 20:24   ` Brandon Brnich

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox