meta-digi/meta-digi-arm/dynamic-layers/stm-st-stm32mp/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0063-v4l2codecs-h264dec-Rem...

143 lines
4.5 KiB
Diff

From 88f6aeb90e1f3138eaa4f1ffd44d34b51dd43192 Mon Sep 17 00:00:00 2001
From: Nicolas Dufresne <nicolas.dufresne@collabora.com>
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