From e9b9898be9c2cbf007b5e6580d4f90c93163502b Mon Sep 17 00:00:00 2001 From: Michael Grzeschik 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