openwrt/target/linux/bcm27xx/patches-5.10/950-0406-staging-vc04_servi...

65 lines
2.3 KiB
Diff

From 8c2356e38c9a51356a9f0eacf08f4de6521ad0bd Mon Sep 17 00:00:00 2001
From: Dave Stevenson <dave.stevenson@raspberrypi.com>
Date: Sun, 13 Dec 2020 16:45:58 +0000
Subject: [PATCH] staging/vc04_services/codec: Add support for CID
MPEG_HEADER_MODE
Control V4L2_CID_MPEG_VIDEO_HEADER_MODE controls whether the encoder
is meant to emit the header bytes as a separate packet or with the
first encoded frame.
Add support for it.
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
---
.../bcm2835-codec/bcm2835-v4l2-codec.c | 18 +++++++++++++++++-
1 file changed, 17 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
@@ -1692,6 +1692,17 @@ static int bcm2835_codec_s_ctrl(struct v
sizeof(ctrl->val));
break;
+ case V4L2_CID_MPEG_VIDEO_HEADER_MODE:
+ if (!ctx->component)
+ break;
+
+ ret = vchiq_mmal_port_parameter_set(ctx->dev->instance,
+ &ctx->component->output[0],
+ MMAL_PARAMETER_VIDEO_ENCODE_HEADERS_WITH_FRAME,
+ &ctrl->val,
+ sizeof(ctrl->val));
+ break;
+
case V4L2_CID_MPEG_VIDEO_H264_I_PERIOD:
if (!ctx->component)
break;
@@ -1963,6 +1974,7 @@ static int bcm2835_codec_set_ctrls(struc
const u32 control_ids[] = {
V4L2_CID_MPEG_VIDEO_BITRATE_MODE,
V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER,
+ V4L2_CID_MPEG_VIDEO_HEADER_MODE,
V4L2_CID_MPEG_VIDEO_H264_I_PERIOD,
V4L2_CID_MPEG_VIDEO_H264_LEVEL,
V4L2_CID_MPEG_VIDEO_H264_PROFILE,
@@ -2515,7 +2527,7 @@ static int bcm2835_codec_open(struct fil
hdl = &ctx->hdl;
if (dev->role == ENCODE) {
/* Encode controls */
- v4l2_ctrl_handler_init(hdl, 7);
+ v4l2_ctrl_handler_init(hdl, 9);
v4l2_ctrl_new_std_menu(hdl, &bcm2835_codec_ctrl_ops,
V4L2_CID_MPEG_VIDEO_BITRATE_MODE,
@@ -2525,6 +2537,10 @@ static int bcm2835_codec_open(struct fil
V4L2_CID_MPEG_VIDEO_BITRATE,
25 * 1000, 25 * 1000 * 1000,
25 * 1000, 10 * 1000 * 1000);
+ v4l2_ctrl_new_std_menu(hdl, &bcm2835_codec_ctrl_ops,
+ V4L2_CID_MPEG_VIDEO_HEADER_MODE,
+ V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME,
+ 0, V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME);
v4l2_ctrl_new_std(hdl, &bcm2835_codec_ctrl_ops,
V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER,
0, 1,