From 88f6aeb90e1f3138eaa4f1ffd44d34b51dd43192 Mon Sep 17 00:00:00 2001 From: Nicolas Dufresne Date: Wed, 15 Nov 2023 19:18:18 -0500 Subject: [PATCH 63/68] v4l2codecs: h264dec: Remove dead and broken code Its not possible with the current uAPI to ask the driver for the QP range. Upstream-Status: Pending --- sys/v4l2codecs/gstv4l2codech264enc.c | 40 +++++----------------------- sys/v4l2codecs/gstv4l2encoder.c | 25 ----------------- 2 files changed, 7 insertions(+), 58 deletions(-) diff --git a/sys/v4l2codecs/gstv4l2codech264enc.c b/sys/v4l2codecs/gstv4l2codech264enc.c index b1617c9..967fd4d 100644 --- a/sys/v4l2codecs/gstv4l2codech264enc.c +++ b/sys/v4l2codecs/gstv4l2codech264enc.c @@ -58,18 +58,6 @@ static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src", "profile = (string) { main, constrained-baseline, baseline}") ); - -#define H264ENC_DEFAULT_KEYFRAME_INTERVAL 30 - -#define H264_MAX_QUALITY 63 -#define H264_MIN_QUALITY 0 - -#define H264_DEFAULT_BITRATE 100000 - -/* Scale factor for bitrate (HRD bit_rate_scale: min = 6) */ -#define SX_BITRATE 6 -/* Scale factor for cpb_size (HRD cpb_size_scale: min = 4) */ -#define SX_CPB_SIZE 4 /* Maximum sizes for common headers (in bits) */ #define MAX_SPS_HDR_SIZE 16473 #define MAX_VUI_PARAMS_SIZE 210 @@ -77,8 +65,6 @@ static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src", #define MAX_PPS_HDR_SIZE 101 #define MAX_SLICE_HDR_SIZE 397 + 2572 + 6670 + 2402 -#define MAX_GOP_SIZE 1024 - #define SPS_SIZE 4 + GST_ROUND_UP_8 (MAX_SPS_HDR_SIZE + MAX_VUI_PARAMS_SIZE + \ 2 * MAX_HRD_PARAMS_SIZE) / 8 #define PPS_SIZE 4 + GST_ROUND_UP_8 (MAX_PPS_HDR_SIZE) / 8 @@ -93,7 +79,6 @@ struct _GstV4l2CodecH264Enc gint height; gint width_in_macroblocks; gint height_in_macroblocks; - guint qp_max, qp_min; guint64 targeted_bitrate; gboolean cabac; guint cabac_init_idc; @@ -699,9 +684,6 @@ gst_v4l2_codec_h264_enc_set_format (GstVideoEncoder * encoder, return FALSE; } - gst_v4l2_codec_h264_enc_get_qp_range (self->encoder, &self->qp_min, - &self->qp_max); - gst_v4l2_codec_h264_enc_init_sps_pps (self, state); return TRUE; @@ -911,6 +893,7 @@ gst_v4l2_codec_h264_enc_fill_encode_params (GstH264Encoder * encoder, self->encode_params.cabac_init_idc = self->cabac_init_idc; self->encode_params.pic_init_qp_minus26 = self->pps.pic_init_qp_minus26; + self->encode_params.chroma_qp_index_offset = self->pps.chroma_qp_index_offset; self->encode_params.disable_deblocking_filter_idc = 0; } @@ -922,21 +905,9 @@ gst_v4l2_codec_h264_enc_fill_encode_rc (GstH264Encoder * encoder, GstV4l2CodecH264Enc *self = GST_V4L2_CODEC_H264_ENC (encoder); /* Rate Control */ - self->encode_rc.qp = self->pps.pic_init_qp_minus26 + 26; //encoder->rc.qp; - self->encode_rc.qp_min = self->qp_min; - self->encode_rc.qp_max = self->qp_max; -} - -static guint -gst_v4l2_codec_h264_enc_check_qp_range (GstV4l2CodecH264Enc * self, - GstH264Frame * h264_frame) -{ - if (h264_frame->quality > self->qp_max) - return self->qp_max; - if (h264_frame->quality < self->qp_min) - return self->qp_min; - - return h264_frame->quality; + self->encode_rc.qp = h264_frame->quality; + self->encode_rc.qp_min = 0; + self->encode_rc.qp_max = 51; } static GstFlowReturn @@ -988,6 +959,9 @@ gst_v4l2_codec_h264_enc_encode_frame (GstH264Encoder * encoder, goto done; } + GST_DEBUG_OBJECT (self, "encode h264 frame with quality = %d", + h264_frame->quality); + request = gst_v4l2_encoder_alloc_request (self->encoder, frame->system_frame_number, frame->input_buffer, frame->output_buffer); diff --git a/sys/v4l2codecs/gstv4l2encoder.c b/sys/v4l2codecs/gstv4l2encoder.c index 85f0457..27f03e9 100644 --- a/sys/v4l2codecs/gstv4l2encoder.c +++ b/sys/v4l2codecs/gstv4l2encoder.c @@ -1520,28 +1520,3 @@ 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; -} -- 2.25.1