68 lines
2.2 KiB
Diff
68 lines
2.2 KiB
Diff
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) {
|