STRUCT DRM_DSC_PICTURE_PARAMETER_SET(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– struct drm_dsc_picture_parameter_set(9) πŸ’–

Kernel API Manual β€” okay bestie, this is the page for struct drm_dsc_picture_parameter_set, and it is literally 128 bytes of Picture Parameter Set. Yes, the whole vibe is β€œencoder tells decoder how the picture is packed.” Iconic.

πŸ’– NAME πŸ’–

struct drm_dsc_picture_parameter_set β€” Represents 128 bytes of Picture Parameter Set.

🌸 SYNOPSIS 🌸

struct drm_dsc_picture_parameter_set {
    u8 dsc_version;
    u8 pps_identifier;
    u8 pps_reserved;
    u8 pps_3;
    u8 pps_4;
    u8 bits_per_pixel_low;
    __be16 pic_height;
    __be16 pic_width;
    __be16 slice_height;
    __be16 slice_width;
    __be16 chunk_size;
    u8 initial_xmit_delay_high;
    u8 initial_xmit_delay_low;
    __be16 initial_dec_delay;
    u8 pps20_reserved;
    u8 initial_scale_value;
    __be16 scale_increment_interval;
    u8 scale_decrement_interval_high;
    u8 scale_decrement_interval_low;
    u8 pps26_reserved;
    u8 first_line_bpg_offset;
    __be16 nfl_bpg_offset;
    __be16 slice_bpg_offset;
    __be16 initial_offset;
    __be16 final_offset;
    u8 flatness_min_qp;
    u8 flatness_max_qp;
    __be16 rc_model_size;
    u8 rc_edge_factor;
    u8 rc_quant_incr_limit0;
    u8 rc_quant_incr_limit1;
    u8 rc_tgt_offset;
    u8 rc_buf_thresh[DSC_NUM_BUF_RANGES - 1];
    __be16 rc_range_parameters[DSC_NUM_BUF_RANGES];
    u8 native_422_420;
    u8 second_line_bpg_offset;
    __be16 nsl_bpg_offset;
    __be16 second_line_offset_adj;
    u32 pps_long_94_reserved;
    u32 pps_long_98_reserved;
    u32 pps_long_102_reserved;
    u32 pps_long_106_reserved;
    u32 pps_long_110_reserved;
    u32 pps_long_114_reserved;
    u32 pps_long_118_reserved;
    u32 pps_long_122_reserved;
    __be16 pps_short_126_reserved;
};

πŸ‘‘ Members πŸ‘‘

Sit tight, bestie β€” every member gets its moment.

  • dsc_version β€” PPS0[3:0] - dsc_version_minor: contains the minor version of DSC. PPS0[7:4] - dsc_version_major: contains the major version of DSC.
  • pps_identifier β€” PPS1[7:0] - application specific identifier that can be used to differentiate between different PPS tables.
  • pps_reserved β€” PPS2[7:0]- RESERVED Byte.
  • pps_3 β€” PPS3[3:0] - linebuf_depth: contains linebuffer bit depth used to generate the bitstream. (0x0 - 16 bits for DSC 1.2, 0x8 - 8 bits, 0xA - 10 bits, 0xB - 11 bits, 0xC - 12 bits, 0xD - 13 bits, 0xE - 14 bits for DSC1.2, 0xF - 14 bits for DSC 1.2.) PPS3[7:4] - bits_per_component: bits per component for the original pixels of the encoded picture. 0x0 = 16bpc (allowed only when dsc_version_minor = 0x2), 0x8 = 8bpc, 0xA = 10bpc, 0xC = 12bpc, 0xE = 14bpc (also allowed only when dsc_minor_version = 0x2).
  • pps_4 β€” PPS4[1:0] -These are the most significant 2 bits of compressed BPP bits_per_pixel[9:0] syntax element. PPS4[2] - vbr_enable: 0 = VBR disabled, 1 = VBR enabled. PPS4[3] - simple_422: indicates if decoder drops samples to reconstruct the 4:2:2 picture. PPS4[4] - Convert_rgb: indicates if DSC color space conversion is active. PPS4[5] - blobk_pred_enable: indicates if BP is used to code any groups in picture. PPS4[7:6] - Reseved bits.
  • bits_per_pixel_low β€” PPS5[7:0] - this indicates the lower significant 8 bits of the compressed BPP bits_per_pixel[9:0] element.
  • pic_height β€” PPS6[7:0], PPS7[7:0] -pic_height: specifies the number of pixel rows within the raster.
  • pic_width β€” PPS8[7:0], PPS9[7:0] - pic_width: number of pixel columns within the raster.
  • slice_height β€” PPS10[7:0], PPS11[7:0] - slice height in units of pixels.
  • slice_width β€” PPS12[7:0], PPS13[7:0] - slice width in terms of pixels.
  • chunk_size β€” PPS14[7:0], PPS15[7:0] - size in units of bytes of the chunks that are used for slice multiplexing.
  • initial_xmit_delay_high β€” PPS16[1:0] - most significant two bits of initial transmission delay. It specifies the number of pixel times that the encoder waits before transmitting data from its rate buffer. PPS16[7:2] - Reserved.
  • initial_xmit_delay_low β€” PPS17[7:0] - least significant 8 bits of initial transmission delay.
  • initial_dec_delay β€” PPS18[7:0], PPS19[7:0] - initial decoding delay which is the number of pixel times that the decoder accumulates data in its rate buffer before starting to decode and output pixels.
  • pps20_reserved β€” PPS20[7:0] - Reserved.
  • initial_scale_value β€” PPS21[5:0] - initial rcXformScale factor used at beginning of a slice. PPS21[7:6] - Reserved.
  • scale_increment_interval β€” PPS22[7:0], PPS23[7:0] - number of group times between incrementing the rcXformScale factor at end of a slice.
  • scale_decrement_interval_high β€” PPS24[3:0] - higher 4 bits indicating number of group times between decrementing the rcXformScale factor at beginning of a slice. PPS24[7:4] - Reserved.
  • scale_decrement_interval_low β€” PPS25[7:0] - lower 8 bits of scale decrement interval.
  • pps26_reserved β€” PPS26[7:0].
  • first_line_bpg_offset β€” PPS27[4:0] - number of additional bits that are allocated for each group on first line of a slice. PPS27[7:5] - Reserved.
  • nfl_bpg_offset β€” PPS28[7:0], PPS29[7:0] - number of bits including frac bits deallocated for each group for groups after the first line of slice.
  • slice_bpg_offset β€” PPS30, PPS31[7:0] - number of bits that are deallocated for each group to enforce the slice constraint.
  • initial_offset β€” PPS32,33[7:0] - initial value for rcXformOffset.
  • final_offset β€” PPS34,35[7:0] - maximum end-of-slice value for rcXformOffset.
  • flatness_min_qp β€” PPS36[4:0] - Minimum QP at which flatness is signaled and flatness QP adjustment is made. PPS36[7:5] - Reserved.
  • flatness_max_qp β€” PPS37[4:0] - Max QP at which flatness is signalled and the flatness adjustment is made. PPS37[7:5] - Reserved.
  • rc_model_size β€” PPS38,39[7:0] - number of bits within RC Model.
  • rc_edge_factor β€” PPS40[3:0] - ratio of current activity vs, previous activity to determine presence of edge. PPS40[7:4] - Reserved.
  • rc_quant_incr_limit0 β€” PPS41[4:0] - QP threshold used in short term RC. PPS41[7:5] - Reserved.
  • rc_quant_incr_limit1 β€” PPS42[4:0] - QP threshold used in short term RC. PPS42[7:5] - Reserved.
  • rc_tgt_offset β€” PPS43[3:0] - lower end of the variability range around the target bits per group that is allowed by short term RC. PPS43[7:4]- upper end of the variability range around the target bits per group that i allowed by short term rc.
  • rc_buf_thresh β€” PPS44[7:0] - PPS57[7:0] - specifies the thresholds in RC model for the 15 ranges defined by 14 thresholds.
  • rc_range_parameters β€” PPS58[7:0] - PPS87[7:0] parameters that correspond to each of the 15 ranges.
  • native_422_420 β€” PPS88[0] - 0 = Native 4:2:2 not used, 1 = Native 4:2:2 used. PPS88[1] - 0 = Native 4:2:0 not use, 1 = Native 4:2:0 used. PPS88[7:2] - Reserved 6 bits.
  • second_line_bpg_offset β€” PPS89[4:0] - additional bits/group budget for the second line of a slice in Native 4:2:0 mode. Set to 0 if DSC minor version is 1 or native420 is 0. PPS89[7:5] - Reserved.
  • nsl_bpg_offset β€” PPS90[7:0], PPS91[7:0] - number of bits that are deallocated for each group that is not in the second line of a slice.
  • second_line_offset_adj β€” PPS92[7:0], PPS93[7:0] - used as offset adjustment for the second line in Native 4:2:0 mode.
  • pps_long_94_reserved β€” PPS 94, 95, 96, 97 - Reserved.
  • pps_long_98_reserved β€” PPS 98, 99, 100, 101 - Reserved.
  • pps_long_102_reserved β€” PPS 102, 103, 104, 105 - Reserved.
  • pps_long_106_reserved β€” PPS 106, 107, 108, 109 - reserved.
  • pps_long_110_reserved β€” PPS 110, 111, 112, 113 - reserved.
  • pps_long_114_reserved β€” PPS 114 - 117 - reserved.
  • pps_long_118_reserved β€” PPS 118 - 121 - reserved.
  • pps_long_122_reserved β€” PPS 122- 125 - reserved.
  • pps_short_126_reserved β€” PPS 126, 127 - reserved.

✨ Description ✨

Okay so big-picture lore: the VESA DSC standard defines a picture parameter set (PPS) that display stream compression encoders must communicate to decoders. The PPS is encapsulated in 128 bytes (PPS 0 through PPS 127). The fields in this structure are as per Table 4.1 in Vesa DSC specification v1.1/v1.2. And the PPS fields that span over more than a byte should be stored in Big Endian format. That's the whole rule, bestie.

πŸ¦‹ SEE ALSO πŸ¦‹

  • Kernel file ./include/drm/display/drm_dsc.h struct drm_dsc_rc_range_parameters(9), struct drm_dsc_config(9), struct drm_dsc_pps_infoframe(9)

That’s the tea πŸ’…. This page came from ./include/drm/display, dated October 2026, and its footer name is struct drm_d...arameter_set(9). Bye bestie β€” go forth and respect the 128 bytes ✨

πŸ“¦ where this page comes from