STRUCT V4L2_CTRL_HEVC_PPS(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ‘‘ struct v4l2_ctrl_hevc_pps(9) πŸ‘‘

from the Kernel API Manual, bestie πŸ’–

okay so picture this: it's a whole struct, right, and its entire job is to hold the ITU-T Rec. H.265 Picture parameter set. yes that's the NAME. that's literally it. it's giving "PPS but make it kernel" ✨


πŸ¦‹ SYNOPSIS πŸ¦‹

struct v4l2_ctrl_hevc_pps {
    __u8 pic_parameter_set_id;
    __u8 num_extra_slice_header_bits;
    __u8 num_ref_idx_l0_default_active_minus1;
    __u8 num_ref_idx_l1_default_active_minus1;
    __s8 init_qp_minus26;
    __u8 diff_cu_qp_delta_depth;
    __s8 pps_cb_qp_offset;
    __s8 pps_cr_qp_offset;
    __u8 num_tile_columns_minus1;
    __u8 num_tile_rows_minus1;
    __u8 column_width_minus1[20];
    __u8 row_height_minus1[22];
    __s8 pps_beta_offset_div2;
    __s8 pps_tc_offset_div2;
    __u8 log2_parallel_merge_level_minus2;
    __u8 reserved;
    __u64 flags;
 };

like, look at her. she's beautiful. and every single field gets its own little moment, so let's get into it 🫢


πŸ’… Members πŸ’…

  • pic_parameter_set_id β€” the whole identity of this PPS ngl, it's what other syntax elements point at when they need to reference her. main character energy fr πŸ‘‘
  • num_extra_slice_header_bits β€” tells you how many extra slice header bits are chillin' in the slice header RBSP for coded pictures that refer to this PPS. extra. bits. periodt ✨
  • num_ref_idx_l0_default_active_minus1 β€” bestie this value plus 1 gives you the inferred value of num_ref_idx_l0_active_minus1. the minus one is right there in the name, it's not a typo, i promise 😭
  • num_ref_idx_l1_default_active_minus1 β€” same deal, l1 edition: this value plus 1 specifies the inferred value of num_ref_idx_l1_active_minus1 πŸŽ€
  • init_qp_minus26 β€” this value plus 26 specifies the initial value of SliceQp Y for every slice that refers to the PPS. yes it's signed, yes that's on purpose πŸ’œ
  • diff_cu_qp_delta_depth β€” specifies the difference between the luma coding tree block size and the minimum luma coding block size of coding units that convey cu_qp_delta_abs and cu_qp_delta_sign_flag. say that five times fast, i dare you πŸ™ˆ
  • pps_cb_qp_offset β€” specify the offsets to the luma quantization parameter Cb πŸ“
  • pps_cr_qp_offset β€” specify the offsets to the luma quantization parameter Cr 🌸
  • num_tile_columns_minus1 β€” this value plus 1 specifies the number of tile columns partitioning the picture. tile columns!! we love a grid moment 🧚
  • num_tile_rows_minus1 β€” this value plus 1 specifies the number of tile rows partitioning the picture. rows and columns, a matched set, iconic 🌈
  • column_width_minus1 β€” this is an array, column_width_minus1[20] to be exact, and each value plus 1 specifies the width of the each tile column in units of coding tree blocks ⭐
  • row_height_minus1 β€” also an array, row_height_minus1[22], and each value plus 1 specifies the height of the each tile row in units of coding tree blocks. note the sizes: 20 and 22, they are NOT the same, do not assume πŸ’€
  • pps_beta_offset_div2 β€” specify the default deblocking parameter offsets for beta divided by 2 πŸ’…
  • pps_tc_offset_div2 β€” specify the default deblocking parameter offsets for tC divided by 2 πŸ”₯
  • log2_parallel_merge_level_minus2 β€” this value plus 2 specifies the value of the variable Log2ParMrgLevel. plus TWO this time, not plus one, keep up bestie 😀
  • reserved β€” padding field. Should be zeroed by applications. that's not a suggestion, that's a vibe check and you will fail it if you leave garbage in there πŸ™ˆ
  • flags β€” go see V4L2_HEVC_PPS_FLAG_{}. that's the whole description, she's mysterious like that πŸŽ€
ngl the array indices are the kind of thing that'll bite you at 3am, so double-check column_width_minus1[20] vs row_height_minus1[22] before you ship 😭

πŸ¦‹ SEE ALSO πŸ¦‹

the whole friend group showed up, ok:

  • Kernel file ./include/uapi/linux/v4l2-controls.h enum
  • v4l2_mpeg_video_av1_profile(9)
  • enum v4l2_mpeg_video_av1_level(9)
  • enum v4l2_stateless_h264_decode_mode(9)
  • enum v4l2_stateless_h264_start_code(9)
  • struct v4l2_ctrl_h264_sps(9)
  • struct v4l2_ctrl_h264_pps(9)
  • struct v4l2_ctrl_h264_scaling_matrix(9)
  • struct v4l2_ctrl_h264_pred_weights(9)
  • struct v4l2_h264_reference(9)
  • struct v4l2_ctrl_h264_slice_params(9)
  • struct v4l2_h264_dpb_entry(9)
  • struct v4l2_ctrl_h264_decode_params(9)
  • struct v4l2_ctrl_fwht_params(9)
  • struct v4l2_vp8_segment(9)
  • struct v4l2_vp8_loop_filter(9)
  • struct v4l2_vp8_quantization(9)
  • struct v4l2_vp8_entropy(9)
  • struct v4l2_vp8_entropy_coder_state(9)
  • struct v4l2_ctrl_vp8_frame(9)
  • struct v4l2_ctrl_mpeg2_sequence(9)
  • struct v4l2_ctrl_mpeg2_picture(9)
  • struct v4l2_ctrl_mpeg2_quantisation(9)
  • struct v4l2_ctrl_hevc_sps(9)
  • struct v4l2_hevc_dpb_entry(9)
  • struct v4l2_hevc_pred_weight_table(9)
  • struct v4l2_ctrl_hevc_slice_params(9)
  • struct v4l2_ctrl_hevc_decode_params(9)
  • struct v4l2_ctrl_hevc_scaling_matrix(9)
  • struct v4l2_vp9_loop_filter(9)
  • struct v4l2_vp9_quantization(9)
  • struct v4l2_vp9_segmentation(9)
  • struct v4l2_ctrl_vp9_frame(9)
  • struct v4l2_vp9_mv_probs(9)
  • struct v4l2_ctrl_vp9_compressed_hdr(9)
  • struct v4l2_ctrl_av1_sequence(9)
  • struct v4l2_ctrl_av1_tile_group_entry(9)
  • enum v4l2_av1_warp_model(9)
  • enum v4l2_av1_reference_frame(9)
  • struct v4l2_av1_global_motion(9)
  • enum v4l2_av1_frame_restoration_type(9)
  • struct v4l2_av1_loop_restoration(9)
  • struct v4l2_av1_cdef(9)
  • enum v4l2_av1_segment_feature(9)
  • struct v4l2_av1_segmentation(9)
  • struct v4l2_av1_loop_filter(9)
  • struct v4l2_av1_quantization(9)
  • struct v4l2_av1_tile_info(9)
  • enum v4l2_av1_frame_type(9)
  • enum v4l2_av1_interpolation_filter(9)
  • enum v4l2_av1_tx_mode(9)
  • struct v4l2_ctrl_av1_frame(9)
  • struct v4l2_ctrl_av1_film_grain(9)

and that's the whole page, bestie!! this one lives in ./include/uapi/linux and the version stamp says October 2026 β€” so like, future-coded of her fr fr πŸ’– thanks for reading, go zero out your reserved field, mwah πŸ’‹βœ¨

πŸ“¦ where this page comes from