• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)69 void 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