You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.8 KiB
Diff
56 lines
1.8 KiB
Diff
5 years ago
|
From ae6dba510ac29ef7b0e6c838fb1bcc8b9eb474b7 Mon Sep 17 00:00:00 2001
|
||
5 years ago
|
From: Aman Gupta <aman@tmm1.net>
|
||
|
Date: Thu, 22 Aug 2019 22:31:37 +0000
|
||
5 years ago
|
Subject: [PATCH] staging: bcm2835-codec: add support for
|
||
5 years ago
|
V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME
|
||
|
|
||
|
fixes #3171
|
||
|
|
||
|
Signed-off-by: Aman Gupta <aman@tmm1.net>
|
||
|
---
|
||
|
.../bcm2835-codec/bcm2835-v4l2-codec.c | 19 ++++++++++++++++++-
|
||
|
1 file changed, 18 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
|
||
|
@@ -1587,6 +1587,20 @@ static int bcm2835_codec_s_ctrl(struct v
|
||
|
ret = bcm2835_codec_set_level_profile(ctx, ctrl);
|
||
|
break;
|
||
|
|
||
|
+ case V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME: {
|
||
|
+ u32 mmal_bool = 1;
|
||
|
+
|
||
|
+ if (!ctx->component)
|
||
|
+ break;
|
||
|
+
|
||
|
+ ret = vchiq_mmal_port_parameter_set(ctx->dev->instance,
|
||
|
+ &ctx->component->output[0],
|
||
|
+ MMAL_PARAMETER_VIDEO_REQUEST_I_FRAME,
|
||
|
+ &mmal_bool,
|
||
|
+ sizeof(mmal_bool));
|
||
|
+ break;
|
||
|
+ }
|
||
|
+
|
||
|
default:
|
||
|
v4l2_err(&ctx->dev->v4l2_dev, "Invalid control\n");
|
||
|
return -EINVAL;
|
||
|
@@ -2311,7 +2325,7 @@ static int bcm2835_codec_open(struct fil
|
||
|
hdl = &ctx->hdl;
|
||
|
if (dev->role == ENCODE) {
|
||
|
/* Encode controls */
|
||
|
- v4l2_ctrl_handler_init(hdl, 6);
|
||
|
+ v4l2_ctrl_handler_init(hdl, 7);
|
||
|
|
||
|
v4l2_ctrl_new_std_menu(hdl, &bcm2835_codec_ctrl_ops,
|
||
|
V4L2_CID_MPEG_VIDEO_BITRATE_MODE,
|
||
|
@@ -2355,6 +2369,9 @@ static int bcm2835_codec_open(struct fil
|
||
|
BIT(V4L2_MPEG_VIDEO_H264_PROFILE_MAIN) |
|
||
|
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_FORCE_KEY_FRAME,
|
||
|
+ 0, 0, 0, 0);
|
||
|
if (hdl->error) {
|
||
|
rc = hdl->error;
|
||
|
goto free_ctrl_handler;
|