1 /************************************************************************** 2 * 3 * Copyright 2017 Advanced Micro Devices, Inc. 4 * All Rights Reserved. 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a 7 * copy of this software and associated documentation files (the 8 * "Software"), to deal in the Software without restriction, including 9 * without limitation the rights to use, copy, modify, merge, publish, 10 * distribute, sub license, and/or sell copies of the Software, and to 11 * permit persons to whom the Software is furnished to do so, subject to 12 * the following conditions: 13 * 14 * The above copyright notice and this permission notice (including the 15 * next paragraph) shall be included in all copies or substantial portions 16 * of the Software. 17 * 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21 * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR 22 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25 * 26 **************************************************************************/ 27 28 #ifndef AC_VCN_ENC_H 29 #define AC_VCN_ENC_H 30 31 #define RENCODE_IB_OP_INITIALIZE 0x01000001 32 #define RENCODE_IB_OP_CLOSE_SESSION 0x01000002 33 #define RENCODE_IB_OP_ENCODE 0x01000003 34 #define RENCODE_IB_OP_INIT_RC 0x01000004 35 #define RENCODE_IB_OP_INIT_RC_VBV_BUFFER_LEVEL 0x01000005 36 #define RENCODE_IB_OP_SET_SPEED_ENCODING_MODE 0x01000006 37 #define RENCODE_IB_OP_SET_BALANCE_ENCODING_MODE 0x01000007 38 #define RENCODE_IB_OP_SET_QUALITY_ENCODING_MODE 0x01000008 39 #define RENCODE_IB_OP_SET_HIGH_QUALITY_ENCODING_MODE 0x01000009 40 41 #define RENCODE_IF_MAJOR_VERSION_MASK 0xFFFF0000 42 #define RENCODE_IF_MAJOR_VERSION_SHIFT 16 43 #define RENCODE_IF_MINOR_VERSION_MASK 0x0000FFFF 44 #define RENCODE_IF_MINOR_VERSION_SHIFT 0 45 46 #define RENCODE_ENGINE_TYPE_ENCODE 1 47 48 #define RENCODE_ENCODE_STANDARD_HEVC 0 49 #define RENCODE_ENCODE_STANDARD_H264 1 50 #define RENCODE_ENCODE_STANDARD_AV1 2 51 52 #define RENCODE_PREENCODE_MODE_NONE 0x00000000 53 #define RENCODE_PREENCODE_MODE_1X 0x00000001 54 #define RENCODE_PREENCODE_MODE_2X 0x00000002 55 #define RENCODE_PREENCODE_MODE_4X 0x00000004 56 57 #define RENCODE_VBAQ_NONE 0x00000000 58 #define RENCODE_VBAQ_AUTO 0x00000001 59 60 #define RENCODE_PRESET_MODE_SPEED 0x00000000 61 #define RENCODE_PRESET_MODE_BALANCE 0x00000001 62 #define RENCODE_PRESET_MODE_QUALITY 0x00000002 63 #define RENCODE_PRESET_MODE_HIGH_QUALITY 0x00000003 64 65 #define RENCODE_H264_SLICE_CONTROL_MODE_FIXED_MBS 0x00000000 66 #define RENCODE_H264_SLICE_CONTROL_MODE_FIXED_BITS 0x00000001 67 68 #define RENCODE_HEVC_SLICE_CONTROL_MODE_FIXED_CTBS 0x00000000 69 #define RENCODE_HEVC_SLICE_CONTROL_MODE_FIXED_BITS 0x00000001 70 71 #define RENCODE_RATE_CONTROL_METHOD_NONE 0x00000000 72 #define RENCODE_RATE_CONTROL_METHOD_LATENCY_CONSTRAINED_VBR 0x00000001 73 #define RENCODE_RATE_CONTROL_METHOD_PEAK_CONSTRAINED_VBR 0x00000002 74 #define RENCODE_RATE_CONTROL_METHOD_CBR 0x00000003 75 76 #define RENCODE_DIRECT_OUTPUT_NALU_TYPE_AUD 0x00000000 77 #define RENCODE_DIRECT_OUTPUT_NALU_TYPE_VPS 0x00000001 78 #define RENCODE_DIRECT_OUTPUT_NALU_TYPE_SPS 0x00000002 79 #define RENCODE_DIRECT_OUTPUT_NALU_TYPE_PPS 0x00000003 80 #define RENCODE_DIRECT_OUTPUT_NALU_TYPE_PREFIX 0x00000004 81 #define RENCODE_DIRECT_OUTPUT_NALU_TYPE_END_OF_SEQUENCE 0x00000005 82 #define RENCODE_DIRECT_OUTPUT_NALU_TYPE_SEI 0x00000006 83 84 #define RENCODE_SLICE_HEADER_TEMPLATE_MAX_TEMPLATE_SIZE_IN_DWORDS 16 85 #define RENCODE_SLICE_HEADER_TEMPLATE_MAX_NUM_INSTRUCTIONS 16 86 87 #define RENCODE_HEADER_INSTRUCTION_END 0x00000000 88 #define RENCODE_HEADER_INSTRUCTION_COPY 0x00000001 89 90 #define RENCODE_HEVC_HEADER_INSTRUCTION_DEPENDENT_SLICE_END 0x00010000 91 #define RENCODE_HEVC_HEADER_INSTRUCTION_FIRST_SLICE 0x00010001 92 #define RENCODE_HEVC_HEADER_INSTRUCTION_SLICE_SEGMENT 0x00010002 93 #define RENCODE_HEVC_HEADER_INSTRUCTION_SLICE_QP_DELTA 0x00010003 94 #define RENCODE_HEVC_HEADER_INSTRUCTION_SAO_ENABLE 0x00010004 95 #define RENCODE_HEVC_HEADER_INSTRUCTION_LOOP_FILTER_ACROSS_SLICES_ENABLE 0x00010005 96 97 #define RENCODE_H264_HEADER_INSTRUCTION_FIRST_MB 0x00020000 98 #define RENCODE_H264_HEADER_INSTRUCTION_SLICE_QP_DELTA 0x00020001 99 100 #define RENCODE_AV1_BITSTREAM_INSTRUCTION_OBU_START 0x00000002 101 #define RENCODE_AV1_BITSTREAM_INSTRUCTION_OBU_SIZE 0x00000003 102 #define RENCODE_AV1_BITSTREAM_INSTRUCTION_OBU_END 0x00000004 103 104 #define RENCODE_OBU_START_TYPE_FRAME 1 105 #define RENCODE_OBU_START_TYPE_FRAME_HEADER 2 106 #define RENCODE_OBU_START_TYPE_TILE_GROUP 3 107 108 #define RENCODE_OBU_TYPE_SEQUENCE_HEADER 1 109 #define RENCODE_OBU_TYPE_TEMPORAL_DELIMITER 2 110 #define RENCODE_OBU_TYPE_FRAME_HEADER 3 111 #define RENCODE_OBU_TYPE_TILE_GROUP 4 112 #define RENCODE_OBU_TYPE_METADATA 5 113 #define RENCODE_OBU_TYPE_FRAME 6 114 #define RENCODE_OBU_TYPE_REDUNDANT_FRAME_HEADER 7 115 #define RENCODE_OBU_TYPE_TILE_LIST 8 116 #define RENCODE_OBU_TYPE_PADDING 15 117 118 #define RENCODE_AV1_MV_PRECISION_ALLOW_HIGH_PRECISION 0x00 119 #define RENCODE_AV1_MV_PRECISION_DISALLOW_HIGH_PRECISION 0x10 120 #define RENCODE_AV1_MV_PRECISION_FORCE_INTEGER_MV 0x30 121 122 #define RENCODE_AV1_CDEF_MODE_DISABLE 0 123 #define RENCODE_AV1_CDEF_MODE_ENABLE 1 124 125 #define RENCODE_AV1_ORDER_HINT_BITS 8 126 #define RENCODE_AV1_DELTA_FRAME_ID_LENGTH 15 127 #define RENCODE_AV1_ADDITIONAL_FRAME_ID_LENGTH 1 128 129 #define RENCDOE_AV1_NUM_REF_FRAMES 8 130 #define RENCDOE_AV1_REFS_PER_FRAME 7 131 #define RENCODE_AV1_SDB_FRAME_CONTEXT_SIZE 947200 132 #define RENCODE_AV1_FRAME_CONTEXT_CDF_TABLE_SIZE 22528 133 #define RENCODE_AV1_CDEF_ALGORITHM_FRAME_CONTEXT_SIZE (64 * 8 * 2) 134 135 #define RENCODE_PICTURE_TYPE_B 0 136 #define RENCODE_PICTURE_TYPE_P 1 137 #define RENCODE_PICTURE_TYPE_I 2 138 #define RENCODE_PICTURE_TYPE_P_SKIP 3 139 140 #define RENCODE_INPUT_SWIZZLE_MODE_LINEAR 0 141 #define RENCODE_INPUT_SWIZZLE_MODE_256B_S 1 142 #define RENCODE_INPUT_SWIZZLE_MODE_4kB_S 5 143 #define RENCODE_INPUT_SWIZZLE_MODE_64kB_S 9 144 145 #define RENCODE_H264_PICTURE_STRUCTURE_FRAME 0 146 #define RENCODE_H264_PICTURE_STRUCTURE_TOP_FIELD 1 147 #define RENCODE_H264_PICTURE_STRUCTURE_BOTTOM_FIELD 2 148 149 #define RENCODE_H264_INTERLACING_MODE_PROGRESSIVE 0 150 #define RENCODE_H264_INTERLACING_MODE_INTERLACED_STACKED 1 151 #define RENCODE_H264_INTERLACING_MODE_INTERLACED_INTERLEAVED 2 152 153 #define RENCODE_H264_DISABLE_DEBLOCKING_FILTER_IDC_ENABLE 0 154 #define RENCODE_H264_DISABLE_DEBLOCKING_FILTER_IDC_DISABLE 1 155 #define RENCODE_H264_DISABLE_DEBLOCKING_FILTER_IDC_DISABLE_ACROSS_SLICE_BOUNDARY 2 156 157 #define RENCODE_INTRA_REFRESH_MODE_NONE 0 158 #define RENCODE_INTRA_REFRESH_MODE_CTB_MB_ROWS 1 159 #define RENCODE_INTRA_REFRESH_MODE_CTB_MB_COLUMNS 2 160 161 #define RENCODE_MAX_NUM_RECONSTRUCTED_PICTURES 34 162 163 #define RENCODE_REC_SWIZZLE_MODE_LINEAR 0 164 #define RENCODE_REC_SWIZZLE_MODE_256B_S 1 165 #define RENCODE_REC_SWIZZLE_MODE_256B_D 2 166 #define RENCODE_REC_SWIZZLE_MODE_8x8_1D_THIN_12_24BPP 0x10000001 167 168 #define RENCODE_VIDEO_BITSTREAM_BUFFER_MODE_LINEAR 0 169 #define RENCODE_VIDEO_BITSTREAM_BUFFER_MODE_CIRCULAR 1 170 171 #define RENCODE_FEEDBACK_BUFFER_MODE_LINEAR 0 172 #define RENCODE_FEEDBACK_BUFFER_MODE_CIRCULAR 1 173 174 #define RENCODE_STATISTICS_TYPE_NONE 0 175 #define RENCODE_STATISTICS_TYPE_0 1 176 177 #define RENCODE_MAX_NUM_TEMPORAL_LAYERS 4 178 179 #define PIPE_AV1_ENC_SB_SIZE 64 180 #define PIPE_H265_ENC_CTB_SIZE 64 181 #define PIPE_H264_MB_SIZE 16 182 183 #define RENCODE_COLOR_VOLUME_G22_BT709 0 184 185 #define RENCODE_COLOR_RANGE_FULL 0 186 #define RENCODE_COLOR_RANGE_STUDIO 1 187 #define RENCODE_CHROMA_LOCATION_INTERSTITIAL 0 188 189 #define RENCODE_COLOR_BIT_DEPTH_8_BIT 0 190 #define RENCODE_COLOR_BIT_DEPTH_10_BIT 1 191 192 #define RENCODE_CHROMA_SUBSAMPLING_4_2_0 0 193 #define RENCODE_CHROMA_SUBSAMPLING_4_4_4 1 194 195 #define RENCODE_COLOR_PACKING_FORMAT_NV12 0 196 #define RENCODE_COLOR_PACKING_FORMAT_P010 1 197 #define RENCODE_COLOR_PACKING_FORMAT_A8R8G8B8 4 198 #define RENCODE_COLOR_PACKING_FORMAT_A8B8G8R8 7 199 200 #define RENCODE_COLOR_SPACE_YUV 0 201 #define RENCODE_COLOR_SPACE_RGB 1 202 203 #define RENCODE_VCN4_AV1_MAX_NUM_LTR 2 204 205 typedef struct rvcn_enc_session_info_s { 206 uint32_t interface_version; 207 uint32_t sw_context_address_hi; 208 uint32_t sw_context_address_lo; 209 } rvcn_enc_session_info_t; 210 211 typedef struct rvcn_enc_task_info_s { 212 uint32_t total_size_of_all_packages; 213 uint32_t task_id; 214 uint32_t allowed_max_num_feedbacks; 215 } rvcn_enc_task_info_t; 216 217 typedef struct rvcn_enc_session_init_s { 218 uint32_t encode_standard; 219 uint32_t aligned_picture_width; 220 uint32_t aligned_picture_height; 221 uint32_t padding_width; 222 uint32_t padding_height; 223 uint32_t pre_encode_mode; 224 uint32_t pre_encode_chroma_enabled; 225 uint32_t slice_output_enabled; 226 uint32_t display_remote; 227 } rvcn_enc_session_init_t; 228 229 typedef struct rvcn_enc_layer_control_s { 230 uint32_t max_num_temporal_layers; 231 uint32_t num_temporal_layers; 232 } rvcn_enc_layer_control_t; 233 234 typedef struct rvcn_enc_layer_select_s { 235 uint32_t temporal_layer_index; 236 } rvcn_enc_layer_select_t; 237 238 typedef struct rvcn_enc_h264_slice_control_s { 239 uint32_t slice_control_mode; 240 union { 241 uint32_t num_mbs_per_slice; 242 uint32_t num_bits_per_slice; 243 }; 244 } rvcn_enc_h264_slice_control_t; 245 246 typedef struct rvcn_enc_hevc_slice_control_s { 247 uint32_t slice_control_mode; 248 union { 249 struct { 250 uint32_t num_ctbs_per_slice; 251 uint32_t num_ctbs_per_slice_segment; 252 } fixed_ctbs_per_slice; 253 254 struct { 255 uint32_t num_bits_per_slice; 256 uint32_t num_bits_per_slice_segment; 257 } fixed_bits_per_slice; 258 }; 259 } rvcn_enc_hevc_slice_control_t; 260 261 typedef struct rvcn_enc_h264_spec_misc_s { 262 uint32_t constrained_intra_pred_flag; 263 uint32_t cabac_enable; 264 uint32_t cabac_init_idc; 265 uint32_t half_pel_enabled; 266 uint32_t quarter_pel_enabled; 267 uint32_t profile_idc; 268 uint32_t level_idc; 269 uint32_t b_picture_enabled; 270 uint32_t weighted_bipred_idc; 271 struct { 272 uint32_t deblocking_filter_control_present_flag:1; 273 uint32_t redundant_pic_cnt_present_flag:1; 274 }; 275 } rvcn_enc_h264_spec_misc_t; 276 277 typedef struct rvcn_enc_hevc_spec_misc_s { 278 uint32_t log2_min_luma_coding_block_size_minus3; 279 uint32_t amp_disabled; 280 uint32_t strong_intra_smoothing_enabled; 281 uint32_t constrained_intra_pred_flag; 282 uint32_t cabac_init_flag; 283 uint32_t half_pel_enabled; 284 uint32_t quarter_pel_enabled; 285 uint32_t transform_skip_discarded; 286 uint32_t cu_qp_delta_enabled_flag; 287 } rvcn_enc_hevc_spec_misc_t; 288 289 typedef struct rvcn_enc_av1_spec_misc_s { 290 uint32_t palette_mode_enable; 291 uint32_t mv_precision; 292 uint32_t cdef_mode; 293 uint32_t disable_cdf_update; 294 uint32_t disable_frame_end_update_cdf; 295 uint32_t num_tiles_per_picture; 296 } rvcn_enc_av1_spec_misc_t; 297 298 typedef struct rvcn_enc_rate_ctl_session_init_s { 299 uint32_t rate_control_method; 300 uint32_t vbv_buffer_level; 301 } rvcn_enc_rate_ctl_session_init_t; 302 303 typedef struct rvcn_enc_rate_ctl_layer_init_s { 304 uint32_t target_bit_rate; 305 uint32_t peak_bit_rate; 306 uint32_t frame_rate_num; 307 uint32_t frame_rate_den; 308 uint32_t vbv_buffer_size; 309 uint32_t avg_target_bits_per_picture; 310 uint32_t peak_bits_per_picture_integer; 311 uint32_t peak_bits_per_picture_fractional; 312 } rvcn_enc_rate_ctl_layer_init_t; 313 314 typedef struct rvcn_enc_rate_ctl_per_picture_s { 315 uint32_t qp; 316 uint32_t min_qp_app; 317 uint32_t max_qp_app; 318 uint32_t max_au_size; 319 uint32_t enabled_filler_data; 320 uint32_t skip_frame_enable; 321 uint32_t enforce_hrd; 322 } rvcn_enc_rate_ctl_per_picture_t; 323 324 typedef struct rvcn_enc_quality_params_s { 325 uint32_t vbaq_mode; 326 uint32_t scene_change_sensitivity; 327 uint32_t scene_change_min_idr_interval; 328 uint32_t two_pass_search_center_map_mode; 329 uint32_t vbaq_strength; 330 } rvcn_enc_quality_params_t; 331 332 typedef struct rvcn_enc_direct_output_nalu_s { 333 uint32_t type; 334 uint32_t size; 335 uint32_t data[1]; 336 } rvcn_enc_direct_output_nalu_t; 337 338 typedef struct rvcn_enc_slice_header_s { 339 uint32_t bitstream_template[RENCODE_SLICE_HEADER_TEMPLATE_MAX_TEMPLATE_SIZE_IN_DWORDS]; 340 struct { 341 uint32_t instruction; 342 uint32_t num_bits; 343 } instructions[RENCODE_SLICE_HEADER_TEMPLATE_MAX_NUM_INSTRUCTIONS]; 344 } rvcn_enc_slice_header_t; 345 346 typedef struct rvcn_enc_h264_reference_picture_info_s { 347 unsigned int pic_type; 348 unsigned int is_long_term; 349 unsigned int picture_structure; 350 unsigned int pic_order_cnt; 351 } rvcn_enc_h264_reference_picture_info_t; 352 353 typedef struct rvcn_enc_encode_params_s { 354 uint32_t pic_type; 355 uint32_t allowed_max_bitstream_size; 356 uint32_t input_picture_luma_address_hi; 357 uint32_t input_picture_luma_address_lo; 358 uint32_t input_picture_chroma_address_hi; 359 uint32_t input_picture_chroma_address_lo; 360 uint32_t input_pic_luma_pitch; 361 uint32_t input_pic_chroma_pitch; 362 uint8_t input_pic_swizzle_mode; 363 uint32_t reference_picture_index; 364 uint32_t reconstructed_picture_index; 365 } rvcn_enc_encode_params_t; 366 367 typedef struct rvcn_enc_h264_encode_params_s { 368 uint32_t input_picture_structure; 369 uint32_t input_pic_order_cnt; 370 uint32_t interlaced_mode; 371 uint32_t reference_picture_structure; 372 uint32_t reference_picture1_index; 373 rvcn_enc_h264_reference_picture_info_t picture_info_l0_reference_picture0; 374 uint32_t l0_reference_picture1_index; 375 rvcn_enc_h264_reference_picture_info_t picture_info_l0_reference_picture1; 376 uint32_t l1_reference_picture0_index; 377 rvcn_enc_h264_reference_picture_info_t picture_info_l1_reference_picture0; 378 uint32_t is_reference; 379 } rvcn_enc_h264_encode_params_t; 380 381 typedef struct rvcn_enc_h264_deblocking_filter_s { 382 uint32_t disable_deblocking_filter_idc; 383 int32_t alpha_c0_offset_div2; 384 int32_t beta_offset_div2; 385 int32_t cb_qp_offset; 386 int32_t cr_qp_offset; 387 } rvcn_enc_h264_deblocking_filter_t; 388 389 typedef struct rvcn_enc_hevc_deblocking_filter_s { 390 uint32_t loop_filter_across_slices_enabled; 391 int32_t deblocking_filter_disabled; 392 int32_t beta_offset_div2; 393 int32_t tc_offset_div2; 394 int32_t cb_qp_offset; 395 int32_t cr_qp_offset; 396 } rvcn_enc_hevc_deblocking_filter_t; 397 398 typedef struct rvcn_enc_intra_refresh_s { 399 uint32_t intra_refresh_mode; 400 uint32_t offset; 401 uint32_t region_size; 402 } rvcn_enc_intra_refresh_t; 403 404 typedef struct rvcn_enc_reconstructed_picture_s { 405 uint32_t luma_offset; 406 uint32_t chroma_offset; 407 union { 408 struct 409 { 410 uint32_t av1_cdf_frame_context_offset; 411 uint32_t av1_cdef_algorithm_context_offset; 412 } av1; 413 }; 414 } rvcn_enc_reconstructed_picture_t; 415 416 typedef struct rvcn_enc_picture_info_s 417 { 418 bool in_use; 419 bool is_ltr; 420 uint32_t pic_num; 421 } rvcn_enc_picture_info_t; 422 423 typedef struct rvcn_enc_pre_encode_input_picture_s { 424 union { 425 struct { 426 uint32_t luma_offset; 427 uint32_t chroma_offset; 428 } yuv; 429 struct { 430 uint32_t red_offset; 431 uint32_t green_offset; 432 uint32_t blue_offset; 433 } rgb; 434 }; 435 } rvcn_enc_pre_encode_input_picture_t; 436 437 typedef struct rvcn_enc_encode_context_buffer_s { 438 uint32_t encode_context_address_hi; 439 uint32_t encode_context_address_lo; 440 uint32_t swizzle_mode; 441 uint32_t rec_luma_pitch; 442 uint32_t rec_chroma_pitch; 443 uint32_t num_reconstructed_pictures; 444 rvcn_enc_reconstructed_picture_t reconstructed_pictures[RENCODE_MAX_NUM_RECONSTRUCTED_PICTURES]; 445 uint32_t pre_encode_picture_luma_pitch; 446 uint32_t pre_encode_picture_chroma_pitch; 447 rvcn_enc_reconstructed_picture_t 448 pre_encode_reconstructed_pictures[RENCODE_MAX_NUM_RECONSTRUCTED_PICTURES]; 449 rvcn_enc_pre_encode_input_picture_t pre_encode_input_picture; 450 uint32_t two_pass_search_center_map_offset; 451 union { 452 uint32_t colloc_buffer_offset; 453 struct { 454 uint32_t av1_sdb_intermedidate_context_offset; 455 } av1; 456 }; 457 } rvcn_enc_encode_context_buffer_t; 458 459 typedef struct rvcn_enc_video_bitstream_buffer_s { 460 uint32_t mode; 461 uint32_t video_bitstream_buffer_address_hi; 462 uint32_t video_bitstream_buffer_address_lo; 463 uint32_t video_bitstream_buffer_size; 464 uint32_t video_bitstream_data_offset; 465 } rvcn_enc_video_bitstream_buffer_t; 466 467 typedef struct rvcn_enc_feedback_buffer_s { 468 uint32_t mode; 469 uint32_t feedback_buffer_address_hi; 470 uint32_t feedback_buffer_address_lo; 471 uint32_t feedback_buffer_size; 472 uint32_t feedback_data_size; 473 } rvcn_enc_feedback_buffer_t; 474 475 typedef struct rvcn_enc_av1_cdf_default_table_s { 476 uint32_t use_cdf_default; 477 uint32_t cdf_default_buffer_address_lo; 478 uint32_t cdf_default_buffer_address_hi; 479 } rvcn_enc_av1_cdf_default_table_t; 480 481 typedef struct rvcn_encode_stats_type_0_s 482 { 483 uint32_t qp_frame; 484 uint32_t qp_avg_ctb; 485 uint32_t qp_max_ctb; 486 uint32_t qp_min_ctb; 487 uint32_t pix_intra; 488 uint32_t pix_inter; 489 uint32_t pix_skip; 490 uint32_t bitcount_residual; 491 uint32_t bitcount_all_minus_header; 492 uint32_t bitcount_motion; 493 uint32_t bitcount_inter; 494 uint32_t bitcount_intra; 495 uint32_t mv_x_frame; 496 uint32_t mv_y_frame; 497 } rvcn_encode_stats_type_0_t; 498 499 typedef struct rvcn_encode_stats_s 500 { 501 uint32_t encode_stats_type; 502 uint32_t encode_stats_buffer_address_hi; 503 uint32_t encode_stats_buffer_address_lo; 504 } rvcn_enc_stats_t; 505 506 typedef struct rvcn_enc_cmd_s { 507 uint32_t session_info; 508 uint32_t task_info; 509 uint32_t session_init; 510 uint32_t layer_control; 511 uint32_t layer_select; 512 uint32_t rc_session_init; 513 uint32_t rc_layer_init; 514 uint32_t rc_per_pic; 515 uint32_t quality_params; 516 uint32_t slice_header; 517 uint32_t enc_params; 518 uint32_t intra_refresh; 519 uint32_t ctx; 520 uint32_t bitstream; 521 uint32_t feedback; 522 uint32_t nalu; 523 uint32_t slice_control_hevc; 524 uint32_t spec_misc_hevc; 525 uint32_t enc_params_hevc; 526 uint32_t deblocking_filter_hevc; 527 uint32_t slice_control_h264; 528 uint32_t spec_misc_h264; 529 uint32_t enc_params_h264; 530 uint32_t deblocking_filter_h264; 531 uint32_t spec_misc_av1; 532 uint32_t bitstream_instruction_av1; 533 uint32_t cdf_default_table_av1; 534 uint32_t input_format; 535 uint32_t output_format; 536 uint32_t enc_statistics; 537 uint32_t enc_qp_map; 538 } rvcn_enc_cmd_t; 539 540 typedef struct rvcn_enc_quality_modes_s 541 { 542 unsigned pre_encode_mode; 543 unsigned vbaq_mode; 544 unsigned preset_mode; 545 } rvcn_enc_quality_modes_t; 546 547 typedef struct rvcn_enc_vui_info_s 548 { 549 uint32_t vui_parameters_present_flag; 550 struct { 551 uint32_t aspect_ratio_info_present_flag : 1; 552 uint32_t timing_info_present_flag : 1; 553 uint32_t video_signal_type_present_flag : 1; 554 uint32_t colour_description_present_flag : 1; 555 uint32_t chroma_loc_info_present_flag : 1; 556 } flags; 557 uint32_t aspect_ratio_idc; 558 uint32_t sar_width; 559 uint32_t sar_height; 560 uint32_t num_units_in_tick; 561 uint32_t time_scale; 562 uint32_t video_format; 563 uint32_t video_full_range_flag; 564 uint32_t colour_primaries; 565 uint32_t transfer_characteristics; 566 uint32_t matrix_coefficients; 567 uint32_t chroma_sample_loc_type_top_field; 568 uint32_t chroma_sample_loc_type_bottom_field; 569 uint32_t max_num_reorder_frames; 570 }rvcn_enc_vui_info; 571 572 typedef struct rvcn_enc_input_format_s 573 { 574 uint32_t input_color_volume; 575 uint32_t input_color_space; 576 uint32_t input_color_range; 577 uint32_t input_chroma_subsampling; 578 uint32_t input_chroma_location; 579 uint32_t input_color_bit_depth; 580 uint32_t input_color_packing_format; 581 } rvcn_enc_input_format_t; 582 583 typedef struct rvcn_enc_output_format_s 584 { 585 uint32_t output_color_volume; 586 uint32_t output_color_range; 587 uint32_t output_chroma_location; /* chroma location to luma */ 588 uint32_t output_color_bit_depth; 589 } rvcn_enc_output_format_t; 590 591 typedef struct rvcn_enc_av1_timing_info_s 592 { 593 uint32_t num_units_in_display_tick; 594 uint32_t time_scale; 595 uint32_t num_tick_per_picture_minus1; 596 }rvcn_enc_av1_timing_info_t; 597 598 typedef struct rvcn_enc_av1_color_description_s 599 { 600 uint32_t color_primaries; 601 uint32_t transfer_characteristics; 602 uint32_t maxtrix_coefficients; 603 uint32_t color_range; 604 uint32_t chroma_sample_position; 605 }rvcn_enc_av1_color_description_t; 606 607 #define AV1_ENC_FRAME_TYPE_KEY 0x00 608 #define AV1_ENC_FRAME_TYPE_INTER 0x01 609 #define AV1_ENC_FRAME_TYPE_INTRA_ONLY 0x02 610 #define AV1_ENC_FRAME_TYPE_SWITCH 0x03 611 #define AV1_ENC_FRAME_TYPE_SHOW_EXISTING 0x04 612 613 typedef struct rvcn_enc_av1_ref_frame_s 614 { 615 bool in_use; 616 bool is_ltr; 617 uint32_t frame_id; 618 uint32_t temporal_id; 619 uint32_t slot_id; 620 uint32_t frame_type; 621 uint32_t ltr_seq; 622 void *frame_signature; 623 } rvcn_enc_av1_ref_frame_t; 624 625 typedef struct rvcn_enc_av1_recon_slot_s 626 { 627 bool in_use; 628 bool is_orphaned; 629 } rvcn_enc_av1_recon_slot_t; 630 631 #define RENCODE_QP_MAP_TYPE_NONE 0 632 #define RENCODE_QP_MAP_TYPE_DELTA 1 633 #define RENCODE_QP_MAP_TYPE_MAP_PA 4 634 #define RENCODE_QP_MAP_MAX_REGIONS 32 635 636 struct rvcn_enc_qp_map_region 637 { 638 bool is_valid; 639 int32_t qp_delta; 640 uint32_t x_in_unit; 641 uint32_t y_in_unit; 642 uint32_t width_in_unit; 643 uint32_t height_in_unit; 644 }; 645 646 typedef struct rvcn_enc_qp_map_s 647 { 648 uint32_t qp_map_type; 649 uint32_t qp_map_buffer_address_hi; 650 uint32_t qp_map_buffer_address_lo; 651 uint32_t qp_map_pitch; 652 struct rvcn_enc_qp_map_region map[RENCODE_QP_MAP_MAX_REGIONS]; 653 }rvcn_enc_qp_map_t; 654 655 #endif 656