Skip to content

Commit e8e74cc

Browse files
committed
Pass V4L2_CID_MPEG_VIDEO_H264_MIN_QP/MAX_QP to bcm2835-v4l2-codec
Following raspberrypi#4704. This is necessary to set up quantization for variable bitrate to avoid video flickering.
1 parent d6bbe47 commit e8e74cc

File tree

1 file changed

+31
-1
lines changed

1 file changed

+31
-1
lines changed

drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2187,6 +2187,28 @@ static int bcm2835_codec_s_ctrl(struct v4l2_ctrl *ctrl)
21872187
ret = bcm2835_codec_set_level_profile(ctx, ctrl);
21882188
break;
21892189

2190+
case V4L2_CID_MPEG_VIDEO_H264_MIN_QP:
2191+
if (!ctx->component)
2192+
break;
2193+
2194+
ret = vchiq_mmal_port_parameter_set(ctx->dev->instance,
2195+
&ctx->component->output[0],
2196+
MMAL_PARAMETER_VIDEO_ENCODE_MIN_QUANT,
2197+
&ctrl->val,
2198+
sizeof(ctrl->val));
2199+
break;
2200+
2201+
case V4L2_CID_MPEG_VIDEO_H264_MAX_QP:
2202+
if (!ctx->component)
2203+
break;
2204+
2205+
ret = vchiq_mmal_port_parameter_set(ctx->dev->instance,
2206+
&ctx->component->output[0],
2207+
MMAL_PARAMETER_VIDEO_ENCODE_MAX_QUANT,
2208+
&ctrl->val,
2209+
sizeof(ctrl->val));
2210+
break;
2211+
21902212
case V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME: {
21912213
u32 mmal_bool = 1;
21922214

@@ -3111,7 +3133,7 @@ static int bcm2835_codec_open(struct file *file)
31113133
case ENCODE:
31123134
{
31133135
/* Encode controls */
3114-
v4l2_ctrl_handler_init(hdl, 9);
3136+
v4l2_ctrl_handler_init(hdl, 11);
31153137

31163138
v4l2_ctrl_new_std_menu(hdl, &bcm2835_codec_ctrl_ops,
31173139
V4L2_CID_MPEG_VIDEO_BITRATE_MODE,
@@ -3159,6 +3181,14 @@ static int bcm2835_codec_open(struct file *file)
31593181
BIT(V4L2_MPEG_VIDEO_H264_PROFILE_MAIN) |
31603182
BIT(V4L2_MPEG_VIDEO_H264_PROFILE_HIGH)),
31613183
V4L2_MPEG_VIDEO_H264_PROFILE_HIGH);
3184+
v4l2_ctrl_new_std(hdl, &bcm2835_codec_ctrl_ops,
3185+
V4L2_CID_MPEG_VIDEO_H264_MIN_QP,
3186+
0, 51,
3187+
1, 20);
3188+
v4l2_ctrl_new_std(hdl, &bcm2835_codec_ctrl_ops,
3189+
V4L2_CID_MPEG_VIDEO_H264_MAX_QP,
3190+
0, 51,
3191+
1, 51);
31623192
v4l2_ctrl_new_std(hdl, &bcm2835_codec_ctrl_ops,
31633193
V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME,
31643194
0, 0, 0, 0);

0 commit comments

Comments
 (0)