STRUCT V4L2_CTRL_VP9_COMPRESSED_HDR(9)
π 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 ofV4L2_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 astruct 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
- 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