meta-digi/meta-digi-arm/dynamic-layers/stm-st-stm32mp/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0047-v4l2codecs-encoder-Add...

62 lines
1.8 KiB
Diff

From e9b9898be9c2cbf007b5e6580d4f90c93163502b Mon Sep 17 00:00:00 2001
From: Michael Grzeschik <m.grzeschik@pengutronix.de>
Date: Tue, 21 Feb 2023 02:10:52 +0100
Subject: [PATCH 47/68] v4l2codecs: encoder: Add h264 code to v4l2 encoder
class
Upstream-Status: Pending
---
sys/v4l2codecs/gstv4l2encoder.c | 25 +++++++++++++++++++++++++
sys/v4l2codecs/gstv4l2encoder.h | 2 ++
2 files changed, 27 insertions(+)
diff --git a/sys/v4l2codecs/gstv4l2encoder.c b/sys/v4l2codecs/gstv4l2encoder.c
index 0938bb1..cded8bf 100644
--- a/sys/v4l2codecs/gstv4l2encoder.c
+++ b/sys/v4l2codecs/gstv4l2encoder.c
@@ -1366,3 +1366,28 @@ gst_v4l2_codec_vp8_enc_get_qp_range (GstV4l2Encoder * self,
return TRUE;
}
+
+gboolean
+gst_v4l2_codec_h264_enc_get_qp_range (GstV4l2Encoder * self,
+ guint * qp_min, guint * qp_max)
+{
+ gint ret;
+ struct v4l2_query_ext_ctrl control = {
+ .id = V4L2_CID_STATELESS_H264_ENCODE_RC,
+ };
+
+ *qp_max = 127;
+ *qp_min = 0;
+
+ ret = ioctl (self->video_fd, VIDIOC_QUERY_EXT_CTRL, &control);
+ if (ret < 0) {
+ GST_DEBUG_OBJECT (self, "unable to retrieve encoder qp, use default");
+ return FALSE;
+ }
+
+ *qp_max = control.maximum;
+ *qp_min = control.minimum;
+ GST_DEBUG_OBJECT (self, "encoder qp min %d qp max %d", *qp_min, *qp_max);
+
+ return TRUE;
+}
diff --git a/sys/v4l2codecs/gstv4l2encoder.h b/sys/v4l2codecs/gstv4l2encoder.h
index 9acb0e3..e7f44ba 100644
--- a/sys/v4l2codecs/gstv4l2encoder.h
+++ b/sys/v4l2codecs/gstv4l2encoder.h
@@ -134,6 +134,8 @@ gboolean gst_v4l2_encoder_request_failed (GstV4l2Request * request);
gboolean gst_v4l2_codec_vp8_enc_get_qp_range (GstV4l2Encoder * self, guint * qp_min, guint * qp_max);
+gboolean gst_v4l2_codec_h264_enc_get_qp_range (GstV4l2Encoder * self, guint * qp_min, guint * qp_max);
+
G_END_DECLS
#endif /* __GST_V4L2_ENCODER_H__ */
--
2.25.1