From patchwork Wed Mar 20 23:17:30 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 47272 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:3a4a:b0:1a3:31a3:7958 with SMTP id zu10csp219727pzb; Wed, 20 Mar 2024 16:17:48 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUEdt7QJEPG2E1djJEzLtn/S7MkHwvO0KLEc8njX8w4jIaYyLaYKGoLfgOfOswn7x15cKROqqIeRk/7LJU28QqrsiYEP8JI4JRfSQ== X-Google-Smtp-Source: AGHT+IEqjY/KTBWdG6niTb3f4t/+agBKHhlSx7bAw1UeelkS6mX22sNj7RWGn3gGtuIvaxaAozXD X-Received: by 2002:a19:5e19:0:b0:513:8a39:e0d9 with SMTP id s25-20020a195e19000000b005138a39e0d9mr2173274lfb.64.1710976668436; Wed, 20 Mar 2024 16:17:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1710976668; cv=none; d=google.com; s=arc-20160816; b=rfmI3vMXXM3aBsY37DwfELIyLtyWX/8TC1VrbDbAurR6F88dIDTe4ElmpybkR2RQQE kGZarBl8Enai7Znj/fbFOFYv99xmjHFPBr96gjYOb3H5SZDHEmNW+WJ08d1asz//5rcF yVTkJWKzQzr0kXK1GAzrsrizDFvZdjzDepmZBdN37khrDI5L6LUtyK+lYxO+P9RAtIxa FLyuQWSiRJlrxkfWIZswk9Hi7DtpwyWlHJjzOmO1asEt/jZ4Nhy64TxyQ7wJHpY7tmsy 26KyuiJdUR7zRvR0qy5THTi0HKMwb+Gh+A550WkT40g7sRWm+rqGNFrYELfIK4yb2x/e IXMA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=C1vlo7XHNluHc1ertbVMGK2TLLVQaFY93dvHM+DsDCY=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=jZMCqwnQPTaThWL+gr5HGUoyOewA/up1Oe86gr4BCol9F1hdgU4rkJ1/YMLqgyv0jm yCvtzi7RggYWrAkSJARjTE0FfC7dUDp7Dw/Y9sHrYuAgfRa9ymaBBTa5AAs5LknH/MmH R8Y9zjKRefWgEpKZtz/SGlVLA3IcSyUHMlJNL9vCNyQ7dE1Uh6BNtXbITIT5kHhSggZo vL7GsEX7ioq7guyR10LUgahCvvH1BHNqiH2dQ4Xt2kdYlNYaDVvi/kCcfhpvpNRkCBpl Q0TVjnG4cf/VHieUyXExHhozCoIwIUz6mn/AkswUSX2JDDetJ0Ta6dOj4gbpA5T9c0XT 732A==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=aaqc3uUX; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id v17-20020a170906565100b00a46f59fcb42si1037431ejr.980.2024.03.20.16.17.48; Wed, 20 Mar 2024 16:17:48 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=aaqc3uUX; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DF1E568D519; Thu, 21 Mar 2024 01:17:38 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4D26968D503 for ; Thu, 21 Mar 2024 01:17:30 +0200 (EET) Received: by mail-pl1-f173.google.com with SMTP id d9443c01a7336-1e04ac200a6so3457465ad.1 for ; Wed, 20 Mar 2024 16:17:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710976647; x=1711581447; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=5qqKsYaEKTsmMihm1GrE/nV7OrGM4zDr49h3w1OsWLI=; b=aaqc3uUXKW437pqYJ0zEWKWuJ8BQxeJwh8nxSImEEgK4m7LnAxoWQFI8dq/5my1tMP O7xD309uJFg/A0tlj3rYsr09SRgMQpcJ02QTOt3ntOvhjkIEkzzy73QnE9X5Q5KkOh/C X5NvhLqGW89Zp64mZ6u+V1SxVoBVuEVlHejuE6tqZQOzVung5oCxxq4quLANahhuE0Lf K95Lp7dCjqBOtEt2+qCNZhQmgbf37ta25TtG+oyRb06HaxEx27W2buPWQqjXXeJocysd XpBFKoRosomr/mp273WuLwVBZZeX9IQnRnmj8yrBdL6RfEddzBF4plJhRznmUyXBa/k8 sxLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710976647; x=1711581447; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5qqKsYaEKTsmMihm1GrE/nV7OrGM4zDr49h3w1OsWLI=; b=oaAKXNyTXu5x7znGFe1wp0XcxlgutoF5Xd/a/hkQ1pxBitGvDHHwyoH/ZfeMYHrw2i 67oa85FZkp8g7xnI66gVfdiWeLvg/BYDvsZBwNknhF0S/esK7rcMrlujvININ/UtminY Q0jya6QfEcO0Qb1NobDhtXHCruY1eCqRcHhUZ9/nlNmka51ekdLFcJzNP6zC5OHbiIrh Ygad+YKS2+I4yC9v/IqB0vKVcpD4aq2AizwWRjIWqekkGktS5oyoUoSahIye2fORZHQL qYNnVJfLW7wULZPqYIGyX4SID2BUGVoWULCL+VzSoWpVuKZhQSwWHAZkjbngeoH9nSey VyLg== X-Gm-Message-State: AOJu0YyaTx4YJzPc2qhVYKlEDu7BJLbrF6KAII9PqIzUIz11ZcirvzNq Z1S/cFpz92r9D+YYLxoiJxh48pc8B5NtAJ4uYI49r6TvVfspdrrP2UMsSEAH X-Received: by 2002:a17:902:ec8e:b0:1e0:1f53:a164 with SMTP id x14-20020a170902ec8e00b001e01f53a164mr1833707plg.0.1710976647494; Wed, 20 Mar 2024 16:17:27 -0700 (PDT) Received: from localhost.localdomain ([190.194.167.233]) by smtp.gmail.com with ESMTPSA id a11-20020a170902eccb00b001def1ad9314sm11820518plh.245.2024.03.20.16.17.26 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 Mar 2024 16:17:27 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 20 Mar 2024 20:17:30 -0300 Message-ID: <20240320231730.27666-2-jamrial@gmail.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240320231730.27666-1-jamrial@gmail.com> References: <20240320231730.27666-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/2] avcodec/hevc_ps: use bitfields to slightly reduce the size of some structs X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Sm8ROCvOI06i Signed-off-by: James Almer --- libavcodec/hevc_ps.h | 190 +++++++++++++++++++++---------------------- 1 file changed, 91 insertions(+), 99 deletions(-) diff --git a/libavcodec/hevc_ps.h b/libavcodec/hevc_ps.h index 88d6f617b5..9cdec9b6c1 100644 --- a/libavcodec/hevc_ps.h +++ b/libavcodec/hevc_ps.h @@ -48,10 +48,10 @@ typedef struct HEVCHdrFlagParams { typedef struct HEVCHdrParams { HEVCHdrFlagParams flags; - uint8_t nal_hrd_parameters_present_flag; - uint8_t vcl_hrd_parameters_present_flag; - uint8_t sub_pic_hrd_params_present_flag; - uint8_t sub_pic_cpb_params_in_pic_timing_sei_flag; + uint8_t nal_hrd_parameters_present_flag : 1; + uint8_t vcl_hrd_parameters_present_flag : 1; + uint8_t sub_pic_hrd_params_present_flag : 1; + uint8_t sub_pic_cpb_params_in_pic_timing_sei_flag : 1; uint8_t tick_divisor_minus2; uint8_t du_cpb_removal_delay_increment_length_minus1; @@ -93,31 +93,28 @@ typedef struct HEVCWindow { typedef struct VUI { H2645VUI common; - - int neutra_chroma_indication_flag; - - int field_seq_flag; - int frame_field_info_present_flag; - - int default_display_window_flag; HEVCWindow def_disp_win; - int vui_timing_info_present_flag; uint32_t vui_num_units_in_tick; uint32_t vui_time_scale; - int vui_poc_proportional_to_timing_flag; int vui_num_ticks_poc_diff_one_minus1; - int vui_hrd_parameters_present_flag; - - int bitstream_restriction_flag; - int tiles_fixed_structure_flag; - int motion_vectors_over_pic_boundaries_flag; - int restricted_ref_pic_lists_flag; int min_spatial_segmentation_idc; int max_bytes_per_pic_denom; int max_bits_per_min_cu_denom; int log2_max_mv_length_horizontal; int log2_max_mv_length_vertical; + + uint8_t neutra_chroma_indication_flag : 1; + uint8_t field_seq_flag : 1; + uint8_t frame_field_info_present_flag : 1; + uint8_t default_display_window_flag : 1; + uint8_t vui_timing_info_present_flag : 1; + uint8_t vui_poc_proportional_to_timing_flag : 1; + uint8_t vui_hrd_parameters_present_flag : 1; + uint8_t bitstream_restriction_flag : 1; + uint8_t tiles_fixed_structure_flag : 1; + uint8_t motion_vectors_over_pic_boundaries_flag : 1; + uint8_t restricted_ref_pic_lists_flag : 1; } VUI; typedef struct PTLCommon { @@ -125,21 +122,21 @@ typedef struct PTLCommon { uint8_t tier_flag; uint8_t profile_idc; uint8_t profile_compatibility_flag[32]; - uint8_t progressive_source_flag; - uint8_t interlaced_source_flag; - uint8_t non_packed_constraint_flag; - uint8_t frame_only_constraint_flag; - uint8_t max_12bit_constraint_flag; - uint8_t max_10bit_constraint_flag; - uint8_t max_8bit_constraint_flag; - uint8_t max_422chroma_constraint_flag; - uint8_t max_420chroma_constraint_flag; - uint8_t max_monochrome_constraint_flag; - uint8_t intra_constraint_flag; - uint8_t one_picture_only_constraint_flag; - uint8_t lower_bit_rate_constraint_flag; - uint8_t max_14bit_constraint_flag; - uint8_t inbld_flag; + uint8_t progressive_source_flag : 1; + uint8_t interlaced_source_flag : 1; + uint8_t non_packed_constraint_flag : 1; + uint8_t frame_only_constraint_flag : 1; + uint8_t max_12bit_constraint_flag : 1; + uint8_t max_10bit_constraint_flag : 1; + uint8_t max_8bit_constraint_flag : 1; + uint8_t max_422chroma_constraint_flag : 1; + uint8_t max_420chroma_constraint_flag : 1; + uint8_t max_monochrome_constraint_flag : 1; + uint8_t intra_constraint_flag : 1; + uint8_t one_picture_only_constraint_flag : 1; + uint8_t lower_bit_rate_constraint_flag : 1; + uint8_t max_14bit_constraint_flag : 1; + uint8_t inbld_flag : 1; uint8_t level_idc; } PTLCommon; @@ -155,21 +152,22 @@ typedef struct HEVCVPS { unsigned int vps_id; HEVCHdrParams hdr[HEVC_MAX_LAYER_SETS]; - uint8_t vps_temporal_id_nesting_flag; + uint8_t vps_temporal_id_nesting_flag : 1; + uint8_t vps_sub_layer_ordering_info_present_flag : 1; + uint8_t vps_timing_info_present_flag : 1; + uint8_t vps_poc_proportional_to_timing_flag : 1; int vps_max_layers; int vps_max_sub_layers; ///< vps_max_temporal_layers_minus1 + 1 PTL ptl; - int vps_sub_layer_ordering_info_present_flag; - unsigned int vps_max_dec_pic_buffering[HEVC_MAX_SUB_LAYERS]; - unsigned int vps_num_reorder_pics[HEVC_MAX_SUB_LAYERS]; + + uint8_t vps_max_dec_pic_buffering[HEVC_MAX_SUB_LAYERS]; + uint8_t vps_num_reorder_pics[HEVC_MAX_SUB_LAYERS]; unsigned int vps_max_latency_increase[HEVC_MAX_SUB_LAYERS]; int vps_max_layer_id; int vps_num_layer_sets; ///< vps_num_layer_sets_minus1 + 1 - uint8_t vps_timing_info_present_flag; uint32_t vps_num_units_in_tick; uint32_t vps_time_scale; - uint8_t vps_poc_proportional_to_timing_flag; int vps_num_ticks_poc_diff_one; ///< vps_num_ticks_poc_diff_one_minus1 + 1 int vps_num_hrd_parameters; @@ -187,11 +185,17 @@ typedef struct ScalingList { typedef struct HEVCSPS { unsigned vps_id; int chroma_format_idc; - uint8_t separate_colour_plane_flag; + uint8_t separate_colour_plane_flag : 1; + uint8_t conformance_window_flag : 1; + uint8_t sublayer_ordering_info_flag : 1; + uint8_t temporal_id_nesting_flag : 1; + uint8_t sps_extension_present_flag : 1; + uint8_t scaling_list_enable_flag : 1; + uint8_t sps_temporal_mvp_enabled_flag : 1; + uint8_t sps_strong_intra_smoothing_enable_flag : 1; HEVCWindow output_window; - uint8_t conformance_window_flag; HEVCWindow pic_conf_win; HEVCHdrParams hdr; @@ -204,21 +208,17 @@ typedef struct HEVCSPS { unsigned int log2_max_poc_lsb; int pcm_enabled_flag; - uint8_t sublayer_ordering_info_flag; int max_sub_layers; struct { int max_dec_pic_buffering; int num_reorder_pics; int max_latency_increase; } temporal_layer[HEVC_MAX_SUB_LAYERS]; - uint8_t temporal_id_nesting_flag; int vui_present; VUI vui; PTL ptl; - uint8_t sps_extension_present_flag; - uint8_t scaling_list_enable_flag; ScalingList scaling_list; unsigned int nb_st_rps; @@ -239,8 +239,6 @@ typedef struct HEVCSPS { unsigned int log2_max_pcm_cb_size; uint8_t loop_filter_disable_flag; } pcm; - uint8_t sps_temporal_mvp_enabled_flag; - uint8_t sps_strong_intra_smoothing_enable_flag; unsigned int log2_min_cb_size; unsigned int log2_diff_max_min_coding_block_size; @@ -253,30 +251,29 @@ typedef struct HEVCSPS { int max_transform_hierarchy_depth_inter; int max_transform_hierarchy_depth_intra; - int sps_range_extension_flag; - int transform_skip_rotation_enabled_flag; - int transform_skip_context_enabled_flag; - int implicit_rdpcm_enabled_flag; - int explicit_rdpcm_enabled_flag; - int extended_precision_processing_flag; - int intra_smoothing_disabled_flag; - int high_precision_offsets_enabled_flag; - int persistent_rice_adaptation_enabled_flag; - int cabac_bypass_alignment_enabled_flag; - - int sps_multilayer_extension_flag; - int sps_3d_extension_flag; - - int sps_scc_extension_flag; - int sps_curr_pic_ref_enabled_flag; - int palette_mode_enabled_flag; + uint8_t sps_range_extension_flag : 1; + uint8_t transform_skip_rotation_enabled_flag : 1; + uint8_t transform_skip_context_enabled_flag : 1; + uint8_t implicit_rdpcm_enabled_flag : 1; + uint8_t explicit_rdpcm_enabled_flag : 1; + uint8_t extended_precision_processing_flag : 1; + uint8_t intra_smoothing_disabled_flag : 1; + uint8_t high_precision_offsets_enabled_flag : 1; + uint8_t persistent_rice_adaptation_enabled_flag : 1; + uint8_t cabac_bypass_alignment_enabled_flag : 1; + uint8_t sps_multilayer_extension_flag : 1; + uint8_t sps_3d_extension_flag : 1; + uint8_t sps_scc_extension_flag : 1; + uint8_t sps_curr_pic_ref_enabled_flag : 1; + uint8_t palette_mode_enabled_flag : 1; + uint8_t intra_boundary_filtering_disabled_flag : 1; + int palette_max_size; int delta_palette_max_predictor_size; int sps_palette_predictor_initializers_present_flag; int sps_num_palette_predictor_initializers; int sps_palette_predictor_initializer[3][HEVC_MAX_PALETTE_PREDICTOR_SIZE]; int motion_vector_resolution_control_idc; - int intra_boundary_filtering_disabled_flag; ///< coded frame dimension in various units int width; @@ -305,60 +302,55 @@ typedef struct HEVCPPS { unsigned int pps_id; unsigned int sps_id; ///< seq_parameter_set_id - uint8_t sign_data_hiding_flag; - - uint8_t cabac_init_present_flag; + uint8_t sign_data_hiding_flag : 1; + uint8_t cabac_init_present_flag : 1; + uint8_t pic_slice_level_chroma_qp_offsets_present_flag : 1; + uint8_t weighted_pred_flag : 1; + uint8_t weighted_bipred_flag : 1; + uint8_t output_flag_present_flag : 1; + uint8_t transquant_bypass_enable_flag : 1; + uint8_t dependent_slice_segments_enabled_flag : 1; + uint8_t tiles_enabled_flag : 1; + uint8_t entropy_coding_sync_enabled_flag : 1; + uint8_t constrained_intra_pred_flag : 1; + uint8_t transform_skip_enabled_flag : 1; + uint8_t cu_qp_delta_enabled_flag : 1; + uint8_t uniform_spacing_flag : 1; + uint8_t loop_filter_across_tiles_enabled_flag : 1; + uint8_t seq_loop_filter_across_slices_enabled_flag : 1; + uint8_t deblocking_filter_control_present_flag : 1; + uint8_t deblocking_filter_override_enabled_flag : 1; + uint8_t scaling_list_data_present_flag : 1; + uint8_t lists_modification_present_flag : 1; + uint8_t slice_header_extension_present_flag : 1; + uint8_t pps_extension_present_flag : 1; + uint8_t pps_range_extensions_flag : 1; + uint8_t pps_multilayer_extension_flag : 1; + uint8_t pps_3d_extension_flag : 1; + uint8_t pps_scc_extension_flag : 1; + uint8_t cross_component_prediction_enabled_flag : 1; + uint8_t chroma_qp_offset_list_enabled_flag : 1; int num_ref_idx_l0_default_active; ///< num_ref_idx_l0_default_active_minus1 + 1 int num_ref_idx_l1_default_active; ///< num_ref_idx_l1_default_active_minus1 + 1 int pic_init_qp_minus26; - uint8_t constrained_intra_pred_flag; - uint8_t transform_skip_enabled_flag; - - uint8_t cu_qp_delta_enabled_flag; int diff_cu_qp_delta_depth; int cb_qp_offset; int cr_qp_offset; - uint8_t pic_slice_level_chroma_qp_offsets_present_flag; - uint8_t weighted_pred_flag; - uint8_t weighted_bipred_flag; - uint8_t output_flag_present_flag; - uint8_t transquant_bypass_enable_flag; - - uint8_t dependent_slice_segments_enabled_flag; - uint8_t tiles_enabled_flag; - uint8_t entropy_coding_sync_enabled_flag; uint16_t num_tile_columns; ///< num_tile_columns_minus1 + 1 uint16_t num_tile_rows; ///< num_tile_rows_minus1 + 1 - uint8_t uniform_spacing_flag; - uint8_t loop_filter_across_tiles_enabled_flag; - - uint8_t seq_loop_filter_across_slices_enabled_flag; - - uint8_t deblocking_filter_control_present_flag; - uint8_t deblocking_filter_override_enabled_flag; uint8_t disable_dbf; int beta_offset; ///< beta_offset_div2 * 2 int tc_offset; ///< tc_offset_div2 * 2 - uint8_t scaling_list_data_present_flag; ScalingList scaling_list; - uint8_t lists_modification_present_flag; int log2_parallel_merge_level; ///< log2_parallel_merge_level_minus2 + 2 int num_extra_slice_header_bits; - uint8_t slice_header_extension_present_flag; uint8_t log2_max_transform_skip_block_size; - uint8_t pps_extension_present_flag; - uint8_t pps_range_extensions_flag; - uint8_t pps_multilayer_extension_flag; - uint8_t pps_3d_extension_flag; - uint8_t pps_scc_extension_flag; - uint8_t cross_component_prediction_enabled_flag; - uint8_t chroma_qp_offset_list_enabled_flag; uint8_t diff_cu_chroma_qp_offset_depth; uint8_t chroma_qp_offset_list_len_minus1; int8_t cb_qp_offset_list[6];