18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * These are the VP8 state controls for use with stateless VP8 48c2ecf20Sopenharmony_ci * codec drivers. 58c2ecf20Sopenharmony_ci * 68c2ecf20Sopenharmony_ci * It turns out that these structs are not stable yet and will undergo 78c2ecf20Sopenharmony_ci * more changes. So keep them private until they are stable and ready to 88c2ecf20Sopenharmony_ci * become part of the official public API. 98c2ecf20Sopenharmony_ci */ 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci#ifndef _VP8_CTRLS_H_ 128c2ecf20Sopenharmony_ci#define _VP8_CTRLS_H_ 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_ci#include <linux/types.h> 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_ci#define V4L2_PIX_FMT_VP8_FRAME v4l2_fourcc('V', 'P', '8', 'F') 178c2ecf20Sopenharmony_ci 188c2ecf20Sopenharmony_ci#define V4L2_CID_MPEG_VIDEO_VP8_FRAME_HEADER (V4L2_CID_MPEG_BASE + 2000) 198c2ecf20Sopenharmony_ci#define V4L2_CTRL_TYPE_VP8_FRAME_HEADER 0x301 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_ci#define V4L2_VP8_SEGMENT_HEADER_FLAG_ENABLED 0x01 228c2ecf20Sopenharmony_ci#define V4L2_VP8_SEGMENT_HEADER_FLAG_UPDATE_MAP 0x02 238c2ecf20Sopenharmony_ci#define V4L2_VP8_SEGMENT_HEADER_FLAG_UPDATE_FEATURE_DATA 0x04 248c2ecf20Sopenharmony_ci#define V4L2_VP8_SEGMENT_HEADER_FLAG_DELTA_VALUE_MODE 0x08 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_cistruct v4l2_vp8_segment_header { 278c2ecf20Sopenharmony_ci __s8 quant_update[4]; 288c2ecf20Sopenharmony_ci __s8 lf_update[4]; 298c2ecf20Sopenharmony_ci __u8 segment_probs[3]; 308c2ecf20Sopenharmony_ci __u8 padding; 318c2ecf20Sopenharmony_ci __u32 flags; 328c2ecf20Sopenharmony_ci}; 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_ci#define V4L2_VP8_LF_HEADER_ADJ_ENABLE 0x01 358c2ecf20Sopenharmony_ci#define V4L2_VP8_LF_HEADER_DELTA_UPDATE 0x02 368c2ecf20Sopenharmony_ci#define V4L2_VP8_LF_FILTER_TYPE_SIMPLE 0x04 378c2ecf20Sopenharmony_cistruct v4l2_vp8_loopfilter_header { 388c2ecf20Sopenharmony_ci __s8 ref_frm_delta[4]; 398c2ecf20Sopenharmony_ci __s8 mb_mode_delta[4]; 408c2ecf20Sopenharmony_ci __u8 sharpness_level; 418c2ecf20Sopenharmony_ci __u8 level; 428c2ecf20Sopenharmony_ci __u16 padding; 438c2ecf20Sopenharmony_ci __u32 flags; 448c2ecf20Sopenharmony_ci}; 458c2ecf20Sopenharmony_ci 468c2ecf20Sopenharmony_cistruct v4l2_vp8_quantization_header { 478c2ecf20Sopenharmony_ci __u8 y_ac_qi; 488c2ecf20Sopenharmony_ci __s8 y_dc_delta; 498c2ecf20Sopenharmony_ci __s8 y2_dc_delta; 508c2ecf20Sopenharmony_ci __s8 y2_ac_delta; 518c2ecf20Sopenharmony_ci __s8 uv_dc_delta; 528c2ecf20Sopenharmony_ci __s8 uv_ac_delta; 538c2ecf20Sopenharmony_ci __u16 padding; 548c2ecf20Sopenharmony_ci}; 558c2ecf20Sopenharmony_ci 568c2ecf20Sopenharmony_cistruct v4l2_vp8_entropy_header { 578c2ecf20Sopenharmony_ci __u8 coeff_probs[4][8][3][11]; 588c2ecf20Sopenharmony_ci __u8 y_mode_probs[4]; 598c2ecf20Sopenharmony_ci __u8 uv_mode_probs[3]; 608c2ecf20Sopenharmony_ci __u8 mv_probs[2][19]; 618c2ecf20Sopenharmony_ci __u8 padding[3]; 628c2ecf20Sopenharmony_ci}; 638c2ecf20Sopenharmony_ci 648c2ecf20Sopenharmony_cistruct v4l2_vp8_entropy_coder_state { 658c2ecf20Sopenharmony_ci __u8 range; 668c2ecf20Sopenharmony_ci __u8 value; 678c2ecf20Sopenharmony_ci __u8 bit_count; 688c2ecf20Sopenharmony_ci __u8 padding; 698c2ecf20Sopenharmony_ci}; 708c2ecf20Sopenharmony_ci 718c2ecf20Sopenharmony_ci#define V4L2_VP8_FRAME_HEADER_FLAG_KEY_FRAME 0x01 728c2ecf20Sopenharmony_ci#define V4L2_VP8_FRAME_HEADER_FLAG_EXPERIMENTAL 0x02 738c2ecf20Sopenharmony_ci#define V4L2_VP8_FRAME_HEADER_FLAG_SHOW_FRAME 0x04 748c2ecf20Sopenharmony_ci#define V4L2_VP8_FRAME_HEADER_FLAG_MB_NO_SKIP_COEFF 0x08 758c2ecf20Sopenharmony_ci#define V4L2_VP8_FRAME_HEADER_FLAG_SIGN_BIAS_GOLDEN 0x10 768c2ecf20Sopenharmony_ci#define V4L2_VP8_FRAME_HEADER_FLAG_SIGN_BIAS_ALT 0x20 778c2ecf20Sopenharmony_ci 788c2ecf20Sopenharmony_ci#define VP8_FRAME_IS_KEY_FRAME(hdr) \ 798c2ecf20Sopenharmony_ci (!!((hdr)->flags & V4L2_VP8_FRAME_HEADER_FLAG_KEY_FRAME)) 808c2ecf20Sopenharmony_ci 818c2ecf20Sopenharmony_cistruct v4l2_ctrl_vp8_frame_header { 828c2ecf20Sopenharmony_ci struct v4l2_vp8_segment_header segment_header; 838c2ecf20Sopenharmony_ci struct v4l2_vp8_loopfilter_header lf_header; 848c2ecf20Sopenharmony_ci struct v4l2_vp8_quantization_header quant_header; 858c2ecf20Sopenharmony_ci struct v4l2_vp8_entropy_header entropy_header; 868c2ecf20Sopenharmony_ci struct v4l2_vp8_entropy_coder_state coder_state; 878c2ecf20Sopenharmony_ci 888c2ecf20Sopenharmony_ci __u16 width; 898c2ecf20Sopenharmony_ci __u16 height; 908c2ecf20Sopenharmony_ci 918c2ecf20Sopenharmony_ci __u8 horizontal_scale; 928c2ecf20Sopenharmony_ci __u8 vertical_scale; 938c2ecf20Sopenharmony_ci 948c2ecf20Sopenharmony_ci __u8 version; 958c2ecf20Sopenharmony_ci __u8 prob_skip_false; 968c2ecf20Sopenharmony_ci __u8 prob_intra; 978c2ecf20Sopenharmony_ci __u8 prob_last; 988c2ecf20Sopenharmony_ci __u8 prob_gf; 998c2ecf20Sopenharmony_ci __u8 num_dct_parts; 1008c2ecf20Sopenharmony_ci 1018c2ecf20Sopenharmony_ci __u32 first_part_size; 1028c2ecf20Sopenharmony_ci __u32 first_part_header_bits; 1038c2ecf20Sopenharmony_ci __u32 dct_part_sizes[8]; 1048c2ecf20Sopenharmony_ci 1058c2ecf20Sopenharmony_ci __u64 last_frame_ts; 1068c2ecf20Sopenharmony_ci __u64 golden_frame_ts; 1078c2ecf20Sopenharmony_ci __u64 alt_frame_ts; 1088c2ecf20Sopenharmony_ci 1098c2ecf20Sopenharmony_ci __u64 flags; 1108c2ecf20Sopenharmony_ci}; 1118c2ecf20Sopenharmony_ci 1128c2ecf20Sopenharmony_ci#endif 113