aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/bcm27xx/patches-5.15/950-0576-Pass-V4L2_CID_MPEG_VIDEO_H264_MIN_QP-MAX_QP-to-bcm28.patch
diff options
context:
space:
mode:
authorÁlvaro Fernández Rojas <noltari@gmail.com>2022-05-16 23:40:32 +0200
committerÁlvaro Fernández Rojas <noltari@gmail.com>2022-05-17 15:11:22 +0200
commit20ea6adbf199097c4f5f591ffee088340630dae4 (patch)
treed6719d95e136611a1c25bbf7789652d6d402779d /target/linux/bcm27xx/patches-5.15/950-0576-Pass-V4L2_CID_MPEG_VIDEO_H264_MIN_QP-MAX_QP-to-bcm28.patch
parentbca05bd072180dc38ef740b37ded9572a6db1981 (diff)
downloadupstream-20ea6adbf199097c4f5f591ffee088340630dae4.tar.gz
upstream-20ea6adbf199097c4f5f591ffee088340630dae4.tar.bz2
upstream-20ea6adbf199097c4f5f591ffee088340630dae4.zip
bcm27xx: add support for linux v5.15
Build system: x86_64 Build-tested: bcm2708, bcm2709, bcm2710, bcm2711 Run-tested: bcm2708/RPiB+, bcm2709/RPi3B, bcm2710/RPi3B, bcm2711/RPi4B Signed-off-by: Marty Jones <mj8263788@gmail.com> Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
Diffstat (limited to 'target/linux/bcm27xx/patches-5.15/950-0576-Pass-V4L2_CID_MPEG_VIDEO_H264_MIN_QP-MAX_QP-to-bcm28.patch')
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0576-Pass-V4L2_CID_MPEG_VIDEO_H264_MIN_QP-MAX_QP-to-bcm28.patch67
1 files changed, 67 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.15/950-0576-Pass-V4L2_CID_MPEG_VIDEO_H264_MIN_QP-MAX_QP-to-bcm28.patch b/target/linux/bcm27xx/patches-5.15/950-0576-Pass-V4L2_CID_MPEG_VIDEO_H264_MIN_QP-MAX_QP-to-bcm28.patch
new file mode 100644
index 0000000000..68f1d1ab7e
--- /dev/null
+++ b/target/linux/bcm27xx/patches-5.15/950-0576-Pass-V4L2_CID_MPEG_VIDEO_H264_MIN_QP-MAX_QP-to-bcm28.patch
@@ -0,0 +1,67 @@
+From 3d21c93db479bf4269630676ba7d48dec9bf75fc Mon Sep 17 00:00:00 2001
+From: Maxim Devaev <mdevaev@gmail.com>
+Date: Wed, 17 Nov 2021 04:57:56 +0300
+Subject: [PATCH] Pass V4L2_CID_MPEG_VIDEO_H264_MIN_QP/MAX_QP to
+ bcm2835-v4l2-codec
+
+Following raspberrypi/linux#4704. This is necessary to set up
+quantization for variable bitrate to avoid video flickering.
+---
+ .../bcm2835-codec/bcm2835-v4l2-codec.c | 32 ++++++++++++++++++-
+ 1 file changed, 31 insertions(+), 1 deletion(-)
+
+--- a/drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c
++++ b/drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c
+@@ -2187,6 +2187,28 @@ static int bcm2835_codec_s_ctrl(struct v
+ ret = bcm2835_codec_set_level_profile(ctx, ctrl);
+ break;
+
++ case V4L2_CID_MPEG_VIDEO_H264_MIN_QP:
++ if (!ctx->component)
++ break;
++
++ ret = vchiq_mmal_port_parameter_set(ctx->dev->instance,
++ &ctx->component->output[0],
++ MMAL_PARAMETER_VIDEO_ENCODE_MIN_QUANT,
++ &ctrl->val,
++ sizeof(ctrl->val));
++ break;
++
++ case V4L2_CID_MPEG_VIDEO_H264_MAX_QP:
++ if (!ctx->component)
++ break;
++
++ ret = vchiq_mmal_port_parameter_set(ctx->dev->instance,
++ &ctx->component->output[0],
++ MMAL_PARAMETER_VIDEO_ENCODE_MAX_QUANT,
++ &ctrl->val,
++ sizeof(ctrl->val));
++ break;
++
+ case V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME: {
+ u32 mmal_bool = 1;
+
+@@ -3103,7 +3125,7 @@ static int bcm2835_codec_open(struct fil
+ case ENCODE:
+ {
+ /* Encode controls */
+- v4l2_ctrl_handler_init(hdl, 9);
++ v4l2_ctrl_handler_init(hdl, 11);
+
+ v4l2_ctrl_new_std_menu(hdl, &bcm2835_codec_ctrl_ops,
+ V4L2_CID_MPEG_VIDEO_BITRATE_MODE,
+@@ -3152,6 +3174,14 @@ static int bcm2835_codec_open(struct fil
+ BIT(V4L2_MPEG_VIDEO_H264_PROFILE_HIGH)),
+ V4L2_MPEG_VIDEO_H264_PROFILE_HIGH);
+ v4l2_ctrl_new_std(hdl, &bcm2835_codec_ctrl_ops,
++ V4L2_CID_MPEG_VIDEO_H264_MIN_QP,
++ 0, 51,
++ 1, 20);
++ v4l2_ctrl_new_std(hdl, &bcm2835_codec_ctrl_ops,
++ V4L2_CID_MPEG_VIDEO_H264_MAX_QP,
++ 0, 51,
++ 1, 51);
++ v4l2_ctrl_new_std(hdl, &bcm2835_codec_ctrl_ops,
+ V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME,
+ 0, 0, 0, 0);
+ if (hdl->error) {