2 * Copyright @ 2017 Intel Corporation
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the
6 * "Software"), to deal in the Software without restriction, including
7 * without limitation the rights to use, copy, modify, merge, publish,
8 * distribute, sub license, and/or sell copies of the Software, and to
9 * permit persons to whom the Software is furnished to do so, subject to
10 * the following conditions:
12 * The above copyright notice and this permission notice (including the
13 * next paragraph) shall be included in all copies or substantial portions
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
19 * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
20 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22 * SOFTWAR OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 * Pengfei Qu <Pengfei.qu@intel.com>
29 #ifndef GEN9_AVC_ENCODER_H
30 #define GEN9_AVC_ENCODER_H
32 #include "i965_encoder_common.h"
34 common structure and define
35 gen9_avc_surface structure
37 #define MAX_AVC_ENCODER_SURFACES 64
38 #define MAX_AVC_PAK_PASS_NUM 4
40 #define ENCODER_AVC_CONST_SURFACE_WIDTH 64
41 #define ENCODER_AVC_CONST_SURFACE_HEIGHT 44
42 #define WIDTH_IN_MACROBLOCKS(width) (ALIGN(width, 16) >> 4)
44 #define AVC_BRC_HISTORY_BUFFER_SIZE 864
45 #define AVC_BRC_CONSTANTSURFACE_SIZE 1664
46 #define AVC_ADAPTIVE_TX_DECISION_THRESHOLD 128
47 #define AVC_MB_TEXTURE_THRESHOLD 1024
48 #define AVC_SFD_COST_TABLE_BUFFER_SIZ 52
49 #define AVC_INVALID_ROUNDING_VALUE 255
51 struct gen9_mfx_avc_img_state
55 uint32_t dword_length:12;
57 uint32_t sub_opcode_b:5;
58 uint32_t sub_opcode_a:3;
59 uint32_t command_opcode:3;
61 uint32_t command_type:3;
68 uint32_t frame_size_in_mbs:16;//minus1
73 uint32_t frame_width_in_mbs_minus1:8; //minus1
75 uint32_t frame_height_in_mbs_minus1:8; //minus1
81 uint32_t image_structure:2;
82 uint32_t weighted_bipred_idc:2;
83 uint32_t weighted_pred_flag:1;
84 uint32_t brc_domain_rate_control_enable:1;
86 uint32_t chroma_qp_offset:5;
88 uint32_t second_chroma_qp_offset:5;
93 uint32_t field_picture_flag:1;
94 uint32_t mbaff_mode_active:1;
95 uint32_t frame_mb_only_flag:1;
96 uint32_t transform_8x8_idct_mode_flag:1;
97 uint32_t direct_8x8_interface_flag:1;
98 uint32_t constrained_intra_prediction_flag:1;
99 uint32_t current_img_dispoable_flag:1;
100 uint32_t entropy_coding_flag:1;
101 uint32_t mb_mv_format_flag:1;
103 uint32_t chroma_format_idc:2;
104 uint32_t mv_unpacked_flag:1;
105 uint32_t insert_test_flag:1;
106 uint32_t load_slice_pointer_flag:1;
107 uint32_t macroblock_stat_enable:1;
108 uint32_t minimum_frame_size:16;
112 uint32_t intra_mb_max_bit_flag:1;
113 uint32_t inter_mb_max_bit_flag:1;
114 uint32_t frame_size_over_flag:1;
115 uint32_t frame_size_under_flag:1;
117 uint32_t intra_mb_ipcm_flag:1;
119 uint32_t mb_rate_ctrl_flag:1;
120 uint32_t min_frame_size_units:2;
121 uint32_t inter_mb_zero_cbp_flag:1; //?change
123 uint32_t non_first_pass_flag:1;
125 uint32_t aq_chroma_disable:1;
126 uint32_t aq_rounding:3;
127 uint32_t aq_enable:1;
131 uint32_t intra_mb_max_size:12;
133 uint32_t inter_mb_max_size:12;
138 uint32_t vsl_top_mb_trans8x8_flag:1;
143 uint32_t slice_delta_qp_max0:8;
144 uint32_t slice_delta_qp_max1:8;
145 uint32_t slice_delta_qp_max2:8;
146 uint32_t slice_delta_qp_max3:8;
150 uint32_t slice_delta_qp_min0:8;
151 uint32_t slice_delta_qp_min1:8;
152 uint32_t slice_delta_qp_min2:8;
153 uint32_t slice_delta_qp_min3:8;
157 uint32_t frame_bitrate_min:14;
158 uint32_t frame_bitrate_min_unit_mode:1;
159 uint32_t frame_bitrate_min_unit:1;
160 uint32_t frame_bitrate_max:14;
161 uint32_t frame_bitrate_max_unit_mode:1;
162 uint32_t frame_bitrate_max_unit:1;
166 uint32_t frame_bitrate_min_delta:15;
168 uint32_t frame_bitrate_max_delta:15;
169 uint32_t slice_tsats_streamout_enable:1;
174 uint32_t mpeg2_old_mode_select:1;
175 uint32_t vad_noa_mux_select:1;
176 uint32_t vad_error_logic:1;
178 uint32_t vmd_error_logic:1;
183 uint32_t pic_qp_init_minus26:8;
184 uint32_t pic_num_ref_idx_l0_active_minus1:6;
186 uint32_t pic_num_ref_idx_l1_active_minus1:6;
188 uint32_t num_ref_frames:5;
189 uint32_t is_curr_pic_has_mmco5:1;
194 uint32_t pic_order_present_flag:1;
195 uint32_t delta_pic_order_always_zero_flag:1;
196 uint32_t pic_order_cnt_type:2;
198 uint32_t slice_group_map_type:3;
199 uint32_t redundant_pic_cnt_present_flag:1;
200 uint32_t num_slice_groups_minus1:3;
201 uint32_t deblock_filter_ctrl_present_flag:1;
202 uint32_t log2_max_frame_num_minus4:8;
203 uint32_t log2_max_pic_order_cnt_lsb_minus4:8;
207 uint32_t slice_group_change_rate:16;
208 uint32_t curr_pic_frame_num:16;
212 uint32_t current_frame_view_id:10;
214 uint32_t max_view_idx_l0:4;
216 uint32_t max_view_idx_l1:4;
218 uint32_t inter_view_order_disable:1;
222 uint32_t fqp:3; // Must be zero for SKL
223 uint32_t fqp_offset:3; // Must be zero for SKL
225 uint32_t ext_brc_dm_stat_en:1; // Must be zero for SKL
227 uint32_t brc_dm_avg_mb_qp:6; // Must be zero for SKL
232 uint32_t brc_domain_target_frame_size;
236 uint32_t threshold_size_in_bytes;
240 uint32_t target_slice_size_in_bytes;
245 the definition for encoder status
247 struct encoder_status
249 uint32_t image_status_mask;
250 uint32_t image_status_ctrl;
251 uint32_t bs_byte_count_frame;
252 uint32_t bs_byte_count_frame_nh;
253 uint32_t mfc_qp_status_count;
254 uint32_t media_index;
257 struct encoder_status_buffer_internal
260 uint32_t image_status_mask_offset;
261 uint32_t image_status_ctrl_offset;
262 uint32_t bs_byte_count_frame_offset;
263 uint32_t bs_byte_count_frame_nh_offset;
264 uint32_t mfc_qp_status_count_offset;
265 uint32_t media_index_offset;
267 uint32_t bs_byte_count_frame_reg_offset;
268 uint32_t bs_byte_count_frame_nh_reg_offset;
269 uint32_t image_status_mask_reg_offset;
270 uint32_t image_status_ctrl_reg_offset;
271 uint32_t mfc_qp_status_count_reg_offset;
272 uint32_t status_buffer_size;
273 uint32_t base_offset;
277 #define CLIP(x, min, max) \
279 (x) = (((x) > (max)) ? (max) : (((x) < (min)) ? (min) : (x))); \
282 typedef struct _kernel_header_
284 uint32_t reserved : 6;
285 uint32_t kernel_start_pointer : 26;
288 struct generic_search_path_delta
290 uint8_t search_path_delta_x:4;
291 uint8_t search_path_delta_y:4;
296 VASurfaceID curr_pic;
298 struct object_surface *input_surface;
299 struct object_surface *output_surface;
300 uint32_t input_frame_width;
301 uint32_t input_frame_height;
302 uint32_t output_frame_width;
303 uint32_t output_frame_height;
304 uint32_t vert_line_stride;
305 uint32_t vert_line_stride_offset;
306 bool scaling_out_use_16unorm_surf_fmt;
307 bool scaling_out_use_32unorm_surf_fmt;
308 bool mbv_proc_stat_enabled;
309 bool enable_mb_flatness_check;
310 bool enable_mb_variance_output;
311 bool enable_mb_pixel_average_output;
313 bool use_16x_scaling;
314 bool use_32x_scaling;
315 bool blk8x8_stat_enabled;
316 struct i965_gpe_resource *pres_mbv_proc_stat_buffer;
317 struct i965_gpe_resource *pres_flatness_check_surface;
320 struct avc_surface_param{
321 uint32_t frame_width;
322 uint32_t frame_height;
328 uint32_t ref_list_idx;
332 struct i965_gpe_context * gpe_context_brc_frame_update;
333 struct i965_gpe_context * gpe_context_mbenc;
337 uint32_t frame_width_in_mb;
338 uint32_t frame_height_in_mb;
339 uint32_t mbenc_i_frame_dist_in_use;
341 uint32_t roi_enabled;
342 uint32_t brc_enabled;
343 uint32_t slice_height;
344 uint32_t mb_const_data_buffer_in_use;
345 uint32_t mb_qp_buffer_in_use;
346 uint32_t mb_vproc_stats_enable;
349 struct gen9_surface_avc
351 VADriverContextP ctx;
352 VASurfaceID scaled_4x_surface_id;
353 struct object_surface *scaled_4x_surface_obj;
354 VASurfaceID scaled_16x_surface_id;
355 struct object_surface *scaled_16x_surface_obj;
356 VASurfaceID scaled_32x_surface_id;
357 struct object_surface *scaled_32x_surface_obj;
359 //mv code and mv data
360 struct i965_gpe_resource res_mb_code_surface;
361 struct i965_gpe_resource res_mv_data_surface;
363 struct i965_gpe_resource res_ref_pic_select_surface;
372 unsigned int qp_value;
373 int top_field_order_cnt;
376 typedef struct _gen9_avc_encoder_kernel_header {
379 // Quality mode for Frame/Field
380 kernel_header mbenc_quality_I;
381 kernel_header mbenc_quality_P;
382 kernel_header mbenc_quality_B;
383 // Normal mode for Frame/Field
384 kernel_header mbenc_normal_I;
385 kernel_header mbenc_normal_P;
386 kernel_header mbenc_normal_B;
387 // Performance modes for Frame/Field
388 kernel_header mbenc_performance_I;
389 kernel_header mbenc_performance_P;
390 kernel_header mbenc_performance_B;
391 // WiDi modes for Frame/Field
392 kernel_header mbenc_widi_I;
393 kernel_header mbenc_widi_P;
394 kernel_header mbenc_widi_B;
401 kernel_header ply_dscale_ply;
402 kernel_header ply_dscale_2f_ply_2f;
405 kernel_header frame_brc_init;
408 kernel_header frame_brc_update;
411 kernel_header frame_brc_reset;
413 // BRC I Frame Distortion
414 kernel_header frame_brc_i_dist;
417 kernel_header mb_brc_update;
420 kernel_header ply_2xdscale_ply;
421 kernel_header ply_2xdscale_2f_ply_2f;
423 //Weighted Prediction Kernel
426 // Static frame detection Kernel
427 kernel_header static_detection;
428 } gen9_avc_encoder_kernel_header;
431 The definition for Scaling
433 typedef enum _gen9_avc_binding_table_offset_scaling
435 GEN9_AVC_SCALING_FRAME_SRC_Y_INDEX = 0,
436 GEN9_AVC_SCALING_FRAME_DST_Y_INDEX = 1,
437 GEN9_AVC_SCALING_FRAME_MBVPROCSTATS_DST_INDEX = 4,
438 GEN9_AVC_SCALING_NUM_SURFACES = 6
439 } gen9_avc_binding_table_offset_scaling;
441 typedef struct _gen9_avc_scaling4x_curbe_data
445 uint32_t input_picture_width :16;
446 uint32_t input_picture_height :16;
450 uint32_t input_y_bti;
454 uint32_t output_y_bti;
466 uint32_t flatness_threshold;
471 uint32_t enable_mb_flatness_check;
475 uint32_t enable_mb_variance_output;
479 uint32_t enable_mb_pixel_average_output;
487 uint32_t mbv_proc_stat_bti;
493 } gen9_avc_scaling4x_curbe_data;
495 typedef struct _gen9_avc_scaling2x_curbe_data
499 uint32_t input_picture_width :16;
500 uint32_t input_picture_height :16;
504 uint32_t reserved1[7];
507 uint32_t input_y_bti;
511 uint32_t output_y_bti;
514 uint32_t reserved2[2];
515 } gen9_avc_scaling2x_curbe_data;
517 #define GEN9_AVC_KERNEL_SCALING_2X_IDX 0
518 #define GEN9_AVC_KERNEL_SCALING_4X_IDX 1
519 #define NUM_GEN9_AVC_KERNEL_SCALING 2
521 struct gen_avc_scaling_context
523 struct i965_gpe_context gpe_contexts[NUM_GEN9_AVC_KERNEL_SCALING];
527 me structure and define
529 typedef enum _gen9_avc_binding_table_offset_me
531 GEN9_AVC_ME_MV_DATA_SURFACE_INDEX = 0,
532 GEN9_AVC_16XME_MV_DATA_SURFACE_INDEX = 1,
533 GEN9_AVC_32XME_MV_DATA_SURFACE_INDEX = 1,
534 GEN9_AVC_ME_DISTORTION_SURFACE_INDEX = 2,
535 GEN9_AVC_ME_BRC_DISTORTION_INDEX = 3,
536 GEN9_AVC_ME_RESERVED0_INDEX = 4,
537 GEN9_AVC_ME_CURR_FOR_FWD_REF_INDEX = 5,
538 GEN9_AVC_ME_FWD_REF_IDX0_INDEX = 6,
539 GEN9_AVC_ME_RESERVED1_INDEX = 7,
540 GEN9_AVC_ME_FWD_REF_IDX1_INDEX = 8,
541 GEN9_AVC_ME_RESERVED2_INDEX = 9,
542 GEN9_AVC_ME_FWD_REF_IDX2_INDEX = 10,
543 GEN9_AVC_ME_RESERVED3_INDEX = 11,
544 GEN9_AVC_ME_FWD_REF_IDX3_INDEX = 12,
545 GEN9_AVC_ME_RESERVED4_INDEX = 13,
546 GEN9_AVC_ME_FWD_REF_IDX4_INDEX = 14,
547 GEN9_AVC_ME_RESERVED5_INDEX = 15,
548 GEN9_AVC_ME_FWD_REF_IDX5_INDEX = 16,
549 GEN9_AVC_ME_RESERVED6_INDEX = 17,
550 GEN9_AVC_ME_FWD_REF_IDX6_INDEX = 18,
551 GEN9_AVC_ME_RESERVED7_INDEX = 19,
552 GEN9_AVC_ME_FWD_REF_IDX7_INDEX = 20,
553 GEN9_AVC_ME_RESERVED8_INDEX = 21,
554 GEN9_AVC_ME_CURR_FOR_BWD_REF_INDEX = 22,
555 GEN9_AVC_ME_BWD_REF_IDX0_INDEX = 23,
556 GEN9_AVC_ME_RESERVED9_INDEX = 24,
557 GEN9_AVC_ME_BWD_REF_IDX1_INDEX = 25,
558 GEN9_AVC_ME_VDENC_STREAMIN_INDEX = 26,
559 GEN9_AVC_ME_NUM_SURFACES_INDEX = 27
560 } gen9_avc_binding_table_offset_me;
562 typedef struct _gen9_avc_me_curbe_data
566 uint32_t skip_mode_enable:1;
567 uint32_t adaptive_enable:1;
568 uint32_t bi_mix_dis:1;
569 uint32_t reserved0:2;
570 uint32_t early_ime_success_enable:1;
571 uint32_t reserved1:1;
572 uint32_t t8x8_flag_for_inter_enable:1;
573 uint32_t reserved2:16;
574 uint32_t early_ime_stop:8;
578 uint32_t max_num_mvs:6;
579 uint32_t reserved0:10;
580 uint32_t bi_weight:6;
581 uint32_t reserved1:6;
582 uint32_t uni_mix_disable:1;
583 uint32_t reserved2:3;
587 uint32_t max_len_sp:8;
588 uint32_t max_num_su:8;
589 uint32_t reserved0:16;
594 uint32_t reserved0:2;
595 uint32_t mb_type_remap:2;
596 uint32_t src_access:1;
597 uint32_t ref_access:1;
598 uint32_t search_ctrl:3;
599 uint32_t dual_search_path_option:1;
600 uint32_t sub_pel_mode:2;
601 uint32_t skip_type:1;
602 uint32_t disable_field_cache_allocation:1;
603 uint32_t inter_chroma_mode:1;
604 uint32_t ft_enable:1;
605 uint32_t bme_disable_fbr:1;
606 uint32_t block_based_skip_enable:1;
607 uint32_t inter_sad:2;
608 uint32_t intra_sad:2;
609 uint32_t sub_mb_part_mask:7;
610 uint32_t reserved1:1;
614 uint32_t reserved0:8;
615 uint32_t picture_height_minus1:8;
616 uint32_t picture_width:8;
617 uint32_t reserved1:8;
621 uint32_t reserved0:8;
622 uint32_t qp_prime_y:8;
623 uint32_t ref_width:8;
624 uint32_t ref_height:8;
628 uint32_t reserved0:3;
629 uint32_t write_distortions:1;
630 uint32_t use_mv_from_prev_step:1;
631 uint32_t reserved1:3;
632 uint32_t super_combine_dist:8;
633 uint32_t max_vmvr:16;
637 uint32_t reserved0:16;
638 uint32_t mv_cost_scale_factor:2;
639 uint32_t bilinear_enable:1;
640 uint32_t src_field_polarity:1;
641 uint32_t weightedsad_harr:1;
642 uint32_t ac_only_haar:1;
643 uint32_t ref_id_cost_mode:1;
644 uint32_t reserved1:1;
645 uint32_t skip_center_mask:8;
649 uint32_t mode_0_cost:8;
650 uint32_t mode_1_cost:8;
651 uint32_t mode_2_cost:8;
652 uint32_t mode_3_cost:8;
656 uint32_t mode_4_cost:8;
657 uint32_t mode_5_cost:8;
658 uint32_t mode_6_cost:8;
659 uint32_t mode_7_cost:8;
663 uint32_t mode_8_cost:8;
664 uint32_t mode_9_cost:8;
665 uint32_t ref_id_cost:8;
666 uint32_t chroma_intra_mode_cost:8;
670 uint32_t mv_0_cost:8;
671 uint32_t mv_1_cost:8;
672 uint32_t mv_2_cost:8;
673 uint32_t mv_3_cost:8;
677 uint32_t mv_4_cost:8;
678 uint32_t mv_5_cost:8;
679 uint32_t mv_6_cost:8;
680 uint32_t mv_7_cost:8;
684 uint32_t num_ref_idx_l0_minus1:8;
685 uint32_t num_ref_idx_l1_minus1:8;
686 uint32_t ref_streamin_cost:8;
687 uint32_t roi_enable:3;
688 uint32_t reserved0:5;
692 uint32_t l0_ref_pic_polarity_bits:8;
693 uint32_t l1_ref_pic_polarity_bits:2;
694 uint32_t reserved:22;
698 uint32_t prev_mv_read_pos_factor : 8;
699 uint32_t mv_shift_factor : 8;
700 uint32_t reserved:16;
704 struct generic_search_path_delta sp_delta_0;
705 struct generic_search_path_delta sp_delta_1;
706 struct generic_search_path_delta sp_delta_2;
707 struct generic_search_path_delta sp_delta_3;
711 struct generic_search_path_delta sp_delta_4;
712 struct generic_search_path_delta sp_delta_5;
713 struct generic_search_path_delta sp_delta_6;
714 struct generic_search_path_delta sp_delta_7;
718 struct generic_search_path_delta sp_delta_8;
719 struct generic_search_path_delta sp_delta_9;
720 struct generic_search_path_delta sp_delta_10;
721 struct generic_search_path_delta sp_delta_11;
725 struct generic_search_path_delta sp_delta_12;
726 struct generic_search_path_delta sp_delta_13;
727 struct generic_search_path_delta sp_delta_14;
728 struct generic_search_path_delta sp_delta_15;
732 struct generic_search_path_delta sp_delta_16;
733 struct generic_search_path_delta sp_delta_17;
734 struct generic_search_path_delta sp_delta_18;
735 struct generic_search_path_delta sp_delta_19;
739 struct generic_search_path_delta sp_delta_20;
740 struct generic_search_path_delta sp_delta_21;
741 struct generic_search_path_delta sp_delta_22;
742 struct generic_search_path_delta sp_delta_23;
746 struct generic_search_path_delta sp_delta_24;
747 struct generic_search_path_delta sp_delta_25;
748 struct generic_search_path_delta sp_delta_26;
749 struct generic_search_path_delta sp_delta_27;
753 struct generic_search_path_delta sp_delta_28;
754 struct generic_search_path_delta sp_delta_29;
755 struct generic_search_path_delta sp_delta_30;
756 struct generic_search_path_delta sp_delta_31;
760 struct generic_search_path_delta sp_delta_32;
761 struct generic_search_path_delta sp_delta_33;
762 struct generic_search_path_delta sp_delta_34;
763 struct generic_search_path_delta sp_delta_35;
767 struct generic_search_path_delta sp_delta_36;
768 struct generic_search_path_delta sp_delta_37;
769 struct generic_search_path_delta sp_delta_38;
770 struct generic_search_path_delta sp_delta_39;
774 struct generic_search_path_delta sp_delta_40;
775 struct generic_search_path_delta sp_delta_41;
776 struct generic_search_path_delta sp_delta_42;
777 struct generic_search_path_delta sp_delta_43;
781 struct generic_search_path_delta sp_delta_44;
782 struct generic_search_path_delta sp_delta_45;
783 struct generic_search_path_delta sp_delta_46;
784 struct generic_search_path_delta sp_delta_47;
788 struct generic_search_path_delta sp_delta_48;
789 struct generic_search_path_delta sp_delta_49;
790 struct generic_search_path_delta sp_delta_50;
791 struct generic_search_path_delta sp_delta_51;
795 struct generic_search_path_delta sp_delta_52;
796 struct generic_search_path_delta sp_delta_53;
797 struct generic_search_path_delta sp_delta_54;
798 struct generic_search_path_delta sp_delta_55;
802 uint32_t actual_mb_width:16;
803 uint32_t actual_mb_height:16;
811 uint32_t _4x_memv_output_data_surf_index;
815 uint32_t _16x_32x_memv_input_data_surf_index;
819 uint32_t _4x_me_output_dist_surf_index;
823 uint32_t _4x_me_output_brc_dist_surf_index;
827 uint32_t vme_fwd_inter_pred_surf_index;
831 uint32_t vme_bdw_inter_pred_surf_index;
838 } gen9_avc_me_curbe_data;
840 #define GEN9_AVC_KERNEL_ME_P_IDX 0
841 #define GEN9_AVC_KERNEL_ME_B_IDX 1
842 #define NUM_GEN9_AVC_KERNEL_ME 2
844 struct gen_avc_me_context
846 struct i965_gpe_context gpe_contexts[NUM_GEN9_AVC_KERNEL_ME];
850 frame/mb brc structure and define
852 typedef enum _gen9_avc_binding_table_offset_brc_init_reset
854 GEN9_AVC_BRC_INIT_RESET_HISTORY_INDEX = 0,
855 GEN9_AVC_BRC_INIT_RESET_DISTORTION_INDEX,
856 GEN9_AVC_BRC_INIT_RESET_NUM_SURFACES
857 } gen9_avc_binding_table_offset_brc_init_reset;
859 typedef struct _gen9_avc_brc_init_reset_curbe_data
863 uint32_t profile_level_max_frame;
868 uint32_t init_buf_full_in_bits;
873 uint32_t buf_size_in_bits;
878 uint32_t average_bit_rate;
883 uint32_t max_bit_rate;
888 uint32_t min_bit_rate;
893 uint32_t frame_rate_m;
898 uint32_t frame_rate_d;
903 uint32_t brc_flag:16;
910 uint32_t frame_width_in_bytes:16;
915 uint32_t frame_height_in_bytes:16;
916 uint32_t avbr_accuracy:16;
921 uint32_t avbr_convergence:16;
928 uint32_t no_slices:16;
933 uint32_t instant_rate_threshold_0_p:8;
934 uint32_t instant_rate_threshold_1_p:8;
935 uint32_t instant_rate_threshold_2_p:8;
936 uint32_t instant_rate_threshold_3_p:8;
941 uint32_t instant_rate_threshold_0_b:8;
942 uint32_t instant_rate_threshold_1_b:8;
943 uint32_t instant_rate_threshold_2_b:8;
944 uint32_t instant_rate_threshold_3_b:8;
949 uint32_t instant_rate_threshold_0_i:8;
950 uint32_t instant_rate_threshold_1_i:8;
951 uint32_t instant_rate_threshold_2_i:8;
952 uint32_t instant_rate_threshold_3_i:8;
957 uint32_t deviation_threshold_0_pand_b:8;
958 uint32_t deviation_threshold_1_pand_b:8;
959 uint32_t deviation_threshold_2_pand_b:8;
960 uint32_t deviation_threshold_3_pand_b:8;
965 uint32_t deviation_threshold_4_pand_b:8;
966 uint32_t deviation_threshold_5_pand_b:8;
967 uint32_t deviation_threshold_6_pand_b:8;
968 uint32_t deviation_threshold_7_pand_b:8;
973 uint32_t deviation_threshold_0_vbr:8;
974 uint32_t deviation_threshold_1_vbr:8;
975 uint32_t deviation_threshold_2_vbr:8;
976 uint32_t deviation_threshold_3_vbr:8;
981 uint32_t deviation_threshold_4_vbr:8;
982 uint32_t deviation_threshold_5_vbr:8;
983 uint32_t deviation_threshold_6_vbr:8;
984 uint32_t deviation_threshold_7_vbr:8;
989 uint32_t deviation_threshold_0_i:8;
990 uint32_t deviation_threshold_1_i:8;
991 uint32_t deviation_threshold_2_i:8;
992 uint32_t deviation_threshold_3_i:8;
997 uint32_t deviation_threshold_4_i:8;
998 uint32_t deviation_threshold_5_i:8;
999 uint32_t deviation_threshold_6_i:8;
1000 uint32_t deviation_threshold_7_i:8;
1005 uint32_t initial_qp_i:8;
1006 uint32_t initial_qp_p:8;
1007 uint32_t initial_qp_b:8;
1008 uint32_t sliding_window_size:8;
1016 }gen9_avc_brc_init_reset_curbe_data;
1018 typedef enum _gen9_avc_binding_table_offset_frame_brc_update
1020 GEN9_AVC_FRAME_BRC_UPDATE_HISTORY_INDEX = 0,
1021 GEN9_AVC_FRAME_BRC_UPDATE_PAK_STATISTICS_OUTPUT_INDEX = 1,
1022 GEN9_AVC_FRAME_BRC_UPDATE_IMAGE_STATE_READ_INDEX = 2,
1023 GEN9_AVC_FRAME_BRC_UPDATE_IMAGE_STATE_WRITE_INDEX = 3,
1024 GEN9_AVC_FRAME_BRC_UPDATE_MBENC_CURBE_READ_INDEX = 4,
1025 GEN9_AVC_FRAME_BRC_UPDATE_MBENC_CURBE_WRITE_INDEX = 5,
1026 GEN9_AVC_FRAME_BRC_UPDATE_DISTORTION_INDEX = 6,
1027 GEN9_AVC_FRAME_BRC_UPDATE_CONSTANT_DATA_INDEX = 7,
1028 GEN9_AVC_FRAME_BRC_UPDATE_MB_STATUS_INDEX = 8,
1029 GEN9_AVC_FRAME_BRC_UPDATE_NUM_SURFACES_INDEX = 9
1030 } gen9_avc_binding_table_offset_frame_brc_update;
1032 typedef struct _gen9_avc_frame_brc_update_curbe_data
1036 uint32_t target_size;
1041 uint32_t frame_number;
1046 uint32_t size_of_pic_headers;
1051 uint32_t start_gadj_frame0:16;
1052 uint32_t start_gadj_frame1:16;
1057 uint32_t start_gadj_frame2:16;
1058 uint32_t start_gadj_frame3:16;
1063 uint32_t target_size_flag:8;
1064 uint32_t brc_flag:8;
1065 uint32_t max_num_paks:8;
1066 uint32_t cur_frame_type:8;
1071 uint32_t num_skip_frames:8;
1072 uint32_t minimum_qp:8;
1073 uint32_t maximum_qp:8;
1074 uint32_t enable_force_skip:1;
1075 uint32_t enable_sliding_window:1;
1076 uint32_t reserved:6;
1081 uint32_t size_skip_frames;
1086 uint32_t start_global_adjust_mult_0:8;
1087 uint32_t start_global_adjust_mult_1:8;
1088 uint32_t start_global_adjust_mult_2:8;
1089 uint32_t start_global_adjust_mult_3:8;
1094 uint32_t start_global_adjust_mult_4:8;
1095 uint32_t start_global_adjust_div_0:8;
1096 uint32_t start_global_adjust_div_1:8;
1097 uint32_t start_global_adjust_div_2:8;
1102 uint32_t start_global_adjust_div_3:8;
1103 uint32_t start_global_adjust_div_4:8;
1104 uint32_t qp_threshold_0:8;
1105 uint32_t qp_threshold_1:8;
1110 uint32_t qp_threshold_2:8;
1111 uint32_t qp_threshold_3:8;
1112 uint32_t g_rate_ratio_threshold_0:8;
1113 uint32_t g_rate_ratio_threshold_1:8;
1118 uint32_t g_rate_ratio_threshold_2:8;
1119 uint32_t g_rate_ratio_threshold_3:8;
1120 uint32_t g_rate_ratio_threshold_4:8;
1121 uint32_t g_rate_ratio_threshold_5:8;
1126 uint32_t g_rate_ratio_threshold_qp_0:8;
1127 uint32_t g_rate_ratio_threshold_qp_1:8;
1128 uint32_t g_rate_ratio_threshold_qp_2:8;
1129 uint32_t g_rate_ratio_threshold_qp_3:8;
1134 uint32_t g_rate_ratio_threshold_qp_4:8;
1135 uint32_t g_rate_ratio_threshold_qp_5:8;
1136 uint32_t g_rate_ratio_threshold_qp_6:8;
1137 uint32_t qp_index_of_cur_pic:8;
1142 uint32_t reserved0:8;
1143 uint32_t enable_roi:8;
1144 uint32_t reserved1:8;
1145 uint32_t reserved2:8;
1165 uint32_t user_max_frame;
1188 }gen9_avc_frame_brc_update_curbe_data;
1190 typedef enum _gen9_avc_binding_table_offset_mb_brc_update
1192 GEN9_AVC_MB_BRC_UPDATE_HISTORY_INDEX = 0,
1193 GEN9_AVC_MB_BRC_UPDATE_MB_QP_INDEX = 1,
1194 GEN9_AVC_MB_BRC_UPDATE_ROI_INDEX = 2,
1195 GEN9_AVC_MB_BRC_UPDATE_MB_STATUS_INDEX = 3,
1196 GEN9_AVC_MB_BRC_UPDATE_NUM_SURFACES_INDEX = 4
1197 } gen9_avc_binding_table_offset_mb_brc_update;
1199 typedef struct _gen9_avc_mb_brc_curbe_data
1203 uint32_t cur_frame_type:8;
1204 uint32_t enable_roi:8;
1205 uint32_t roi_ratio:8;
1206 uint32_t reserved0:8;
1240 }gen9_avc_mb_brc_curbe_data;
1242 #define GEN9_AVC_KERNEL_BRC_INIT 0
1243 #define GEN9_AVC_KERNEL_BRC_FRAME_UPDATE 1
1244 #define GEN9_AVC_KERNEL_BRC_RESET 2
1245 #define GEN9_AVC_KERNEL_BRC_I_FRAME_DIST 3
1246 #define GEN9_AVC_KERNEL_BRC_BLOCK_COPY 4
1247 #define GEN9_AVC_KERNEL_BRC_MB_UPDATE 5
1248 #define NUM_GEN9_AVC_KERNEL_BRC 6
1250 struct gen_avc_brc_context
1252 struct i965_gpe_context gpe_contexts[NUM_GEN9_AVC_KERNEL_BRC];
1256 wp structure and define
1258 typedef enum _gen9_avc_binding_table_offset_wp
1260 GEN9_AVC_WP_INPUT_REF_SURFACE_INDEX = 0,
1261 GEN9_AVC_WP_OUTPUT_SCALED_SURFACE_INDEX = 1,
1262 GEN9_AVC_WP_NUM_SURFACES_INDEX = 2
1263 } gen9_avc_binding_table_offset_wp;
1265 typedef struct _gen9_avc_wp_curbe_data
1269 uint32_t default_weight:16;
1270 uint32_t default_offset:16;
1275 uint32_t roi_0_x_left:16;
1276 uint32_t roi_0_y_top:16;
1281 uint32_t roi_0_x_right:16;
1282 uint32_t roi_0_y_bottom:16;
1287 uint32_t roi_0_weight:16;
1288 uint32_t roi_0_offset:16;
1293 uint32_t roi_1_x_left:16;
1294 uint32_t roi_1_y_top:16;
1299 uint32_t roi_1_x_right:16;
1300 uint32_t roi_1_y_bottom:16;
1305 uint32_t roi_1_weight:16;
1306 uint32_t roi_1_offset:16;
1311 uint32_t roi_2_x_left:16;
1312 uint32_t roi_2_y_top:16;
1317 uint32_t roi_2_x_right:16;
1318 uint32_t roi_2_y_bottom:16;
1323 uint32_t roi_2_weight:16;
1324 uint32_t roi_2_offset:16;
1329 uint32_t roi_3_x_left:16;
1330 uint32_t roi_3_y_top:16;
1335 uint32_t roi_3_x_right:16;
1336 uint32_t roi_3_y_bottom:16;
1341 uint32_t roi_3_weight:16;
1342 uint32_t roi_3_offset:16;
1347 uint32_t roi_4_x_left:16;
1348 uint32_t roi_4_y_top:16;
1353 uint32_t roi_4_x_right:16;
1354 uint32_t roi_4_y_bottom:16;
1359 uint32_t roi_4_weight:16;
1360 uint32_t roi_4_offset:16;
1365 uint32_t roi_5_x_left:16;
1366 uint32_t roi_5_y_top:16;
1371 uint32_t roi_5_x_right:16;
1372 uint32_t roi_5_y_bottom:16;
1377 uint32_t roi_5_weight:16;
1378 uint32_t roi_5_offset:16;
1383 uint32_t roi_6_x_left:16;
1384 uint32_t roi_6_y_top:16;
1389 uint32_t roi_6_x_right:16;
1390 uint32_t roi_6_y_bottom:16;
1395 uint32_t roi_6_weight:16;
1396 uint32_t roi_6_offset:16;
1401 uint32_t roi_7_x_left:16;
1402 uint32_t roi_7_y_top:16;
1407 uint32_t roi_7_x_right:16;
1408 uint32_t roi_7_y_bottom:16;
1413 uint32_t roi_7_weight:16;
1414 uint32_t roi_7_offset:16;
1419 uint32_t roi_8_x_left:16;
1420 uint32_t roi_8_y_top:16;
1425 uint32_t roi_8_x_right:16;
1426 uint32_t roi_8_y_bottom:16;
1431 uint32_t roi_8_weight:16;
1432 uint32_t roi_8_offset:16;
1437 uint32_t roi_9_x_left:16;
1438 uint32_t roi_9_y_top:16;
1443 uint32_t roi_9_x_right:16;
1444 uint32_t roi_9_y_bottom:16;
1449 uint32_t roi_9_weight:16;
1450 uint32_t roi_9_offset:16;
1455 uint32_t roi_10_x_left:16;
1456 uint32_t roi_10_y_top:16;
1461 uint32_t roi_10_x_right:16;
1462 uint32_t roi_10_y_bottom:16;
1467 uint32_t roi_10_weight:16;
1468 uint32_t roi_10_offset:16;
1473 uint32_t roi_11_x_left:16;
1474 uint32_t roi_11_y_top:16;
1479 uint32_t roi_11_x_right:16;
1480 uint32_t roi_11_y_bottom:16;
1485 uint32_t roi_11_weight:16;
1486 uint32_t roi_11_offset:16;
1491 uint32_t roi_12_x_left:16;
1492 uint32_t roi_12_y_top:16;
1497 uint32_t roi_12_x_right:16;
1498 uint32_t roi_12_y_bottom:16;
1503 uint32_t roi_12_weight:16;
1504 uint32_t roi_12_offset:16;
1509 uint32_t roi_13_x_left:16;
1510 uint32_t roi_13_y_top:16;
1515 uint32_t roi_13_x_right:16;
1516 uint32_t roi_13_y_bottom:16;
1521 uint32_t roi_13_weight:16;
1522 uint32_t roi_13_offset:16;
1527 uint32_t roi_14_x_left:16;
1528 uint32_t roi_14_y_top:16;
1533 uint32_t roi_14_x_right:16;
1534 uint32_t roi_14_y_bottom:16;
1539 uint32_t roi_14_weight:16;
1540 uint32_t roi_14_offset:16;
1545 uint32_t roi_15_x_left:16;
1546 uint32_t roi_15_y_top:16;
1551 uint32_t roi_15_x_right:16;
1552 uint32_t roi_15_y_bottom:16;
1557 uint32_t roi_15_weight:16;
1558 uint32_t roi_15_offset:16;
1563 uint32_t input_surface;
1568 uint32_t output_surface;
1573 }gen9_avc_wp_curbe_data;
1575 struct gen_avc_wp_context
1577 struct i965_gpe_context gpe_contexts;
1581 mbenc structure and define
1583 typedef enum _gen9_avc_binding_table_offset_mbenc
1585 GEN9_AVC_MBENC_MFC_AVC_PAK_OBJ_INDEX = 0,
1586 GEN9_AVC_MBENC_IND_MV_DATA_INDEX = 1,
1587 GEN9_AVC_MBENC_BRC_DISTORTION_INDEX = 2, // FOR BRC DISTORTION FOR I
1588 GEN9_AVC_MBENC_CURR_Y_INDEX = 3,
1589 GEN9_AVC_MBENC_CURR_UV_INDEX = 4,
1590 GEN9_AVC_MBENC_MB_SPECIFIC_DATA_INDEX = 5,
1591 GEN9_AVC_MBENC_AUX_VME_OUT_INDEX = 6,
1592 GEN9_AVC_MBENC_REFPICSELECT_L0_INDEX = 7,
1593 GEN9_AVC_MBENC_MV_DATA_FROM_ME_INDEX = 8,
1594 GEN9_AVC_MBENC_4XME_DISTORTION_INDEX = 9,
1595 GEN9_AVC_MBENC_SLICEMAP_DATA_INDEX = 10,
1596 GEN9_AVC_MBENC_FWD_MB_DATA_INDEX = 11,
1597 GEN9_AVC_MBENC_FWD_MV_DATA_INDEX = 12,
1598 GEN9_AVC_MBENC_MBQP_INDEX = 13,
1599 GEN9_AVC_MBENC_MBBRC_CONST_DATA_INDEX = 14,
1600 GEN9_AVC_MBENC_VME_INTER_PRED_CURR_PIC_IDX_0_INDEX = 15,
1601 GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX0_INDEX = 16,
1602 GEN9_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX0_0_INDEX = 17,
1603 GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX1_INDEX = 18,
1604 GEN9_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX1_0_INDEX = 19,
1605 GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX2_INDEX = 20,
1606 GEN9_AVC_MBENC_RESERVED0_INDEX = 21,
1607 GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX3_INDEX = 22,
1608 GEN9_AVC_MBENC_RESERVED1_INDEX = 23,
1609 GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX4_INDEX = 24,
1610 GEN9_AVC_MBENC_RESERVED2_INDEX = 25,
1611 GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX5_INDEX = 26,
1612 GEN9_AVC_MBENC_RESERVED3_INDEX = 27,
1613 GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX6_INDEX = 28,
1614 GEN9_AVC_MBENC_RESERVED4_INDEX = 29,
1615 GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX7_INDEX = 30,
1616 GEN9_AVC_MBENC_RESERVED5_INDEX = 31,
1617 GEN9_AVC_MBENC_VME_INTER_PRED_CURR_PIC_IDX_1_INDEX = 32,
1618 GEN9_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX0_1_INDEX = 33,
1619 GEN9_AVC_MBENC_RESERVED6_INDEX = 34,
1620 GEN9_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX1_1_INDEX = 35,
1621 GEN9_AVC_MBENC_RESERVED7_INDEX = 36,
1622 GEN9_AVC_MBENC_MB_STATS_INDEX = 37,
1623 GEN9_AVC_MBENC_MAD_DATA_INDEX = 38,
1624 GEN9_AVC_MBENC_FORCE_NONSKIP_MB_MAP_INDEX = 39,
1625 GEN9_AVC_MBENC_WIDI_WA_INDEX = 40,
1626 GEN9_AVC_MBENC_BRC_CURBE_DATA_INDEX = 41,
1627 GEN9_AVC_MBENC_SFD_COST_TABLE_INDEX = 42,
1628 GEN9_AVC_MBENC_MV_PREDICTOR_INDEX = 43,
1629 GEN9_AVC_MBENC_NUM_SURFACES_INDEX = 44
1630 } gen9_avc_binding_table_offset_mbenc;
1632 typedef struct _gen9_avc_mbenc_curbe_data
1636 uint32_t skip_mode_enable:1;
1637 uint32_t adaptive_enable:1;
1638 uint32_t bi_mix_dis:1;
1639 uint32_t reserved0:2;
1640 uint32_t early_ime_success_enable:1;
1641 uint32_t reserved1:1;
1642 uint32_t t8x8_flag_for_inter_enable:1;
1643 uint32_t reserved2:16;
1644 uint32_t early_ime_stop:8;
1648 uint32_t max_num_mvs:6;
1649 uint32_t reserved0:10;
1650 uint32_t bi_weight:6;
1651 uint32_t reserved1:6;
1652 uint32_t uni_mix_disable:1;
1653 uint32_t reserved2:3;
1657 uint32_t max_len_sp:8;
1658 uint32_t max_num_su:8;
1659 uint32_t pitch_width:16;
1663 uint32_t src_size:2;
1664 uint32_t reserved0:2;
1665 uint32_t mb_type_remap:2;
1666 uint32_t src_access:1;
1667 uint32_t ref_access:1;
1668 uint32_t search_ctrl:3;
1669 uint32_t dual_search_path_option:1;
1670 uint32_t sub_pel_mode:2;
1671 uint32_t skip_type:1;
1672 uint32_t disable_field_cache_allocation:1;
1673 uint32_t inter_chroma_mode:1;
1674 uint32_t ftq_enable:1;
1675 uint32_t bme_disable_fbr:1;
1676 uint32_t block_based_skip_enable:1;
1677 uint32_t inter_sad:2;
1678 uint32_t intra_sad:2;
1679 uint32_t sub_mb_part_mask:7;
1680 uint32_t reserved1:1;
1684 uint32_t picture_height_minus1:16;
1685 uint32_t mv_restriction_in_slice_enable:1;
1686 uint32_t delta_mv_enable:1;
1687 uint32_t true_distortion_enable:1;
1688 uint32_t enable_wavefront_optimization:1;
1689 uint32_t enable_fbr_bypass:1;
1690 uint32_t enable_intra_cost_scaling_for_static_frame:1;
1691 uint32_t reserved0:1;
1692 uint32_t enable_widi_wa_surf:1;
1693 uint32_t enable_widi_dirty_rect:1;
1694 uint32_t enable_cur_fld_idr:1;
1695 uint32_t contrained_intra_pred_flag:1;
1696 uint32_t field_parity_flag:1;
1697 uint32_t hme_enable:1;
1698 uint32_t picture_type:2;
1699 uint32_t use_actual_ref_qp_value:1;
1703 uint32_t slice_mb_height:16;
1704 uint32_t ref_width:8;
1705 uint32_t ref_height:8;
1709 uint32_t batch_buffer_end;
1713 uint32_t intra_part_mask:5;
1714 uint32_t non_skip_zmv_added:1;
1715 uint32_t non_skip_mode_added:1;
1716 uint32_t luma_intra_src_corner_swap:1;
1717 uint32_t reserved0:8;
1718 uint32_t mv_cost_scale_factor:2;
1719 uint32_t bilinear_enable:1;
1720 uint32_t src_field_polarity:1;
1721 uint32_t weightedsad_harr:1;
1722 uint32_t ac_only_haar:1;
1723 uint32_t ref_id_cost_mode:1;
1724 uint32_t reserved1:1;
1725 uint32_t skip_center_mask:8;
1729 uint32_t mode_0_cost:8;
1730 uint32_t mode_1_cost:8;
1731 uint32_t mode_2_cost:8;
1732 uint32_t mode_3_cost:8;
1736 uint32_t mode_4_cost:8;
1737 uint32_t mode_5_cost:8;
1738 uint32_t mode_6_cost:8;
1739 uint32_t mode_7_cost:8;
1743 uint32_t mode_8_cost:8;
1744 uint32_t mode_9_cost:8;
1745 uint32_t ref_id_cost:8;
1746 uint32_t chroma_intra_mode_cost:8;
1751 uint32_t mv_0_cost:8;
1752 uint32_t mv_1_cost:8;
1753 uint32_t mv_2_cost:8;
1754 uint32_t mv_3_cost:8;
1760 uint32_t mv_4_cost:8;
1761 uint32_t mv_5_cost:8;
1762 uint32_t mv_6_cost:8;
1763 uint32_t mv_7_cost:8;
1767 uint32_t qp_prime_y:8;
1768 uint32_t qp_prime_cb:8;
1769 uint32_t qp_prime_cr:8;
1770 uint32_t target_size_in_word:8;
1774 uint32_t sic_fwd_transcoeff_threshold_0:16;
1775 uint32_t sic_fwd_transcoeff_threshold_1:8;
1776 uint32_t sic_fwd_transcoeff_threshold_2:8;
1780 uint32_t sic_fwd_transcoeff_threshold_3:8;
1781 uint32_t sic_fwd_transcoeff_threshold_4:8;
1782 uint32_t sic_fwd_transcoeff_threshold_5:8;
1783 uint32_t sic_fwd_transcoeff_threshold_6:8;
1787 struct generic_search_path_delta sp_delta_0;
1788 struct generic_search_path_delta sp_delta_1;
1789 struct generic_search_path_delta sp_delta_2;
1790 struct generic_search_path_delta sp_delta_3;
1794 struct generic_search_path_delta sp_delta_4;
1795 struct generic_search_path_delta sp_delta_5;
1796 struct generic_search_path_delta sp_delta_6;
1797 struct generic_search_path_delta sp_delta_7;
1801 struct generic_search_path_delta sp_delta_8;
1802 struct generic_search_path_delta sp_delta_9;
1803 struct generic_search_path_delta sp_delta_10;
1804 struct generic_search_path_delta sp_delta_11;
1808 struct generic_search_path_delta sp_delta_12;
1809 struct generic_search_path_delta sp_delta_13;
1810 struct generic_search_path_delta sp_delta_14;
1811 struct generic_search_path_delta sp_delta_15;
1815 struct generic_search_path_delta sp_delta_16;
1816 struct generic_search_path_delta sp_delta_17;
1817 struct generic_search_path_delta sp_delta_18;
1818 struct generic_search_path_delta sp_delta_19;
1822 struct generic_search_path_delta sp_delta_20;
1823 struct generic_search_path_delta sp_delta_21;
1824 struct generic_search_path_delta sp_delta_22;
1825 struct generic_search_path_delta sp_delta_23;
1829 struct generic_search_path_delta sp_delta_24;
1830 struct generic_search_path_delta sp_delta_25;
1831 struct generic_search_path_delta sp_delta_26;
1832 struct generic_search_path_delta sp_delta_27;
1836 struct generic_search_path_delta sp_delta_28;
1837 struct generic_search_path_delta sp_delta_29;
1838 struct generic_search_path_delta sp_delta_30;
1839 struct generic_search_path_delta sp_delta_31;
1843 struct generic_search_path_delta sp_delta_32;
1844 struct generic_search_path_delta sp_delta_33;
1845 struct generic_search_path_delta sp_delta_34;
1846 struct generic_search_path_delta sp_delta_35;
1850 struct generic_search_path_delta sp_delta_36;
1851 struct generic_search_path_delta sp_delta_37;
1852 struct generic_search_path_delta sp_delta_38;
1853 struct generic_search_path_delta sp_delta_39;
1857 struct generic_search_path_delta sp_delta_40;
1858 struct generic_search_path_delta sp_delta_41;
1859 struct generic_search_path_delta sp_delta_42;
1860 struct generic_search_path_delta sp_delta_43;
1864 struct generic_search_path_delta sp_delta_44;
1865 struct generic_search_path_delta sp_delta_45;
1866 struct generic_search_path_delta sp_delta_46;
1867 struct generic_search_path_delta sp_delta_47;
1871 struct generic_search_path_delta sp_delta_48;
1872 struct generic_search_path_delta sp_delta_49;
1873 struct generic_search_path_delta sp_delta_50;
1874 struct generic_search_path_delta sp_delta_51;
1878 struct generic_search_path_delta sp_delta_52;
1879 struct generic_search_path_delta sp_delta_53;
1880 struct generic_search_path_delta sp_delta_54;
1881 struct generic_search_path_delta sp_delta_55;
1885 uint32_t intra_4x4_mode_mask:9;
1886 uint32_t reserved0:7;
1887 uint32_t intra_8x8_mode_mask:9;
1888 uint32_t reserved1:7;
1892 uint32_t intra_16x16_mode_mask:4;
1893 uint32_t intra_chroma_mode_mask:4;
1894 uint32_t intra_compute_type:2;
1895 uint32_t reserved0:22;
1899 uint32_t skip_val:16;
1900 uint32_t mult_pred_l0_disable:8;
1901 uint32_t mult_pred_l1_disable:8;
1905 uint32_t intra_16x16_nondc_penalty:8;
1906 uint32_t intra_8x8_nondc_penalty:8;
1907 uint32_t intra_4x4_nondc_penalty:8;
1908 uint32_t reserved0:8;
1912 uint32_t list0_ref_id0_field_parity:1;
1913 uint32_t list0_ref_id1_field_parity:1;
1914 uint32_t list0_ref_id2_field_parity:1;
1915 uint32_t list0_ref_id3_field_parity:1;
1916 uint32_t list0_ref_id4_field_parity:1;
1917 uint32_t list0_ref_id5_field_parity:1;
1918 uint32_t list0_ref_id6_field_parity:1;
1919 uint32_t list0_ref_id7_field_parity:1;
1920 uint32_t list1_ref_id0_frm_field_parity:1;
1921 uint32_t list1_ref_id1_frm_field_parity:1;
1922 uint32_t widi_intra_refresh_en:2;
1923 uint32_t arbitray_num_mbs_per_slice:1;
1924 uint32_t enable_adaptive_tx_decision:1;
1925 uint32_t force_non_skip_check:1;
1926 uint32_t disable_enc_skip_check:1;
1927 uint32_t enable_direct_bias_adjustment:1;
1928 uint32_t b_force_to_skip:1;
1929 uint32_t enable_global_motion_bias_adjustment:1;
1930 uint32_t enable_adaptive_search_window_size:1;
1931 uint32_t enable_per_mb_static_check:1;
1932 uint32_t reserved0:3;
1933 uint32_t list1_ref_id0_field_parity:1;
1934 uint32_t list1_ref_id1_field_parity:1;
1935 uint32_t mad_enable_falg:1;
1936 uint32_t roi_enable_flag:1;
1937 uint32_t enable_mb_flatness_check_optimization:1;
1938 uint32_t b_direct_mode:1;
1939 uint32_t mb_brc_enable:1;
1940 uint32_t b_original_bff:1;
1944 uint32_t panic_mode_mb_threshold:16;
1945 uint32_t small_mb_size_in_word:8;
1946 uint32_t large_mb_size_in_word:8;
1950 uint32_t num_ref_idx_l0_minus_one:8;
1951 uint32_t hme_combined_extra_sus:8;
1952 uint32_t num_ref_idx_l1_minus_one:8;
1953 uint32_t reserved0:4;
1954 uint32_t is_fwd_frame_short_term_ref:1;
1955 uint32_t check_all_fractional_enable:1;
1956 uint32_t hme_combine_overlap:2;
1960 uint32_t skip_mode_enable:1;
1961 uint32_t adaptive_enable:1;
1962 uint32_t bi_mix_dis:1;
1963 uint32_t reserved0:2;
1964 uint32_t early_ime_success_enable:1;
1965 uint32_t reserved1:1;
1966 uint32_t t8x8_flag_for_inter_enable:1;
1967 uint32_t reserved2:16;
1968 uint32_t early_ime_stop:8;
1973 uint32_t max_len_sp:8;
1974 uint32_t max_num_su:8;
1975 uint32_t ref_threshold:16;
1979 uint32_t reserved0:8;
1980 uint32_t hme_ref_windows_comb_threshold:8;
1981 uint32_t ref_width:8;
1982 uint32_t ref_height:8;
1986 uint32_t dist_scale_factor_ref_id0_list0:16;
1987 uint32_t dist_scale_factor_ref_id1_list0:16;
1991 uint32_t dist_scale_factor_ref_id2_list0:16;
1992 uint32_t dist_scale_factor_ref_id3_list0:16;
1996 uint32_t dist_scale_factor_ref_id4_list0:16;
1997 uint32_t dist_scale_factor_ref_id5_list0:16;
2001 uint32_t dist_scale_factor_ref_id6_list0:16;
2002 uint32_t dist_scale_factor_ref_id7_list0:16;
2006 uint32_t actual_qp_value_for_ref_id0_list0:8;
2007 uint32_t actual_qp_value_for_ref_id1_list0:8;
2008 uint32_t actual_qp_value_for_ref_id2_list0:8;
2009 uint32_t actual_qp_value_for_ref_id3_list0:8;
2013 uint32_t actual_qp_value_for_ref_id4_list0:8;
2014 uint32_t actual_qp_value_for_ref_id5_list0:8;
2015 uint32_t actual_qp_value_for_ref_id6_list0:8;
2016 uint32_t actual_qp_value_for_ref_id7_list0:8;
2020 uint32_t actual_qp_value_for_ref_id0_list1:8;
2021 uint32_t actual_qp_value_for_ref_id1_list1:8;
2022 uint32_t ref_cost:16;
2026 uint32_t mb_qp_read_factor:8;
2027 uint32_t intra_cost_sf:8;
2028 uint32_t max_vmv_r:16;
2032 uint32_t widi_intra_refresh_mb_num:16;
2033 uint32_t widi_intra_refresh_unit_in_mb_minus1:8;
2034 uint32_t widi_intra_refresh_qp_delta:8;
2038 uint32_t roi_1_x_left:16;
2039 uint32_t roi_1_y_top:16;
2043 uint32_t roi_1_x_right:16;
2044 uint32_t roi_1_y_bottom:16;
2048 uint32_t roi_2_x_left:16;
2049 uint32_t roi_2_y_top:16;
2053 uint32_t roi_2_x_right:16;
2054 uint32_t roi_2_y_bottom:16;
2058 uint32_t roi_3_x_left:16;
2059 uint32_t roi_3_y_top:16;
2063 uint32_t roi_3_x_right:16;
2064 uint32_t roi_3_y_bottom:16;
2068 uint32_t roi_4_x_left:16;
2069 uint32_t roi_4_y_top:16;
2073 uint32_t roi_4_x_right:16;
2074 uint32_t roi_4_y_bottom:16;
2078 uint32_t roi_1_dqp_prime_y:8;
2079 uint32_t roi_2_dqp_prime_y:8;
2080 uint32_t roi_3_dqp_prime_y:8;
2081 uint32_t roi_4_dqp_prime_y:8;
2085 uint32_t mb_texture_threshold:16;
2086 uint32_t tx_decision_threshold:16;
2090 uint32_t hme_mv_cost_scaling_factor:8;
2091 uint32_t reserved0:24;
2111 uint32_t mb_data_surf_index;
2115 uint32_t mv_data_surf_index;
2119 uint32_t i_dist_surf_index;
2123 uint32_t src_y_surf_index;
2127 uint32_t mb_specific_data_surf_index;
2131 uint32_t aux_vme_out_surf_index;
2135 uint32_t curr_ref_pic_sel_surf_index;
2139 uint32_t hme_mv_pred_fwd_bwd_surf_index;
2143 uint32_t hme_dist_surf_index;
2147 uint32_t slice_map_surf_index;
2151 uint32_t fwd_frm_mb_data_surf_index;
2155 uint32_t fwd_frm_mv_surf_index;
2159 uint32_t mb_qp_buffer;
2163 uint32_t mb_brc_lut;
2167 uint32_t vme_inter_prediction_surf_index;
2171 uint32_t vme_inter_prediction_mr_surf_index;
2175 uint32_t mb_stats_surf_index;
2179 uint32_t mad_surf_index;
2183 uint32_t force_non_skip_mb_map_surface;
2187 uint32_t widi_wa_surf_index;
2191 uint32_t brc_curbe_surf_index;
2195 uint32_t static_detection_cost_table_index;
2206 } gen9_avc_mbenc_curbe_data;
2208 #define GEN9_AVC_KERNEL_MBENC_QUALITY_I 0
2209 #define GEN9_AVC_KERNEL_MBENC_QUALITY_P 1
2210 #define GEN9_AVC_KERNEL_MBENC_QUALITY_B 2
2211 #define GEN9_AVC_KERNEL_MBENC_NORMAL_I 3
2212 #define GEN9_AVC_KERNEL_MBENC_NORMAL_P 4
2213 #define GEN9_AVC_KERNEL_MBENC_NORMAL_B 5
2214 #define GEN9_AVC_KERNEL_MBENC_PERFORMANCE_I 6
2215 #define GEN9_AVC_KERNEL_MBENC_PERFORMANCE_P 7
2216 #define GEN9_AVC_KERNEL_MBENC_PERFORMANCE_B 8
2217 #define NUM_GEN9_AVC_KERNEL_MBENC 9
2219 struct gen_avc_mbenc_context
2221 struct i965_gpe_context gpe_contexts[NUM_GEN9_AVC_KERNEL_MBENC];
2225 static frame detection structure and define
2227 typedef enum _gen9_avc_binding_table_offset_sfd
2229 GEN9_AVC_SFD_VDENC_INPUT_IMAGE_STATE_INDEX = 0,
2230 GEN9_AVC_SFD_MV_DATA_SURFACE_INDEX = 1,
2231 GEN9_AVC_SFD_INTER_DISTORTION_SURFACE_INDEX = 2,
2232 GEN9_AVC_SFD_OUTPUT_DATA_SURFACE_INDEX = 3,
2233 GEN9_AVC_SFD_VDENC_OUTPUT_IMAGE_STATE_INDEX = 4,
2234 GEN9_AVC_SFD_NUM_SURFACES = 5
2235 } gen9_avc_binding_table_offset_sfd;
2237 typedef struct _gen9_avc_sfd_curbe_data
2241 uint32_t vdenc_mode_disable:1;
2242 uint32_t brc_mode_enable:1;
2243 uint32_t slice_type:2;
2244 uint32_t reserved0:1;
2245 uint32_t stream_in_type:4;
2246 uint32_t enable_adaptive_mv_stream_in:1;
2247 uint32_t reserved1:1;
2248 uint32_t enable_intra_cost_scaling_for_static_frame:1;
2249 uint32_t reserved2:20;
2254 uint32_t qp_value:8;
2255 uint32_t num_of_refs:8;
2256 uint32_t hme_stream_in_ref_cost:8;
2257 uint32_t reserved0:8;
2262 uint32_t frame_width_in_mbs:16;
2263 uint32_t frame_height_in_mbs:16;
2268 uint32_t large_mv_threshold;
2273 uint32_t total_large_mv_threshold;
2278 uint32_t zmv_threshold;
2283 uint32_t total_zmv_threshold;
2288 uint32_t min_dist_threshold;
2291 char cost_table[52];
2294 uint32_t actual_width_in_mb:16;
2295 uint32_t actual_height_in_mb:16;
2310 uint32_t vdenc_input_image_state_index;
2320 uint32_t mv_data_surface_index;
2325 uint32_t inter_distortion_surface_index;
2330 uint32_t output_data_surface_index;
2335 uint32_t vdenc_output_image_state_index;
2338 }gen9_avc_sfd_curbe_data;
2340 struct gen_avc_sfd_context
2342 struct i965_gpe_context gpe_contexts;
2347 typedef struct _gen95_avc_scaling4x_curbe_data
2350 uint32_t input_picture_width :16;
2351 uint32_t input_picture_height :16;
2355 uint32_t input_y_bti_frame;
2359 uint32_t output_y_bti_frame;
2371 uint32_t flatness_threshold;
2376 uint32_t enable_mb_flatness_check:1;
2377 uint32_t enable_mb_variance_output:1;
2378 uint32_t enable_mb_pixel_average_output:1;
2379 uint32_t enable_block8x8_statistics_output:1;
2380 uint32_t reserved0:28;
2388 uint32_t mbv_proc_stat_bti_frame;
2418 } gen95_avc_scaling4x_curbe_data;
2420 typedef enum _gen95_avc_binding_table_offset_frame_brc_update
2422 GEN95_AVC_FRAME_BRC_UPDATE_HISTORY_INDEX = 0,
2423 GEN95_AVC_FRAME_BRC_UPDATE_PAK_STATISTICS_OUTPUT_INDEX = 1,
2424 GEN95_AVC_FRAME_BRC_UPDATE_IMAGE_STATE_READ_INDEX = 2,
2425 GEN95_AVC_FRAME_BRC_UPDATE_IMAGE_STATE_WRITE_INDEX = 3,
2426 GEN95_AVC_FRAME_BRC_UPDATE_MBENC_CURBE_WRITE_INDEX = 4,
2427 GEN95_AVC_FRAME_BRC_UPDATE_DISTORTION_INDEX = 5,
2428 GEN95_AVC_FRAME_BRC_UPDATE_CONSTANT_DATA_INDEX = 6,
2429 GEN95_AVC_FRAME_BRC_UPDATE_MB_STATUS_INDEX = 7,
2430 GEN95_AVC_FRAME_BRC_UPDATE_NUM_SURFACES_INDEX = 8
2431 } gen95_avc_binding_table_offset_frame_brc_update;
2433 typedef enum _gen95_avc_binding_table_offset_mbenc
2435 GEN95_AVC_MBENC_BRC_CURBE_DATA_INDEX = 39,
2436 GEN95_AVC_MBENC_FORCE_NONSKIP_MB_MAP_INDEX = 40,
2437 GEN95_AVC_MBENC_WIDI_WA_INDEX = 41,
2438 GEN95_AVC_MBENC_SFD_COST_TABLE_INDEX = 42,
2439 GEN95_AVC_MBENC_NUM_SURFACES_INDEX = 43
2440 } gen95_avc_binding_table_offset_mbenc;
2442 typedef struct _gen95_avc_mbenc_curbe_data
2446 uint32_t skip_mode_enable:1;
2447 uint32_t adaptive_enable:1;
2448 uint32_t bi_mix_dis:1;
2449 uint32_t reserved0:2;
2450 uint32_t early_ime_success_enable:1;
2451 uint32_t reserved1:1;
2452 uint32_t t8x8_flag_for_inter_enable:1;
2453 uint32_t reserved2:16;
2454 uint32_t early_ime_stop:8;
2458 uint32_t max_num_mvs:6;
2459 uint32_t extended_mv_cost_range:1;
2460 uint32_t reserved0:9;
2461 uint32_t bi_weight:6;
2462 uint32_t reserved1:6;
2463 uint32_t uni_mix_disable:1;
2464 uint32_t reserved2:3;
2468 uint32_t max_len_sp:8;
2469 uint32_t max_num_su:8;
2470 uint32_t pitch_width:16;
2474 uint32_t src_size:2;
2475 uint32_t reserved0:2;
2476 uint32_t mb_type_remap:2;
2477 uint32_t src_access:1;
2478 uint32_t ref_access:1;
2479 uint32_t search_ctrl:3;
2480 uint32_t dual_search_path_option:1;
2481 uint32_t sub_pel_mode:2;
2482 uint32_t skip_type:1;
2483 uint32_t disable_field_cache_allocation:1;
2484 uint32_t inter_chroma_mode:1;
2485 uint32_t ftq_enable:1;
2486 uint32_t bme_disable_fbr:1;
2487 uint32_t block_based_skip_enable:1;
2488 uint32_t inter_sad:2;
2489 uint32_t intra_sad:2;
2490 uint32_t sub_mb_part_mask:7;
2491 uint32_t reserved1:1;
2495 uint32_t picture_height_minus1:16;
2496 uint32_t mv_restriction_in_slice_enable:1;
2497 uint32_t delta_mv_enable:1;
2498 uint32_t true_distortion_enable:1;
2499 uint32_t enable_wavefront_optimization:1;
2500 uint32_t enable_fbr_bypass:1;
2501 uint32_t enable_intra_cost_scaling_for_static_frame:1;
2502 uint32_t enable_intra_refresh:1;
2503 uint32_t enable_widi_wa_surf:1;
2504 uint32_t enable_widi_dirty_rect:1;
2505 uint32_t enable_cur_fld_idr:1;
2506 uint32_t contrained_intra_pred_flag:1;
2507 uint32_t field_parity_flag:1;
2508 uint32_t hme_enable:1;
2509 uint32_t picture_type:2;
2510 uint32_t use_actual_ref_qp_value:1;
2514 uint32_t slice_mb_height:16;
2515 uint32_t ref_width:8;
2516 uint32_t ref_height:8;
2520 uint32_t batch_buffer_end;
2524 uint32_t intra_part_mask:5;
2525 uint32_t non_skip_zmv_added:1;
2526 uint32_t non_skip_mode_added:1;
2527 uint32_t luma_intra_src_corner_swap:1;
2528 uint32_t reserved0:8;
2529 uint32_t mv_cost_scale_factor:2;
2530 uint32_t bilinear_enable:1;
2531 uint32_t src_field_polarity:1;
2532 uint32_t weightedsad_harr:1;
2533 uint32_t ac_only_haar:1;
2534 uint32_t ref_id_cost_mode:1;
2535 uint32_t reserved1:1;
2536 uint32_t skip_center_mask:8;
2540 uint32_t mode_0_cost:8;
2541 uint32_t mode_1_cost:8;
2542 uint32_t mode_2_cost:8;
2543 uint32_t mode_3_cost:8;
2547 uint32_t mode_4_cost:8;
2548 uint32_t mode_5_cost:8;
2549 uint32_t mode_6_cost:8;
2550 uint32_t mode_7_cost:8;
2554 uint32_t mode_8_cost:8;
2555 uint32_t mode_9_cost:8;
2556 uint32_t ref_id_cost:8;
2557 uint32_t chroma_intra_mode_cost:8;
2562 uint32_t mv_0_cost:8;
2563 uint32_t mv_1_cost:8;
2564 uint32_t mv_2_cost:8;
2565 uint32_t mv_3_cost:8;
2571 uint32_t mv_4_cost:8;
2572 uint32_t mv_5_cost:8;
2573 uint32_t mv_6_cost:8;
2574 uint32_t mv_7_cost:8;
2578 uint32_t qp_prime_y:8;
2579 uint32_t qp_prime_cb:8;
2580 uint32_t qp_prime_cr:8;
2581 uint32_t target_size_in_word:8;
2585 uint32_t sic_fwd_transcoeff_threshold_0:16;
2586 uint32_t sic_fwd_transcoeff_threshold_1:8;
2587 uint32_t sic_fwd_transcoeff_threshold_2:8;
2591 uint32_t sic_fwd_transcoeff_threshold_3:8;
2592 uint32_t sic_fwd_transcoeff_threshold_4:8;
2593 uint32_t sic_fwd_transcoeff_threshold_5:8;
2594 uint32_t sic_fwd_transcoeff_threshold_6:8;
2598 struct generic_search_path_delta sp_delta_0;
2599 struct generic_search_path_delta sp_delta_1;
2600 struct generic_search_path_delta sp_delta_2;
2601 struct generic_search_path_delta sp_delta_3;
2605 struct generic_search_path_delta sp_delta_4;
2606 struct generic_search_path_delta sp_delta_5;
2607 struct generic_search_path_delta sp_delta_6;
2608 struct generic_search_path_delta sp_delta_7;
2612 struct generic_search_path_delta sp_delta_8;
2613 struct generic_search_path_delta sp_delta_9;
2614 struct generic_search_path_delta sp_delta_10;
2615 struct generic_search_path_delta sp_delta_11;
2619 struct generic_search_path_delta sp_delta_12;
2620 struct generic_search_path_delta sp_delta_13;
2621 struct generic_search_path_delta sp_delta_14;
2622 struct generic_search_path_delta sp_delta_15;
2626 struct generic_search_path_delta sp_delta_16;
2627 struct generic_search_path_delta sp_delta_17;
2628 struct generic_search_path_delta sp_delta_18;
2629 struct generic_search_path_delta sp_delta_19;
2633 struct generic_search_path_delta sp_delta_20;
2634 struct generic_search_path_delta sp_delta_21;
2635 struct generic_search_path_delta sp_delta_22;
2636 struct generic_search_path_delta sp_delta_23;
2640 struct generic_search_path_delta sp_delta_24;
2641 struct generic_search_path_delta sp_delta_25;
2642 struct generic_search_path_delta sp_delta_26;
2643 struct generic_search_path_delta sp_delta_27;
2647 struct generic_search_path_delta sp_delta_28;
2648 struct generic_search_path_delta sp_delta_29;
2649 struct generic_search_path_delta sp_delta_30;
2650 struct generic_search_path_delta sp_delta_31;
2654 struct generic_search_path_delta sp_delta_32;
2655 struct generic_search_path_delta sp_delta_33;
2656 struct generic_search_path_delta sp_delta_34;
2657 struct generic_search_path_delta sp_delta_35;
2661 struct generic_search_path_delta sp_delta_36;
2662 struct generic_search_path_delta sp_delta_37;
2663 struct generic_search_path_delta sp_delta_38;
2664 struct generic_search_path_delta sp_delta_39;
2668 struct generic_search_path_delta sp_delta_40;
2669 struct generic_search_path_delta sp_delta_41;
2670 struct generic_search_path_delta sp_delta_42;
2671 struct generic_search_path_delta sp_delta_43;
2675 struct generic_search_path_delta sp_delta_44;
2676 struct generic_search_path_delta sp_delta_45;
2677 struct generic_search_path_delta sp_delta_46;
2678 struct generic_search_path_delta sp_delta_47;
2682 struct generic_search_path_delta sp_delta_48;
2683 struct generic_search_path_delta sp_delta_49;
2684 struct generic_search_path_delta sp_delta_50;
2685 struct generic_search_path_delta sp_delta_51;
2689 struct generic_search_path_delta sp_delta_52;
2690 struct generic_search_path_delta sp_delta_53;
2691 struct generic_search_path_delta sp_delta_54;
2692 struct generic_search_path_delta sp_delta_55;
2696 uint32_t intra_4x4_mode_mask:9;
2697 uint32_t reserved0:7;
2698 uint32_t intra_8x8_mode_mask:9;
2699 uint32_t reserved1:7;
2703 uint32_t intra_16x16_mode_mask:4;
2704 uint32_t intra_chroma_mode_mask:4;
2705 uint32_t intra_compute_type:2;
2706 uint32_t reserved0:22;
2710 uint32_t skip_val:16;
2711 uint32_t mult_pred_l0_disable:8;
2712 uint32_t mult_pred_l1_disable:8;
2716 uint32_t intra_16x16_nondc_penalty:8;
2717 uint32_t intra_8x8_nondc_penalty:8;
2718 uint32_t intra_4x4_nondc_penalty:8;
2719 uint32_t reserved0:8;
2723 uint32_t list0_ref_id0_field_parity:1;
2724 uint32_t list0_ref_id1_field_parity:1;
2725 uint32_t list0_ref_id2_field_parity:1;
2726 uint32_t list0_ref_id3_field_parity:1;
2727 uint32_t list0_ref_id4_field_parity:1;
2728 uint32_t list0_ref_id5_field_parity:1;
2729 uint32_t list0_ref_id6_field_parity:1;
2730 uint32_t list0_ref_id7_field_parity:1;
2731 uint32_t list1_ref_id0_frm_field_parity:1;
2732 uint32_t list1_ref_id1_frm_field_parity:1;
2733 uint32_t widi_intra_refresh_en:2;
2734 uint32_t arbitray_num_mbs_per_slice:1;
2735 uint32_t tq_enable:1;
2736 uint32_t force_non_skip_check:1;
2737 uint32_t disable_enc_skip_check:1;
2738 uint32_t enable_direct_bias_adjustment:1;
2739 uint32_t b_force_to_skip:1;
2740 uint32_t enable_global_motion_bias_adjustment:1;
2741 uint32_t enable_adaptive_tx_decision:1;
2742 uint32_t enable_per_mb_static_check:1;
2743 uint32_t enable_adaptive_search_window_size:1;
2744 uint32_t reserved0:1;
2745 uint32_t cqp_flag:1;
2746 uint32_t list1_ref_id0_field_parity:1;
2747 uint32_t list1_ref_id1_field_parity:1;
2748 uint32_t mad_enable_falg:1;
2749 uint32_t roi_enable_flag:1;
2750 uint32_t enable_mb_flatness_check_optimization:1;
2751 uint32_t b_direct_mode:1;
2752 uint32_t mb_brc_enable:1;
2753 uint32_t b_original_bff:1;
2757 uint32_t panic_mode_mb_threshold:16;
2758 uint32_t small_mb_size_in_word:8;
2759 uint32_t large_mb_size_in_word:8;
2763 uint32_t num_ref_idx_l0_minus_one:8;
2764 uint32_t hme_combined_extra_sus:8;
2765 uint32_t num_ref_idx_l1_minus_one:8;
2766 uint32_t reserved0:4;
2767 uint32_t is_fwd_frame_short_term_ref:1;
2768 uint32_t check_all_fractional_enable:1;
2769 uint32_t hme_combine_overlap:2;
2773 uint32_t skip_mode_enable:1;
2774 uint32_t adaptive_enable:1;
2775 uint32_t bi_mix_dis:1;
2776 uint32_t reserved0:2;
2777 uint32_t early_ime_success_enable:1;
2778 uint32_t reserved1:1;
2779 uint32_t t8x8_flag_for_inter_enable:1;
2780 uint32_t reserved2:16;
2781 uint32_t early_ime_stop:8;
2786 uint32_t max_len_sp:8;
2787 uint32_t max_num_su:8;
2788 uint32_t ref_threshold:16;
2792 uint32_t reserved0:8;
2793 uint32_t hme_ref_windows_comb_threshold:8;
2794 uint32_t ref_width:8;
2795 uint32_t ref_height:8;
2799 uint32_t dist_scale_factor_ref_id0_list0:16;
2800 uint32_t dist_scale_factor_ref_id1_list0:16;
2804 uint32_t dist_scale_factor_ref_id2_list0:16;
2805 uint32_t dist_scale_factor_ref_id3_list0:16;
2809 uint32_t dist_scale_factor_ref_id4_list0:16;
2810 uint32_t dist_scale_factor_ref_id5_list0:16;
2814 uint32_t dist_scale_factor_ref_id6_list0:16;
2815 uint32_t dist_scale_factor_ref_id7_list0:16;
2819 uint32_t actual_qp_value_for_ref_id0_list0:8;
2820 uint32_t actual_qp_value_for_ref_id1_list0:8;
2821 uint32_t actual_qp_value_for_ref_id2_list0:8;
2822 uint32_t actual_qp_value_for_ref_id3_list0:8;
2826 uint32_t actual_qp_value_for_ref_id4_list0:8;
2827 uint32_t actual_qp_value_for_ref_id5_list0:8;
2828 uint32_t actual_qp_value_for_ref_id6_list0:8;
2829 uint32_t actual_qp_value_for_ref_id7_list0:8;
2833 uint32_t actual_qp_value_for_ref_id0_list1:8;
2834 uint32_t actual_qp_value_for_ref_id1_list1:8;
2835 uint32_t ref_cost:16;
2839 uint32_t mb_qp_read_factor:8;
2840 uint32_t intra_cost_sf:8;
2841 uint32_t max_vmv_r:16;
2845 uint32_t widi_intra_refresh_mb_x:16;
2846 uint32_t widi_intra_refresh_unit_in_mb_minus1:8;
2847 uint32_t widi_intra_refresh_qp_delta:8;
2851 uint32_t roi_1_x_left:16;
2852 uint32_t roi_1_y_top:16;
2856 uint32_t roi_1_x_right:16;
2857 uint32_t roi_1_y_bottom:16;
2861 uint32_t roi_2_x_left:16;
2862 uint32_t roi_2_y_top:16;
2866 uint32_t roi_2_x_right:16;
2867 uint32_t roi_2_y_bottom:16;
2871 uint32_t roi_3_x_left:16;
2872 uint32_t roi_3_y_top:16;
2876 uint32_t roi_3_x_right:16;
2877 uint32_t roi_3_y_bottom:16;
2881 uint32_t roi_4_x_left:16;
2882 uint32_t roi_4_y_top:16;
2886 uint32_t roi_4_x_right:16;
2887 uint32_t roi_4_y_bottom:16;
2891 uint32_t roi_1_dqp_prime_y:8;
2892 uint32_t roi_2_dqp_prime_y:8;
2893 uint32_t roi_3_dqp_prime_y:8;
2894 uint32_t roi_4_dqp_prime_y:8;
2899 uint32_t lambda_8x8_inter:16;
2900 uint32_t lambda_8x8_intra:16;
2907 uint32_t lambda_inter:16;
2908 uint32_t lambda_intra:16;
2914 uint32_t mb_texture_threshold:16;
2915 uint32_t tx_decision_threshold:16;
2919 uint32_t hme_mv_cost_scaling_factor:8;
2920 uint32_t reserved0:8;
2921 uint32_t widi_intra_refresh_mb_y:16;
2941 uint32_t mb_data_surf_index;
2945 uint32_t mv_data_surf_index;
2949 uint32_t i_dist_surf_index;
2953 uint32_t src_y_surf_index;
2957 uint32_t mb_specific_data_surf_index;
2961 uint32_t aux_vme_out_surf_index;
2965 uint32_t curr_ref_pic_sel_surf_index;
2969 uint32_t hme_mv_pred_fwd_bwd_surf_index;
2973 uint32_t hme_dist_surf_index;
2977 uint32_t slice_map_surf_index;
2981 uint32_t fwd_frm_mb_data_surf_index;
2985 uint32_t fwd_frm_mv_surf_index;
2989 uint32_t mb_qp_buffer;
2993 uint32_t mb_brc_lut;
2997 uint32_t vme_inter_prediction_surf_index;
3001 uint32_t vme_inter_prediction_mr_surf_index;
3005 uint32_t mb_stats_surf_index;
3009 uint32_t mad_surf_index;
3013 uint32_t brc_curbe_surf_index;
3017 uint32_t force_non_skip_mb_map_surface;
3021 uint32_t widi_wa_surf_index;
3025 uint32_t static_detection_cost_table_index;
3028 } gen95_avc_mbenc_curbe_data;
3030 #endif /* GEN9_AVC_ENCODER_H */