STRUCT V4L2_CTRL_VP9_COMPRESSED_HDR(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

🌈 NAME 🌈

struct v4l2_ctrl_vp9_compressed_hdr β€” the VP9 probability updates control πŸ’… (and yes bestie, this is straight out of the Kernel API Manual, so you know it's legit ✨)


πŸ¦‹ SYNOPSIS πŸ¦‹

struct v4l2_ctrl_vp9_compressed_hdr {
    __u8 tx_mode;
    __u8 tx8[2][1];
    __u8 tx16[2][2];
    __u8 tx32[2][3];
    __u8 coef[4][2][2][6][6][3];
    __u8 skip[3];
    __u8 inter_mode[7][3];
    __u8 interp_filter[4][2];
    __u8 is_inter[4];
    __u8 comp_mode[5];
    __u8 single_ref[5][2];
    __u8 comp_ref[5];
    __u8 y_mode[4][9];
    __u8 uv_mode[10][9];
    __u8 partition[16][3];
    struct v4l2_vp9_mv_probs mv;
 };

Like, look at that coef array. coef[4][2][2][6][6][3]. Four dimensions wasn't enough, she needed more. Main character energy fr fr πŸ‘‘


πŸŽ€ Members πŸŽ€

  • tx_mode β€” specifies the TX mode. Set it to one of V4L2_VP9_TX_MODE_{}. Pick one, don't just vibe in there πŸ’€
  • tx8 β€” TX 8x8 probability updates.
  • tx16 β€” TX 16x16 probability updates.
  • tx32 β€” TX 32x32 probability updates.
  • coef β€” coefficient probability updates. The big one. Respect her 🫢
  • skip β€” skip probability updates.
  • inter_mode β€” inter mode probability updates.
  • interp_filter β€” interpolation filter probability updates.
  • is_inter β€” is-inter-block probability updates.
  • comp_mode β€” compound prediction mode probability updates.
  • single_ref β€” single ref probability updates.
  • comp_ref β€” compound ref probability updates.
  • y_mode β€” Y prediction mode probability updates.
  • uv_mode β€” UV prediction mode probability updates.
  • partition β€” partition probability updates.
  • mv β€” motion vector probability updates. It's a struct v4l2_vp9_mv_probs, so she's got her own whole thing going on ✨

πŸ’– Description πŸ’–

Okay so here's the tea β˜• β€” this structure holds the probabilities update exactly as parsed in the compressed header (Spec 6.3). These values are the value of the probability update after being translated with inv_map_table[] (see 6.3.5). So don't come at it with the raw values, she's already been through the translator πŸ’…

🚨 Important little detail: a value of zero in an array element means there is no update of the relevant probability. Zero = "nothing to see here, moving on" πŸ™ˆ

This control is optional, and you only need it when you're dealing with hardware that is not capable of parsing the compressed header itself. Only drivers which need it will implement it β€” so if you don't see it, that's not a bug, that's just not her job, iykyk 😌


🌸 SEE ALSO 🌸

Kernel file ./include/uapi/linux/v4l2-controls.h β€” and the whole extended friend group πŸ’œ:

  • 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_ctrl_hevc_pps(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_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)

That's the whole page bestie, go parse some compressed headers πŸ’œβœ¨

This lil masterpiece lives in ./include/uapi/linux, and the manual's date stamp says October 2026 β€” so she's serving future-era realness πŸ¦‹πŸŽ€

πŸ“¦ where this page comes from