1848b8605Smrg/************************************************************************** 2848b8605Smrg * 3848b8605Smrg * Copyright 2013 Advanced Micro Devices, Inc. 4848b8605Smrg * All Rights Reserved. 5848b8605Smrg * 6848b8605Smrg * Permission is hereby granted, free of charge, to any person obtaining a 7848b8605Smrg * copy of this software and associated documentation files (the 8848b8605Smrg * "Software"), to deal in the Software without restriction, including 9848b8605Smrg * without limitation the rights to use, copy, modify, merge, publish, 10848b8605Smrg * distribute, sub license, and/or sell copies of the Software, and to 11848b8605Smrg * permit persons to whom the Software is furnished to do so, subject to 12848b8605Smrg * the following conditions: 13848b8605Smrg * 14848b8605Smrg * The above copyright notice and this permission notice (including the 15848b8605Smrg * next paragraph) shall be included in all copies or substantial portions 16848b8605Smrg * of the Software. 17848b8605Smrg * 18848b8605Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19848b8605Smrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20848b8605Smrg * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21848b8605Smrg * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR 22848b8605Smrg * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23848b8605Smrg * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24848b8605Smrg * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25848b8605Smrg * 26848b8605Smrg **************************************************************************/ 27848b8605Smrg 28848b8605Smrg#ifndef RADEON_VCE_H 29848b8605Smrg#define RADEON_VCE_H 30848b8605Smrg 31b8e80941Smrg#include "util/list.h" 32848b8605Smrg 33b8e80941Smrg#define RVCE_CS(value) (enc->cs->current.buf[enc->cs->current.cdw++] = (value)) 34b8e80941Smrg#define RVCE_BEGIN(cmd) { \ 35b8e80941Smrg uint32_t *begin = &enc->cs->current.buf[enc->cs->current.cdw++]; \ 36b8e80941Smrg RVCE_CS(cmd) 37b8e80941Smrg#define RVCE_READ(buf, domain, off) si_vce_add_buffer(enc, (buf), RADEON_USAGE_READ, (domain), (off)) 38b8e80941Smrg#define RVCE_WRITE(buf, domain, off) si_vce_add_buffer(enc, (buf), RADEON_USAGE_WRITE, (domain), (off)) 39b8e80941Smrg#define RVCE_READWRITE(buf, domain, off) si_vce_add_buffer(enc, (buf), RADEON_USAGE_READWRITE, (domain), (off)) 40b8e80941Smrg#define RVCE_END() *begin = (&enc->cs->current.buf[enc->cs->current.cdw] - begin) * 4; } 41848b8605Smrg 42b8e80941Smrg#define RVCE_MAX_BITSTREAM_OUTPUT_ROW_SIZE (4096 * 16 * 2.5) 43b8e80941Smrg#define RVCE_MAX_AUX_BUFFER_NUM 4 44848b8605Smrg 45b8e80941Smrgstruct si_screen; 46848b8605Smrg 47848b8605Smrg/* driver dependent callback */ 48848b8605Smrgtypedef void (*rvce_get_buffer)(struct pipe_resource *resource, 49b8e80941Smrg struct pb_buffer **handle, 50b8e80941Smrg struct radeon_surf **surface); 51848b8605Smrg 52848b8605Smrg/* Coded picture buffer slot */ 53848b8605Smrgstruct rvce_cpb_slot { 54848b8605Smrg struct list_head list; 55848b8605Smrg 56848b8605Smrg unsigned index; 57848b8605Smrg enum pipe_h264_enc_picture_type picture_type; 58848b8605Smrg unsigned frame_num; 59848b8605Smrg unsigned pic_order_cnt; 60848b8605Smrg}; 61848b8605Smrg 62b8e80941Smrgstruct rvce_rate_control { 63b8e80941Smrg uint32_t rc_method; 64b8e80941Smrg uint32_t target_bitrate; 65b8e80941Smrg uint32_t peak_bitrate; 66b8e80941Smrg uint32_t frame_rate_num; 67b8e80941Smrg uint32_t gop_size; 68b8e80941Smrg uint32_t quant_i_frames; 69b8e80941Smrg uint32_t quant_p_frames; 70b8e80941Smrg uint32_t quant_b_frames; 71b8e80941Smrg uint32_t vbv_buffer_size; 72b8e80941Smrg uint32_t frame_rate_den; 73b8e80941Smrg uint32_t vbv_buf_lv; 74b8e80941Smrg uint32_t max_au_size; 75b8e80941Smrg uint32_t qp_initial_mode; 76b8e80941Smrg uint32_t target_bits_picture; 77b8e80941Smrg uint32_t peak_bits_picture_integer; 78b8e80941Smrg uint32_t peak_bits_picture_fraction; 79b8e80941Smrg uint32_t min_qp; 80b8e80941Smrg uint32_t max_qp; 81b8e80941Smrg uint32_t skip_frame_enable; 82b8e80941Smrg uint32_t fill_data_enable; 83b8e80941Smrg uint32_t enforce_hrd; 84b8e80941Smrg uint32_t b_pics_delta_qp; 85b8e80941Smrg uint32_t ref_b_pics_delta_qp; 86b8e80941Smrg uint32_t rc_reinit_disable; 87b8e80941Smrg uint32_t enc_lcvbr_init_qp_flag; 88b8e80941Smrg uint32_t lcvbrsatd_based_nonlinear_bit_budget_flag; 89b8e80941Smrg}; 90b8e80941Smrg 91b8e80941Smrgstruct rvce_motion_estimation { 92b8e80941Smrg uint32_t enc_ime_decimation_search; 93b8e80941Smrg uint32_t motion_est_half_pixel; 94b8e80941Smrg uint32_t motion_est_quarter_pixel; 95b8e80941Smrg uint32_t disable_favor_pmv_point; 96b8e80941Smrg uint32_t force_zero_point_center; 97b8e80941Smrg uint32_t lsmvert; 98b8e80941Smrg uint32_t enc_search_range_x; 99b8e80941Smrg uint32_t enc_search_range_y; 100b8e80941Smrg uint32_t enc_search1_range_x; 101b8e80941Smrg uint32_t enc_search1_range_y; 102b8e80941Smrg uint32_t disable_16x16_frame1; 103b8e80941Smrg uint32_t disable_satd; 104b8e80941Smrg uint32_t enable_amd; 105b8e80941Smrg uint32_t enc_disable_sub_mode; 106b8e80941Smrg uint32_t enc_ime_skip_x; 107b8e80941Smrg uint32_t enc_ime_skip_y; 108b8e80941Smrg uint32_t enc_en_ime_overw_dis_subm; 109b8e80941Smrg uint32_t enc_ime_overw_dis_subm_no; 110b8e80941Smrg uint32_t enc_ime2_search_range_x; 111b8e80941Smrg uint32_t enc_ime2_search_range_y; 112b8e80941Smrg uint32_t parallel_mode_speedup_enable; 113b8e80941Smrg uint32_t fme0_enc_disable_sub_mode; 114b8e80941Smrg uint32_t fme1_enc_disable_sub_mode; 115b8e80941Smrg uint32_t ime_sw_speedup_enable; 116b8e80941Smrg}; 117b8e80941Smrg 118b8e80941Smrgstruct rvce_pic_control { 119b8e80941Smrg uint32_t enc_use_constrained_intra_pred; 120b8e80941Smrg uint32_t enc_cabac_enable; 121b8e80941Smrg uint32_t enc_cabac_idc; 122b8e80941Smrg uint32_t enc_loop_filter_disable; 123b8e80941Smrg int32_t enc_lf_beta_offset; 124b8e80941Smrg int32_t enc_lf_alpha_c0_offset; 125b8e80941Smrg uint32_t enc_crop_left_offset; 126b8e80941Smrg uint32_t enc_crop_right_offset; 127b8e80941Smrg uint32_t enc_crop_top_offset; 128b8e80941Smrg uint32_t enc_crop_bottom_offset; 129b8e80941Smrg uint32_t enc_num_mbs_per_slice; 130b8e80941Smrg uint32_t enc_intra_refresh_num_mbs_per_slot; 131b8e80941Smrg uint32_t enc_force_intra_refresh; 132b8e80941Smrg uint32_t enc_force_imb_period; 133b8e80941Smrg uint32_t enc_pic_order_cnt_type; 134b8e80941Smrg uint32_t log2_max_pic_order_cnt_lsb_minus4; 135b8e80941Smrg uint32_t enc_sps_id; 136b8e80941Smrg uint32_t enc_pps_id; 137b8e80941Smrg uint32_t enc_constraint_set_flags; 138b8e80941Smrg uint32_t enc_b_pic_pattern; 139b8e80941Smrg uint32_t weight_pred_mode_b_picture; 140b8e80941Smrg uint32_t enc_number_of_reference_frames; 141b8e80941Smrg uint32_t enc_max_num_ref_frames; 142b8e80941Smrg uint32_t enc_num_default_active_ref_l0; 143b8e80941Smrg uint32_t enc_num_default_active_ref_l1; 144b8e80941Smrg uint32_t enc_slice_mode; 145b8e80941Smrg uint32_t enc_max_slice_size; 146b8e80941Smrg}; 147b8e80941Smrg 148b8e80941Smrgstruct rvce_task_info { 149b8e80941Smrg uint32_t offset_of_next_task_info; 150b8e80941Smrg uint32_t task_operation; 151b8e80941Smrg uint32_t reference_picture_dependency; 152b8e80941Smrg uint32_t collocate_flag_dependency; 153b8e80941Smrg uint32_t feedback_index; 154b8e80941Smrg uint32_t video_bitstream_ring_index; 155b8e80941Smrg}; 156b8e80941Smrg 157b8e80941Smrgstruct rvce_feedback_buf_pkg { 158b8e80941Smrg uint32_t feedback_ring_address_hi; 159b8e80941Smrg uint32_t feedback_ring_address_lo; 160b8e80941Smrg uint32_t feedback_ring_size; 161b8e80941Smrg}; 162b8e80941Smrg 163b8e80941Smrgstruct rvce_rdo { 164b8e80941Smrg uint32_t enc_disable_tbe_pred_i_frame; 165b8e80941Smrg uint32_t enc_disable_tbe_pred_p_frame; 166b8e80941Smrg uint32_t use_fme_interpol_y; 167b8e80941Smrg uint32_t use_fme_interpol_uv; 168b8e80941Smrg uint32_t use_fme_intrapol_y; 169b8e80941Smrg uint32_t use_fme_intrapol_uv; 170b8e80941Smrg uint32_t use_fme_interpol_y_1; 171b8e80941Smrg uint32_t use_fme_interpol_uv_1; 172b8e80941Smrg uint32_t use_fme_intrapol_y_1; 173b8e80941Smrg uint32_t use_fme_intrapol_uv_1; 174b8e80941Smrg uint32_t enc_16x16_cost_adj; 175b8e80941Smrg uint32_t enc_skip_cost_adj; 176b8e80941Smrg uint32_t enc_force_16x16_skip; 177b8e80941Smrg uint32_t enc_disable_threshold_calc_a; 178b8e80941Smrg uint32_t enc_luma_coeff_cost; 179b8e80941Smrg uint32_t enc_luma_mb_coeff_cost; 180b8e80941Smrg uint32_t enc_chroma_coeff_cost; 181b8e80941Smrg}; 182b8e80941Smrg 183b8e80941Smrgstruct rvce_vui { 184b8e80941Smrg uint32_t aspect_ratio_info_present_flag; 185b8e80941Smrg uint32_t aspect_ratio_idc; 186b8e80941Smrg uint32_t sar_width; 187b8e80941Smrg uint32_t sar_height; 188b8e80941Smrg uint32_t overscan_info_present_flag; 189b8e80941Smrg uint32_t overscan_Approp_flag; 190b8e80941Smrg uint32_t video_signal_type_present_flag; 191b8e80941Smrg uint32_t video_format; 192b8e80941Smrg uint32_t video_full_range_flag; 193b8e80941Smrg uint32_t color_description_present_flag; 194b8e80941Smrg uint32_t color_prim; 195b8e80941Smrg uint32_t transfer_char; 196b8e80941Smrg uint32_t matrix_coef; 197b8e80941Smrg uint32_t chroma_loc_info_present_flag; 198b8e80941Smrg uint32_t chroma_loc_top; 199b8e80941Smrg uint32_t chroma_loc_bottom; 200b8e80941Smrg uint32_t timing_info_present_flag; 201b8e80941Smrg uint32_t num_units_in_tick; 202b8e80941Smrg uint32_t time_scale; 203b8e80941Smrg uint32_t fixed_frame_rate_flag; 204b8e80941Smrg uint32_t nal_hrd_parameters_present_flag; 205b8e80941Smrg uint32_t cpb_cnt_minus1; 206b8e80941Smrg uint32_t bit_rate_scale; 207b8e80941Smrg uint32_t cpb_size_scale; 208b8e80941Smrg uint32_t bit_rate_value_minus; 209b8e80941Smrg uint32_t cpb_size_value_minus; 210b8e80941Smrg uint32_t cbr_flag; 211b8e80941Smrg uint32_t initial_cpb_removal_delay_length_minus1; 212b8e80941Smrg uint32_t cpb_removal_delay_length_minus1; 213b8e80941Smrg uint32_t dpb_output_delay_length_minus1; 214b8e80941Smrg uint32_t time_offset_length; 215b8e80941Smrg uint32_t low_delay_hrd_flag; 216b8e80941Smrg uint32_t pic_struct_present_flag; 217b8e80941Smrg uint32_t bitstream_restriction_present_flag; 218b8e80941Smrg uint32_t motion_vectors_over_pic_boundaries_flag; 219b8e80941Smrg uint32_t max_bytes_per_pic_denom; 220b8e80941Smrg uint32_t max_bits_per_mb_denom; 221b8e80941Smrg uint32_t log2_max_mv_length_hori; 222b8e80941Smrg uint32_t log2_max_mv_length_vert; 223b8e80941Smrg uint32_t num_reorder_frames; 224b8e80941Smrg uint32_t max_dec_frame_buffering; 225b8e80941Smrg}; 226b8e80941Smrg 227b8e80941Smrgstruct rvce_enc_operation { 228b8e80941Smrg uint32_t insert_headers; 229b8e80941Smrg uint32_t picture_structure; 230b8e80941Smrg uint32_t allowed_max_bitstream_size; 231b8e80941Smrg uint32_t force_refresh_map; 232b8e80941Smrg uint32_t insert_aud; 233b8e80941Smrg uint32_t end_of_sequence; 234b8e80941Smrg uint32_t end_of_stream; 235b8e80941Smrg uint32_t input_picture_luma_address_hi; 236b8e80941Smrg uint32_t input_picture_luma_address_lo; 237b8e80941Smrg uint32_t input_picture_chroma_address_hi; 238b8e80941Smrg uint32_t input_picture_chroma_address_lo; 239b8e80941Smrg uint32_t enc_input_frame_y_pitch; 240b8e80941Smrg uint32_t enc_input_pic_luma_pitch; 241b8e80941Smrg uint32_t enc_input_pic_chroma_pitch;; 242b8e80941Smrg uint32_t enc_input_pic_addr_array; 243b8e80941Smrg uint32_t enc_input_pic_addr_array_disable2pipe_disablemboffload; 244b8e80941Smrg uint32_t enc_input_pic_tile_config; 245b8e80941Smrg uint32_t enc_pic_type; 246b8e80941Smrg uint32_t enc_idr_flag; 247b8e80941Smrg uint32_t enc_idr_pic_id; 248b8e80941Smrg uint32_t enc_mgs_key_pic; 249b8e80941Smrg uint32_t enc_reference_flag; 250b8e80941Smrg uint32_t enc_temporal_layer_index; 251b8e80941Smrg uint32_t num_ref_idx_active_override_flag; 252b8e80941Smrg uint32_t num_ref_idx_l0_active_minus1; 253b8e80941Smrg uint32_t num_ref_idx_l1_active_minus1; 254b8e80941Smrg uint32_t enc_ref_list_modification_op; 255b8e80941Smrg uint32_t enc_ref_list_modification_num; 256b8e80941Smrg uint32_t enc_decoded_picture_marking_op; 257b8e80941Smrg uint32_t enc_decoded_picture_marking_num; 258b8e80941Smrg uint32_t enc_decoded_picture_marking_idx; 259b8e80941Smrg uint32_t enc_decoded_ref_base_picture_marking_op; 260b8e80941Smrg uint32_t enc_decoded_ref_base_picture_marking_num; 261b8e80941Smrg uint32_t l0_picture_structure; 262b8e80941Smrg uint32_t l0_enc_pic_type; 263b8e80941Smrg uint32_t l0_frame_number; 264b8e80941Smrg uint32_t l0_picture_order_count; 265b8e80941Smrg uint32_t l0_luma_offset; 266b8e80941Smrg uint32_t l0_chroma_offset; 267b8e80941Smrg uint32_t l1_picture_structure; 268b8e80941Smrg uint32_t l1_enc_pic_type; 269b8e80941Smrg uint32_t l1_frame_number; 270b8e80941Smrg uint32_t l1_picture_order_count; 271b8e80941Smrg uint32_t l1_luma_offset; 272b8e80941Smrg uint32_t l1_chroma_offset; 273b8e80941Smrg uint32_t enc_reconstructed_luma_offset; 274b8e80941Smrg uint32_t enc_reconstructed_chroma_offset;; 275b8e80941Smrg uint32_t enc_coloc_buffer_offset; 276b8e80941Smrg uint32_t enc_reconstructed_ref_base_picture_luma_offset; 277b8e80941Smrg uint32_t enc_reconstructed_ref_base_picture_chroma_offset; 278b8e80941Smrg uint32_t enc_reference_ref_base_picture_luma_offset; 279b8e80941Smrg uint32_t enc_reference_ref_base_picture_chroma_offset; 280b8e80941Smrg uint32_t picture_count; 281b8e80941Smrg uint32_t frame_number; 282b8e80941Smrg uint32_t picture_order_count; 283b8e80941Smrg uint32_t num_i_pic_remain_in_rcgop; 284b8e80941Smrg uint32_t num_p_pic_remain_in_rcgop; 285b8e80941Smrg uint32_t num_b_pic_remain_in_rcgop; 286b8e80941Smrg uint32_t num_ir_pic_remain_in_rcgop; 287b8e80941Smrg uint32_t enable_intra_refresh; 288b8e80941Smrg uint32_t aq_variance_en; 289b8e80941Smrg uint32_t aq_block_size; 290b8e80941Smrg uint32_t aq_mb_variance_sel; 291b8e80941Smrg uint32_t aq_frame_variance_sel; 292b8e80941Smrg uint32_t aq_param_a; 293b8e80941Smrg uint32_t aq_param_b; 294b8e80941Smrg uint32_t aq_param_c; 295b8e80941Smrg uint32_t aq_param_d; 296b8e80941Smrg uint32_t aq_param_e; 297b8e80941Smrg uint32_t context_in_sfb; 298b8e80941Smrg}; 299b8e80941Smrg 300b8e80941Smrgstruct rvce_enc_create { 301b8e80941Smrg uint32_t enc_use_circular_buffer; 302b8e80941Smrg uint32_t enc_profile; 303b8e80941Smrg uint32_t enc_level; 304b8e80941Smrg uint32_t enc_pic_struct_restriction; 305b8e80941Smrg uint32_t enc_image_width; 306b8e80941Smrg uint32_t enc_image_height; 307b8e80941Smrg uint32_t enc_ref_pic_luma_pitch; 308b8e80941Smrg uint32_t enc_ref_pic_chroma_pitch; 309b8e80941Smrg uint32_t enc_ref_y_height_in_qw; 310b8e80941Smrg uint32_t enc_ref_pic_addr_array_enc_pic_struct_restriction_disable_rdo; 311b8e80941Smrg uint32_t enc_pre_encode_context_buffer_offset; 312b8e80941Smrg uint32_t enc_pre_encode_input_luma_buffer_offset; 313b8e80941Smrg uint32_t enc_pre_encode_input_chroma_buffer_offset; 314b8e80941Smrg uint32_t enc_pre_encode_mode_chromaflag_vbaqmode_scenechangesensitivity; 315b8e80941Smrg}; 316b8e80941Smrg 317b8e80941Smrgstruct rvce_config_ext { 318b8e80941Smrg uint32_t enc_enable_perf_logging; 319b8e80941Smrg}; 320b8e80941Smrg 321b8e80941Smrgstruct rvce_h264_enc_pic { 322b8e80941Smrg struct rvce_rate_control rc; 323b8e80941Smrg struct rvce_motion_estimation me; 324b8e80941Smrg struct rvce_pic_control pc; 325b8e80941Smrg struct rvce_task_info ti; 326b8e80941Smrg struct rvce_feedback_buf_pkg fb; 327b8e80941Smrg struct rvce_rdo rdo; 328b8e80941Smrg struct rvce_vui vui; 329b8e80941Smrg struct rvce_enc_operation eo; 330b8e80941Smrg struct rvce_enc_create ec; 331b8e80941Smrg struct rvce_config_ext ce; 332b8e80941Smrg 333b8e80941Smrg unsigned quant_i_frames; 334b8e80941Smrg unsigned quant_p_frames; 335b8e80941Smrg unsigned quant_b_frames; 336b8e80941Smrg 337b8e80941Smrg enum pipe_h264_enc_picture_type picture_type; 338b8e80941Smrg unsigned frame_num; 339b8e80941Smrg unsigned frame_num_cnt; 340b8e80941Smrg unsigned p_remain; 341b8e80941Smrg unsigned i_remain; 342b8e80941Smrg unsigned idr_pic_id; 343b8e80941Smrg unsigned gop_cnt; 344b8e80941Smrg unsigned gop_size; 345b8e80941Smrg unsigned pic_order_cnt; 346b8e80941Smrg unsigned ref_idx_l0; 347b8e80941Smrg unsigned ref_idx_l1; 348b8e80941Smrg unsigned addrmode_arraymode_disrdo_distwoinstants; 349b8e80941Smrg 350b8e80941Smrg bool not_referenced; 351b8e80941Smrg bool is_idr; 352b8e80941Smrg bool has_ref_pic_list; 353b8e80941Smrg bool enable_vui; 354b8e80941Smrg unsigned int ref_pic_list_0[32]; 355b8e80941Smrg unsigned int ref_pic_list_1[32]; 356b8e80941Smrg unsigned int frame_idx[32]; 357b8e80941Smrg}; 358b8e80941Smrg 359848b8605Smrg/* VCE encoder representation */ 360848b8605Smrgstruct rvce_encoder { 361848b8605Smrg struct pipe_video_codec base; 362848b8605Smrg 363848b8605Smrg /* version specific packets */ 364848b8605Smrg void (*session)(struct rvce_encoder *enc); 365848b8605Smrg void (*create)(struct rvce_encoder *enc); 366848b8605Smrg void (*feedback)(struct rvce_encoder *enc); 367848b8605Smrg void (*rate_control)(struct rvce_encoder *enc); 368848b8605Smrg void (*config_extension)(struct rvce_encoder *enc); 369848b8605Smrg void (*pic_control)(struct rvce_encoder *enc); 370848b8605Smrg void (*motion_estimation)(struct rvce_encoder *enc); 371848b8605Smrg void (*rdo)(struct rvce_encoder *enc); 372b8e80941Smrg void (*vui)(struct rvce_encoder *enc); 373b8e80941Smrg void (*config)(struct rvce_encoder *enc); 374848b8605Smrg void (*encode)(struct rvce_encoder *enc); 375848b8605Smrg void (*destroy)(struct rvce_encoder *enc); 376b8e80941Smrg void (*task_info)(struct rvce_encoder *enc, uint32_t op, 377b8e80941Smrg uint32_t dep, uint32_t fb_idx, 378b8e80941Smrg uint32_t ring_idx); 379848b8605Smrg 380848b8605Smrg unsigned stream_handle; 381848b8605Smrg 382b8e80941Smrg struct pipe_screen *screen; 383848b8605Smrg struct radeon_winsys* ws; 384b8e80941Smrg struct radeon_cmdbuf* cs; 385848b8605Smrg 386848b8605Smrg rvce_get_buffer get_buffer; 387848b8605Smrg 388b8e80941Smrg struct pb_buffer* handle; 389b8e80941Smrg struct radeon_surf* luma; 390b8e80941Smrg struct radeon_surf* chroma; 391848b8605Smrg 392b8e80941Smrg struct pb_buffer* bs_handle; 393848b8605Smrg unsigned bs_size; 394848b8605Smrg 395848b8605Smrg struct rvce_cpb_slot *cpb_array; 396848b8605Smrg struct list_head cpb_slots; 397848b8605Smrg unsigned cpb_num; 398848b8605Smrg 399848b8605Smrg struct rvid_buffer *fb; 400848b8605Smrg struct rvid_buffer cpb; 401848b8605Smrg struct pipe_h264_enc_picture_desc pic; 402b8e80941Smrg struct rvce_h264_enc_pic enc_pic; 403b8e80941Smrg 404b8e80941Smrg unsigned task_info_idx; 405b8e80941Smrg unsigned bs_idx; 406b8e80941Smrg 407b8e80941Smrg bool use_vm; 408b8e80941Smrg bool use_vui; 409b8e80941Smrg bool dual_pipe; 410b8e80941Smrg bool dual_inst; 411848b8605Smrg}; 412848b8605Smrg 413b8e80941Smrg/* CPB handling functions */ 414b8e80941Smrgstruct rvce_cpb_slot *si_current_slot(struct rvce_encoder *enc); 415b8e80941Smrgstruct rvce_cpb_slot *si_l0_slot(struct rvce_encoder *enc); 416b8e80941Smrgstruct rvce_cpb_slot *si_l1_slot(struct rvce_encoder *enc); 417b8e80941Smrgvoid si_vce_frame_offset(struct rvce_encoder *enc, struct rvce_cpb_slot *slot, 418b8e80941Smrg signed *luma_offset, signed *chroma_offset); 419b8e80941Smrg 420b8e80941Smrgstruct pipe_video_codec *si_vce_create_encoder(struct pipe_context *context, 421b8e80941Smrg const struct pipe_video_codec *templat, 422b8e80941Smrg struct radeon_winsys* ws, 423b8e80941Smrg rvce_get_buffer get_buffer); 424b8e80941Smrg 425b8e80941Smrgbool si_vce_is_fw_version_supported(struct si_screen *sscreen); 426848b8605Smrg 427b8e80941Smrgvoid si_vce_add_buffer(struct rvce_encoder *enc, struct pb_buffer *buf, 428b8e80941Smrg enum radeon_bo_usage usage, enum radeon_bo_domain domain, 429b8e80941Smrg signed offset); 430848b8605Smrg 431848b8605Smrg/* init vce fw 40.2.2 specific callbacks */ 432b8e80941Smrgvoid si_vce_40_2_2_init(struct rvce_encoder *enc); 433b8e80941Smrg 434b8e80941Smrg/* init vce fw 50 specific callbacks */ 435b8e80941Smrgvoid si_vce_50_init(struct rvce_encoder *enc); 436b8e80941Smrg 437b8e80941Smrg/* init vce fw 52 specific callbacks */ 438b8e80941Smrgvoid si_vce_52_init(struct rvce_encoder *enc); 439b8e80941Smrg 440b8e80941Smrg/* version specific function for getting parameters */ 441b8e80941Smrgvoid (*si_get_pic_param)(struct rvce_encoder *enc, 442b8e80941Smrg struct pipe_h264_enc_picture_desc *pic); 443b8e80941Smrg 444b8e80941Smrg/* get parameters for vce 40.2.2 */ 445b8e80941Smrgvoid si_vce_40_2_2_get_param(struct rvce_encoder *enc, 446b8e80941Smrg struct pipe_h264_enc_picture_desc *pic); 447b8e80941Smrg 448b8e80941Smrg/* get parameters for vce 50 */ 449b8e80941Smrgvoid si_vce_50_get_param(struct rvce_encoder *enc, 450b8e80941Smrg struct pipe_h264_enc_picture_desc *pic); 451b8e80941Smrg 452b8e80941Smrg/* get parameters for vce 52 */ 453b8e80941Smrgvoid si_vce_52_get_param(struct rvce_encoder *enc, 454b8e80941Smrg struct pipe_h264_enc_picture_desc *pic); 455848b8605Smrg 456848b8605Smrg#endif 457