1 /************************************************************************** 2 * 3 * Copyright 2021 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 _RADEON_TEMPORAL_H 29 #define _RADEON_TEMPORAL_H 30 31 #include "radeon_video.h" 32 #include "radeon_vcn_enc.h" 33 34 #define RENCODE_MAX_TEMPORAL_LAYER_PATTERN_SIZE 9 35 36 typedef struct rvcn_temporal_layer_pattern_entry_s 37 { 38 unsigned temporal_id; 39 unsigned reference_index_in_table; 40 bool reference_modification; 41 unsigned frame_num_offset; 42 unsigned poc_offset; 43 bool mark_as_reference; 44 } rvcn_temporal_layer_pattern_entry_t; 45 46 typedef struct rvcn_temporal_layer_pattern_table_s 47 { 48 unsigned pattern_size; 49 rvcn_temporal_layer_pattern_entry_t pattern_table[RENCODE_MAX_TEMPORAL_LAYER_PATTERN_SIZE]; 50 } rvcn_temporal_layer_pattern_table_t; 51 52 static const rvcn_temporal_layer_pattern_table_t rvcn_temporal_layer_pattern_tables[RENCODE_MAX_NUM_TEMPORAL_LAYERS] = 53 { 54 /* 1 temporal layer */ 55 { 56 2, /* temporal layer pattern size */ 57 { 58 { 59 0, 60 0, 61 false, 62 0, 63 0, 64 true, 65 }, 66 { 67 0, 68 0, 69 false, 70 1, 71 2, 72 true, 73 } 74 } 75 }, 76 /* 2 temporal layers */ 77 { 78 3, /* temporal layer pattern size */ 79 { 80 { 81 0, 82 0, 83 false, 84 0, 85 0, 86 true, 87 }, 88 { 89 1, 90 0, 91 false, 92 1, 93 2, 94 false, 95 }, 96 { 97 0, 98 0, 99 false, 100 1, 101 4, 102 true, 103 } 104 } 105 }, 106 /* 3 temporal layers */ 107 { 108 5, /* temporal layer pattern size */ 109 { 110 { 111 0, 112 0, 113 false, 114 0, 115 0, 116 true, 117 }, 118 { 119 2, 120 0, 121 false, 122 1, 123 2, 124 false, 125 }, 126 { 127 1, 128 0, 129 false, 130 1, 131 4, 132 true, 133 }, 134 { 135 2, 136 2, 137 false, 138 2, 139 6, 140 false, 141 }, 142 { 143 0, 144 0, 145 true, 146 2, 147 8, 148 true, 149 } 150 } 151 }, 152 /* 4 temporal layers */ 153 { 154 9, /* temporal layer pattern size */ 155 { 156 { 157 0, 158 0, 159 false, 160 0, 161 0, 162 true, 163 }, 164 { 165 3, 166 0, 167 false, 168 1, 169 2, 170 false, 171 }, 172 { 173 2, 174 0, 175 false, 176 1, 177 4, 178 true, 179 }, 180 { 181 3, 182 2, 183 false, 184 2, 185 6, 186 false, 187 }, 188 { 189 1, 190 0, 191 true, 192 2, 193 8, 194 true, 195 }, 196 { 197 3, 198 4, 199 false, 200 3, 201 10, 202 false, 203 }, 204 { 205 2, 206 4, 207 false, 208 3, 209 12, 210 true, 211 }, 212 { 213 3, 214 6, 215 false, 216 4, 217 14, 218 false, 219 }, 220 { 221 0, 222 0, 223 true, 224 4, 225 16, 226 true, 227 } 228 } 229 } 230 }; 231 232 #endif // _RADEON_TEMPORAL_H