STRUCT DRM_DSC_PICTURE_PARAMETER_SET(9)
π 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 whendsc_version_minor = 0x2),0x8= 8bpc,0xA= 10bpc,0xC= 12bpc,0xE= 14bpc (also allowed only whendsc_minor_version = 0x2).pps_4βPPS4[1:0] -Theseare the most significant 2 bits of compressed BPPbits_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 BPPbits_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] -initialrcXformScalefactor 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 thercXformScalefactor at end of a slice.scale_decrement_interval_highβPPS24[3:0] -higher 4 bits indicating number of group times between decrementing thercXformScalefactor 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 forrcXformOffset.final_offsetβPPS34,35[7:0] -maximum end-of-slice value forrcXformOffset.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 to0if DSC minor version is1ornative420is0.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.hstructdrm_dsc_rc_range_parameters(9), structdrm_dsc_config(9), structdrm_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
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms