From e3f07a8e64dcd406b6665a7bce125efdf603efb9 Mon Sep 17 00:00:00 2001 From: Nicolas Dufresne 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