meta-digi/meta-digi-arm/dynamic-layers/stm-st-stm32mp/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0056-v4l2codecs-h264enc-Fix...

363 lines
14 KiB
Diff

From e3f07a8e64dcd406b6665a7bce125efdf603efb9 Mon Sep 17 00:00:00 2001
From: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Date: Wed, 15 Nov 2023 11:31:14 -0500
Subject: [PATCH 56/68] v4l2codecs: h264enc: Fix indentation
Upstream-Status: Pending
---
sys/v4l2codecs/gstv4l2codech264enc.c | 157 ++++++++++++---------------
1 file changed, 69 insertions(+), 88 deletions(-)
diff --git a/sys/v4l2codecs/gstv4l2codech264enc.c b/sys/v4l2codecs/gstv4l2codech264enc.c
index e7a6e07..6bf249a 100644
--- a/sys/v4l2codecs/gstv4l2codech264enc.c
+++ b/sys/v4l2codecs/gstv4l2codech264enc.c
@@ -45,12 +45,11 @@ enum
#define GST_PAD_SINK_FORMATS "{NV12, YUY2, I420}"
static GstStaticPadTemplate sink_template =
- GST_STATIC_PAD_TEMPLATE(GST_VIDEO_ENCODER_SINK_NAME,
- GST_PAD_SINK, GST_PAD_ALWAYS,
- GST_STATIC_CAPS(GST_VIDEO_CAPS_MAKE(GST_PAD_SINK_FORMATS)
- ", colorimetry= {bt601,bt709,bt601-full-range,bt709-full-range}"
- )
- );
+GST_STATIC_PAD_TEMPLATE (GST_VIDEO_ENCODER_SINK_NAME,
+ GST_PAD_SINK, GST_PAD_ALWAYS,
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE (GST_PAD_SINK_FORMATS)
+ ", colorimetry= {bt601,bt709,bt601-full-range,bt709-full-range}")
+ );
static GstStaticPadTemplate src_template =
GST_STATIC_PAD_TEMPLATE (GST_VIDEO_ENCODER_SRC_NAME,
@@ -157,13 +156,7 @@ gst_v4l2_codec_h264_enc_api_check (GstV4l2Encoder * encoder)
}, {
SET_ID (V4L2_CID_STATELESS_H264_ENCODE_RC),
.size = sizeof(struct v4l2_ctrl_h264_encode_rc),
- // }, {
- // SET_ID (V4L2_CID_STATELESS_H264_SPS),
- // .size = sizeof(struct v4l2_ctrl_h264_sps),
- // }, {
- // SET_ID (V4L2_CID_STATELESS_H264_PPS),
- // .size = sizeof(struct v4l2_ctrl_h264_pps),
- },
+ }
};
#undef SET_ID
/* *INDENT-ON* */
@@ -324,7 +317,7 @@ gst_v4l2_codec_h264_enc_buffers_allocation (GstVideoEncoder * encoder)
static gboolean
gst_v4l2_codec_h264_enc_set_codec_data (GstVideoEncoder * encoder,
- GstBuffer *codec_data, guint *data_size)
+ GstBuffer * codec_data, guint * data_size)
{
GstV4l2CodecH264Enc *self = GST_V4L2_CODEC_H264_ENC (encoder);
@@ -362,7 +355,7 @@ gst_v4l2_codec_h264_enc_set_codec_data (GstVideoEncoder * encoder,
}
static guint8
-get_sps_aspect_ratio_idc(guint par_n, guint par_d)
+get_sps_aspect_ratio_idc (guint par_n, guint par_d)
{
if (par_n == 1 && par_d == 1)
return 1;
@@ -397,7 +390,7 @@ get_sps_aspect_ratio_idc(guint par_n, guint par_d)
else if (par_n == 2 && par_d == 1)
return 16;
else
- return 0; // Extended_SAR for custom ratios
+ return 0; // Extended_SAR for custom ratios
}
/* Begin of code taken from VA plugin */
@@ -412,9 +405,9 @@ typedef struct
int MaxCPB;
int MinCr;
} GstVaH264LevelLimits;
-/* *INDENT-OFF* */
static const GstVaH264LevelLimits _va_h264_level_limits[] = {
+ /* *INDENT-OFF* */
/* level idc MaxMBPS MaxFS MaxDpbMbs MaxBR MaxCPB MinCr */
{"1", GST_H264_LEVEL_L1, 1485, 99, 396, 64, 175, 2},
{"1b", GST_H264_LEVEL_L1B, 1485, 99, 396, 128, 350, 2},
@@ -436,32 +429,33 @@ static const GstVaH264LevelLimits _va_h264_level_limits[] = {
{"6", GST_H264_LEVEL_L6, 4177920, 139264, 696320, 240000, 240000, 2},
{"6.1", GST_H264_LEVEL_L6_1, 8355840, 139264, 696320, 480000, 480000, 2},
{"6.2", GST_H264_LEVEL_L6_2, 16711680, 139264, 696320, 800000, 800000, 2},
+ /* *INDENT-ON* */
};
-/* *INDENT-ON* */
+
/* Enf of code taken from VA Plugin */
// Recursive function to find the greatest common divisor
static gint
-gcd(int a, int b)
+gcd (int a, int b)
{
if (b == 0)
return a;
- return gcd(b, a % b);
+ return gcd (b, a % b);
}
static gint
-find_time_scale_multiplier(int fps_d)
+find_time_scale_multiplier (int fps_d)
{
guint base_value = 1000;
- return (fps_d * base_value) / gcd(fps_d, base_value);
+ return (fps_d * base_value) / gcd (fps_d, base_value);
}
static void
-gst_v4l2_codec_h264_enc_init_sps_pps(GstV4l2CodecH264Enc *self,
+gst_v4l2_codec_h264_enc_init_sps_pps (GstV4l2CodecH264Enc * self,
GstVideoCodecState * state)
{
- memset(&self->sps, 0, sizeof(self->sps));
- memset(&self->sps, 0, sizeof(self->pps));
+ memset (&self->sps, 0, sizeof (self->sps));
+ memset (&self->sps, 0, sizeof (self->pps));
/* SPS */
self->sps.profile_idc = 66;
@@ -470,7 +464,7 @@ gst_v4l2_codec_h264_enc_init_sps_pps(GstV4l2CodecH264Enc *self,
// sps.seq_parameter_set_id = 0; // TODO: Set it properly
- self->sps.chroma_format_idc = 1; /* YUV 4:2:0 */
+ self->sps.chroma_format_idc = 1; /* YUV 4:2:0 */
self->sps.pic_width_in_mbs_minus1 = self->width_mbs - 1;
self->sps.pic_height_in_map_units_minus1 = self->height_mbs - 1;
@@ -492,114 +486,100 @@ gst_v4l2_codec_h264_enc_init_sps_pps(GstV4l2CodecH264Enc *self,
// Calculate lowest acceptable level
GstStructure *structure;
gint fps_n, fps_d;
- structure = gst_caps_get_structure(state->caps, 0);
- gst_structure_get_fraction(structure, "framerate", &fps_n, &fps_d);
- gint n_levels = sizeof(_va_h264_level_limits) / sizeof(_va_h264_level_limits[0]);
+ structure = gst_caps_get_structure (state->caps, 0);
+ gst_structure_get_fraction (structure, "framerate", &fps_n, &fps_d);
+ gint n_levels =
+ sizeof (_va_h264_level_limits) / sizeof (_va_h264_level_limits[0]);
GValue bitrate = G_VALUE_INIT;
- g_object_get_property(G_OBJECT(&self->parent), "bitrate", &bitrate);
- self->targeted_bitrate = g_value_get_uint64(&bitrate);
+ g_object_get_property (G_OBJECT (&self->parent), "bitrate", &bitrate);
+ self->targeted_bitrate = g_value_get_uint64 (&bitrate);
int MaxBR = self->targeted_bitrate;
int FS = self->width * self->height / 256;
- int MBPS = FS * fps_n / fps_d; // Assuming each macroblock is 16x16
+ int MBPS = FS * fps_n / fps_d; // Assuming each macroblock is 16x16
int DpbMbs = FS;
int CPB = MaxBR;
int CR = fps_n / fps_d;
gint lowest_level = 0;
- for (; lowest_level < n_levels; ++lowest_level)
- {
+ for (; lowest_level < n_levels; ++lowest_level) {
const GstVaH264LevelLimits *level = &_va_h264_level_limits[lowest_level];
- if (MBPS <= level->MaxMBPS && FS <= level->MaxFS && DpbMbs <= level->MaxDpbMbs &&
- MaxBR <= level->MaxBR && CPB <= level->MaxCPB && CR >= level->MinCr)
- {
+ if (MBPS <= level->MaxMBPS && FS <= level->MaxFS
+ && DpbMbs <= level->MaxDpbMbs && MaxBR <= level->MaxBR
+ && CPB <= level->MaxCPB && CR >= level->MinCr) {
break;
}
}
self->sps.level_idc = _va_h264_level_limits[lowest_level].idc;
- if (self->sps.level_idc == GST_H264_LEVEL_L1B)
- {
+ if (self->sps.level_idc == GST_H264_LEVEL_L1B) {
self->sps.constraint_set3_flag = 1;
}
- GST_DEBUG_OBJECT(self, "width:%d height:%d targeted_bitrate:%ld",
- self->height, self->height, self->targeted_bitrate);
- GST_DEBUG_OBJECT(self, "MBPS=%d,FS=%d,DpbMbs=%d,MaxBR=%d,CPB=%d,CR=%d",
- MBPS, FS, DpbMbs, MaxBR, CPB, CR);
- GST_DEBUG_OBJECT(self, "level_idc: %d", self->sps.level_idc);
+ GST_DEBUG_OBJECT (self, "width:%d height:%d targeted_bitrate:%ld",
+ self->height, self->height, self->targeted_bitrate);
+ GST_DEBUG_OBJECT (self, "MBPS=%d,FS=%d,DpbMbs=%d,MaxBR=%d,CPB=%d,CR=%d",
+ MBPS, FS, DpbMbs, MaxBR, CPB, CR);
+ GST_DEBUG_OBJECT (self, "level_idc: %d", self->sps.level_idc);
/* Crop unaligned videos */
- if (self->width & 15 || self->height & 15)
- {
- static const guint SubWidthC[] = {1, 2, 2, 1};
- static const guint SubHeightC[] = {1, 2, 1, 1};
+ if (self->width & 15 || self->height & 15) {
+ static const guint SubWidthC[] = { 1, 2, 2, 1 };
+ static const guint SubHeightC[] = { 1, 2, 1, 1 };
const guint CropUnitX = SubWidthC[self->sps.chroma_format_idc];
const guint CropUnitY = SubHeightC[self->sps.chroma_format_idc] *
- (2 - self->sps.frame_mbs_only_flag);
+ (2 - self->sps.frame_mbs_only_flag);
self->sps.frame_cropping_flag = 1;
self->sps.frame_crop_left_offset = 0;
self->sps.frame_crop_right_offset = (16 * self->width_mbs -
- self->width) /
- CropUnitX;
+ self->width) / CropUnitX;
self->sps.frame_crop_top_offset = 0;
self->sps.frame_crop_bottom_offset = (16 * self->height_mbs -
- self->height) /
- CropUnitY;
+ self->height) / CropUnitY;
}
-
-
// set colorimetry
const gchar *colorimetry;
- colorimetry = gst_structure_get_string(structure, "colorimetry");
+ colorimetry = gst_structure_get_string (structure, "colorimetry");
- if (colorimetry)
- {
+ if (colorimetry) {
self->sps.vui_parameters_present_flag = 1;
self->sps.vui_parameters.colour_description_present_flag = 1;
- if ((strcmp(colorimetry, "bt709") == 0) ||
- (strcmp(colorimetry, "bt709-full-range") == 0))
- {
+ if ((strcmp (colorimetry, "bt709") == 0) ||
+ (strcmp (colorimetry, "bt709-full-range") == 0)) {
self->sps.vui_parameters.colour_primaries = 1;
self->sps.vui_parameters.transfer_characteristics = 1;
self->sps.vui_parameters.matrix_coefficients = 1;
- if (strcmp(colorimetry, "bt709-full-range") == 0)
- {
+ if (strcmp (colorimetry, "bt709-full-range") == 0) {
self->sps.vui_parameters.video_full_range_flag = 1;
}
- }
- else if ((strcmp(colorimetry, "bt601") == 0) ||
- (strcmp(colorimetry, "bt601-full-range") == 0))
- {
+ } else if ((strcmp (colorimetry, "bt601") == 0) ||
+ (strcmp (colorimetry, "bt601-full-range") == 0)) {
self->sps.vui_parameters.colour_primaries = 6;
self->sps.vui_parameters.transfer_characteristics = 6;
self->sps.vui_parameters.matrix_coefficients = 6;
- if (strcmp(colorimetry, "bt601-full-range") == 0)
- {
+ if (strcmp (colorimetry, "bt601-full-range") == 0) {
self->sps.vui_parameters.video_full_range_flag = 1;
}
}
}
-
// set aspect ratio
gint par_n, par_d;
- if (gst_structure_get_fraction(structure, "pixel-aspect-ratio", &par_n, &par_d))
- {
+ if (gst_structure_get_fraction (structure, "pixel-aspect-ratio", &par_n,
+ &par_d)) {
self->sps.vui_parameters.aspect_ratio_info_present_flag = 1;
- self->sps.vui_parameters.aspect_ratio_idc = get_sps_aspect_ratio_idc(par_n, par_d);
- if (self->sps.vui_parameters.aspect_ratio_idc == 255)
- {
+ self->sps.vui_parameters.aspect_ratio_idc =
+ get_sps_aspect_ratio_idc (par_n, par_d);
+ if (self->sps.vui_parameters.aspect_ratio_idc == 255) {
self->sps.vui_parameters.sar_width = par_n;
self->sps.vui_parameters.sar_height = par_d;
}
}
-
// set Frame rate
- if (gst_structure_get_fraction(structure, "framerate", &fps_n, &fps_d))
- {
+ if (gst_structure_get_fraction (structure, "framerate", &fps_n, &fps_d)) {
self->sps.vui_parameters.timing_info_present_flag = 1;
self->sps.vui_parameters.fixed_frame_rate_flag = 1; // Only supports fixed frame rate for now
- gint multiplier = find_time_scale_multiplier(fps_d);
+ gint multiplier = find_time_scale_multiplier (fps_d);
gint time_scale = fps_n * multiplier;
self->sps.vui_parameters.time_scale = time_scale;
- self->sps.vui_parameters.num_units_in_tick = time_scale / (2 * fps_n / fps_d );
+ self->sps.vui_parameters.num_units_in_tick =
+ time_scale / (2 * fps_n / fps_d);
}
/* PPS */
@@ -665,8 +645,8 @@ gst_v4l2_codec_h264_enc_set_format (GstVideoEncoder * encoder,
gst_video_codec_state_unref (self->output_state);
caps = gst_caps_new_simple ("video/x-h264",
- "stream-format", G_TYPE_STRING, "byte-stream",
- "alignment", G_TYPE_STRING, "nal", NULL);
+ "stream-format", G_TYPE_STRING, "byte-stream",
+ "alignment", G_TYPE_STRING, "nal", NULL);
self->output_state =
gst_video_encoder_set_output_state (GST_VIDEO_ENCODER (self),
@@ -690,7 +670,7 @@ gst_v4l2_codec_h264_enc_set_format (GstVideoEncoder * encoder,
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);
+ gst_v4l2_codec_h264_enc_init_sps_pps (self, state);
return TRUE;
}
@@ -882,7 +862,8 @@ gst_v4l2_codec_h264_enc_fill_encode_params (GstH264Encoder * encoder,
self->encode_params.nalu_type = V4L2_H264_NAL_CODED_SLICE_NON_IDR_PIC;
self->encode_params.reference_ts = self->reference_timestamp;
self->encode_params.frame_num++;
- self->encode_params.frame_num %= (1 << (self->sps.log2_max_frame_num_minus4 + 4));
+ self->encode_params.frame_num %=
+ (1 << (self->sps.log2_max_frame_num_minus4 + 4));
self->encode_params.nalu_type = 1;
self->encode_params.nal_reference_idc = 2;
break;
@@ -906,7 +887,7 @@ gst_v4l2_codec_h264_enc_fill_encode_rc (GstH264Encoder * encoder,
//h264_rate_control_step(encoder);
- self->encode_rc.qp = self->pps.pic_init_qp_minus26 + 26;//encoder->rc.qp;
+ 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;
}
@@ -949,8 +930,8 @@ gst_v4l2_codec_h264_enc_encode_frame (GstH264Encoder * encoder,
gst_buffer_resize (codec_data, 0, data_size);
}
- /* *INDENT-OFF* */
struct v4l2_ext_control control[] = {
+ /* *INDENT-OFF* */
{
.id = V4L2_CID_STATELESS_H264_ENCODE_PARAMS,
.ptr = &self->encode_params,
@@ -960,8 +941,8 @@ gst_v4l2_codec_h264_enc_encode_frame (GstH264Encoder * encoder,
.ptr = &self->encode_rc,
.size = sizeof (self->encode_rc),
},
+ /* *INDENT-ON* */
};
- /* *INDENT-ON* */
GST_DEBUG_OBJECT (self, "encode h264 frame with quality = %d",
h264_frame->quality);
@@ -1008,7 +989,7 @@ gst_v4l2_codec_h264_enc_encode_frame (GstH264Encoder * encoder,
}
}
- if (!gst_v4l2_encoder_request_set_done(request, &bytesused, &flags)) {
+ if (!gst_v4l2_encoder_request_set_done (request, &bytesused, &flags)) {
GST_ELEMENT_ERROR (self, RESOURCE, WRITE,
("Driver did not ack the request."), (NULL));
goto done;
--
2.25.1