1 /************************************************************************** 2 * 3 * Copyright 2024 Advanced Micro Devices, Inc. 4 * 5 * SPDX-License-Identifier: MIT 6 * 7 **************************************************************************/ 8 9 #include <stdint.h> 10 #include <stdbool.h> 11 12 #include "ac_vcn_enc.h" 13 14 #define RENCODE_IB_PARAM_SESSION_INFO 0x00000001 15 #define RENCODE_IB_PARAM_TASK_INFO 0x00000002 16 #define RENCODE_IB_PARAM_SESSION_INIT 0x00000003 17 #define RENCODE_IB_PARAM_LAYER_CONTROL 0x00000004 18 #define RENCODE_IB_PARAM_LAYER_SELECT 0x00000005 19 #define RENCODE_IB_PARAM_RATE_CONTROL_SESSION_INIT 0x00000006 20 #define RENCODE_IB_PARAM_RATE_CONTROL_LAYER_INIT 0x00000007 21 #define RENCODE_IB_PARAM_RATE_CONTROL_PER_PICTURE 0x00000008 22 #define RENCODE_IB_PARAM_QUALITY_PARAMS 0x00000009 23 #define RENCODE_IB_PARAM_SLICE_HEADER 0x0000000a 24 #define RENCODE_IB_PARAM_ENCODE_PARAMS 0x0000000b 25 #define RENCODE_IB_PARAM_INTRA_REFRESH 0x0000000c 26 #define RENCODE_IB_PARAM_ENCODE_CONTEXT_BUFFER 0x0000000d 27 #define RENCODE_IB_PARAM_VIDEO_BITSTREAM_BUFFER 0x0000000e 28 #define RENCODE_IB_PARAM_FEEDBACK_BUFFER 0x00000010 29 #define RENCODE_IB_PARAM_RATE_CONTROL_PER_PICTURE_EX 0x0000001d 30 #define RENCODE_IB_PARAM_DIRECT_OUTPUT_NALU 0x00000020 31 #define RENCODE_IB_PARAM_QP_MAP 0x00000021 32 #define RENCODE_IB_PARAM_ENCODE_LATENCY 0x00000022 33 #define RENCODE_IB_PARAM_ENCODE_STATISTICS 0x00000024 34 35 #define RENCODE_HEVC_IB_PARAM_SLICE_CONTROL 0x00100001 36 #define RENCODE_HEVC_IB_PARAM_SPEC_MISC 0x00100002 37 #define RENCODE_HEVC_IB_PARAM_DEBLOCKING_FILTER 0x00100003 38 39 #define RENCODE_H264_IB_PARAM_SLICE_CONTROL 0x00200001 40 #define RENCODE_H264_IB_PARAM_SPEC_MISC 0x00200002 41 #define RENCODE_H264_IB_PARAM_ENCODE_PARAMS 0x00200003 42 #define RENCODE_H264_IB_PARAM_DEBLOCKING_FILTER 0x00200004 43 44 #define RENCODE_V2_IB_PARAM_DIRECT_OUTPUT_NALU 0x0000000a 45 #define RENCODE_V2_IB_PARAM_SLICE_HEADER 0x0000000b 46 #define RENCODE_V2_IB_PARAM_INPUT_FORMAT 0x0000000c 47 #define RENCODE_V2_IB_PARAM_OUTPUT_FORMAT 0x0000000d 48 #define RENCODE_V2_IB_PARAM_ENCODE_PARAMS 0x0000000f 49 #define RENCODE_V2_IB_PARAM_INTRA_REFRESH 0x00000010 50 #define RENCODE_V2_IB_PARAM_ENCODE_CONTEXT_BUFFER 0x00000011 51 #define RENCODE_V2_IB_PARAM_VIDEO_BITSTREAM_BUFFER 0x00000012 52 #define RENCODE_V2_IB_PARAM_QP_MAP 0x00000014 53 #define RENCODE_V2_IB_PARAM_FEEDBACK_BUFFER 0x00000015 54 #define RENCODE_V2_IB_PARAM_ENCODE_LATENCY 0x00000018 55 #define RENCODE_V2_IB_PARAM_ENCODE_STATISTICS 0x00000019 56 57 #define RENCODE_V4_IB_PARAM_CDF_DEFAULT_TABLE_BUFFER 0x00000019 58 #define RENCODE_V4_IB_PARAM_ENCODE_STATISTICS 0x0000001a 59 #define RENCODE_V4_AV1_IB_PARAM_SPEC_MISC 0x00300001 60 #define RENCODE_V4_AV1_IB_PARAM_BITSTREAM_INSTRUCTION 0x00300002 61 62 #define RENCODE_V5_IB_PARAM_METADATA_BUFFER 0x0000001c 63 #define RENCODE_V5_IB_PARAM_ENCODE_CONTEXT_BUFFER_OVERRIDE 0x0000001d 64 #define RENCODE_V5_IB_PARAM_HEVC_ENCODE_PARAMS 0x00100004 65 #define RENCODE_V5_AV1_IB_PARAM_TILE_CONFIG 0x00300002 66 #define RENCODE_V5_AV1_IB_PARAM_BITSTREAM_INSTRUCTION 0x00300003 67 #define RENCODE_V5_AV1_IB_PARAM_ENCODE_PARAMS 0x00300004 68 ac_vcn_enc_init_cmds(rvcn_enc_cmd_t * cmd,enum vcn_version version)69void ac_vcn_enc_init_cmds(rvcn_enc_cmd_t *cmd, enum vcn_version version) 70 { 71 cmd->session_info = RENCODE_IB_PARAM_SESSION_INFO; 72 cmd->task_info = RENCODE_IB_PARAM_TASK_INFO; 73 cmd->session_init = RENCODE_IB_PARAM_SESSION_INIT; 74 cmd->layer_control = RENCODE_IB_PARAM_LAYER_CONTROL; 75 cmd->layer_select = RENCODE_IB_PARAM_LAYER_SELECT; 76 cmd->rc_session_init = RENCODE_IB_PARAM_RATE_CONTROL_SESSION_INIT; 77 cmd->rc_layer_init = RENCODE_IB_PARAM_RATE_CONTROL_LAYER_INIT; 78 cmd->rc_per_pic = RENCODE_IB_PARAM_RATE_CONTROL_PER_PICTURE; 79 cmd->rc_per_pic_ex = RENCODE_IB_PARAM_RATE_CONTROL_PER_PICTURE_EX; 80 cmd->quality_params = RENCODE_IB_PARAM_QUALITY_PARAMS; 81 cmd->nalu = RENCODE_IB_PARAM_DIRECT_OUTPUT_NALU; 82 cmd->slice_header = RENCODE_IB_PARAM_SLICE_HEADER; 83 cmd->enc_params = RENCODE_IB_PARAM_ENCODE_PARAMS; 84 cmd->intra_refresh = RENCODE_IB_PARAM_INTRA_REFRESH; 85 cmd->ctx = RENCODE_IB_PARAM_ENCODE_CONTEXT_BUFFER; 86 cmd->bitstream = RENCODE_IB_PARAM_VIDEO_BITSTREAM_BUFFER; 87 cmd->feedback = RENCODE_IB_PARAM_FEEDBACK_BUFFER; 88 cmd->slice_control_hevc = RENCODE_HEVC_IB_PARAM_SLICE_CONTROL; 89 cmd->spec_misc_hevc = RENCODE_HEVC_IB_PARAM_SPEC_MISC; 90 cmd->deblocking_filter_hevc = RENCODE_HEVC_IB_PARAM_DEBLOCKING_FILTER; 91 cmd->slice_control_h264 = RENCODE_H264_IB_PARAM_SLICE_CONTROL; 92 cmd->spec_misc_h264 = RENCODE_H264_IB_PARAM_SPEC_MISC; 93 cmd->enc_params_h264 = RENCODE_H264_IB_PARAM_ENCODE_PARAMS; 94 cmd->deblocking_filter_h264 = RENCODE_H264_IB_PARAM_DEBLOCKING_FILTER; 95 cmd->enc_statistics = RENCODE_IB_PARAM_ENCODE_STATISTICS; 96 cmd->enc_qp_map = RENCODE_IB_PARAM_QP_MAP; 97 cmd->enc_latency = RENCODE_IB_PARAM_ENCODE_LATENCY; 98 99 if (version >= VCN_2_0_0) { 100 cmd->nalu = RENCODE_V2_IB_PARAM_DIRECT_OUTPUT_NALU; 101 cmd->slice_header = RENCODE_V2_IB_PARAM_SLICE_HEADER; 102 cmd->input_format = RENCODE_V2_IB_PARAM_INPUT_FORMAT; 103 cmd->output_format = RENCODE_V2_IB_PARAM_OUTPUT_FORMAT; 104 cmd->enc_params = RENCODE_V2_IB_PARAM_ENCODE_PARAMS; 105 cmd->intra_refresh = RENCODE_V2_IB_PARAM_INTRA_REFRESH; 106 cmd->ctx = RENCODE_V2_IB_PARAM_ENCODE_CONTEXT_BUFFER; 107 cmd->bitstream = RENCODE_V2_IB_PARAM_VIDEO_BITSTREAM_BUFFER; 108 cmd->feedback = RENCODE_V2_IB_PARAM_FEEDBACK_BUFFER; 109 cmd->enc_statistics = RENCODE_V2_IB_PARAM_ENCODE_STATISTICS; 110 cmd->enc_qp_map = RENCODE_V2_IB_PARAM_QP_MAP; 111 cmd->enc_latency = RENCODE_V2_IB_PARAM_ENCODE_LATENCY; 112 } 113 114 if (version >= VCN_4_0_0) { 115 cmd->cdf_default_table_av1 = RENCODE_V4_IB_PARAM_CDF_DEFAULT_TABLE_BUFFER; 116 cmd->enc_statistics = RENCODE_V4_IB_PARAM_ENCODE_STATISTICS; 117 cmd->spec_misc_av1 = RENCODE_V4_AV1_IB_PARAM_SPEC_MISC; 118 cmd->bitstream_instruction_av1 = RENCODE_V4_AV1_IB_PARAM_BITSTREAM_INSTRUCTION; 119 } 120 121 if (version >= VCN_5_0_0) { 122 cmd->metadata = RENCODE_V5_IB_PARAM_METADATA_BUFFER; 123 cmd->ctx_override = RENCODE_V5_IB_PARAM_ENCODE_CONTEXT_BUFFER_OVERRIDE; 124 cmd->enc_params_hevc = RENCODE_V5_IB_PARAM_HEVC_ENCODE_PARAMS; 125 cmd->tile_config_av1 = RENCODE_V5_AV1_IB_PARAM_TILE_CONFIG; 126 cmd->bitstream_instruction_av1 = RENCODE_V5_AV1_IB_PARAM_BITSTREAM_INSTRUCTION; 127 cmd->enc_params_av1 = RENCODE_V5_AV1_IB_PARAM_ENCODE_PARAMS; 128 } 129 } 130