1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved. 4 * Copyright (c) 2025 Linaro Ltd 5 */ 6 7 #include "iris_ctrls.h" 8 #include "iris_hfi_gen2.h" 9 #include "iris_hfi_gen2_defines.h" 10 #include "iris_platform_common.h" 11 #include "iris_vpu_buffer.h" 12 13 #define VIDEO_ARCH_LX 1 14 #define BITRATE_MAX 245000000 15 16 static const struct platform_inst_fw_cap inst_fw_cap_sm8550_dec[] = { 17 { 18 .cap_id = PROFILE_H264, 19 .min = V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE, 20 .max = V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_HIGH, 21 .step_or_mask = BIT(V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE) | 22 BIT(V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE) | 23 BIT(V4L2_MPEG_VIDEO_H264_PROFILE_MAIN) | 24 BIT(V4L2_MPEG_VIDEO_H264_PROFILE_HIGH) | 25 BIT(V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_HIGH), 26 .value = V4L2_MPEG_VIDEO_H264_PROFILE_HIGH, 27 .hfi_id = HFI_PROP_PROFILE, 28 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 29 .set = iris_set_u32_enum, 30 }, 31 { 32 .cap_id = PROFILE_HEVC, 33 .min = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN, 34 .max = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10, 35 .step_or_mask = BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN) | 36 BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE) | 37 BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10), 38 .value = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN, 39 .hfi_id = HFI_PROP_PROFILE, 40 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 41 .set = iris_set_u32_enum, 42 }, 43 { 44 .cap_id = PROFILE_AV1, 45 .min = V4L2_MPEG_VIDEO_AV1_PROFILE_MAIN, 46 .max = V4L2_MPEG_VIDEO_AV1_PROFILE_MAIN, 47 .step_or_mask = BIT(V4L2_MPEG_VIDEO_AV1_PROFILE_MAIN), 48 .value = V4L2_MPEG_VIDEO_AV1_PROFILE_MAIN, 49 .hfi_id = HFI_PROP_PROFILE, 50 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 51 .set = iris_set_u32_enum, 52 }, 53 { 54 .cap_id = PROFILE_VP9, 55 .min = V4L2_MPEG_VIDEO_VP9_PROFILE_0, 56 .max = V4L2_MPEG_VIDEO_VP9_PROFILE_2, 57 .step_or_mask = BIT(V4L2_MPEG_VIDEO_VP9_PROFILE_0) | 58 BIT(V4L2_MPEG_VIDEO_VP9_PROFILE_2), 59 .value = V4L2_MPEG_VIDEO_VP9_PROFILE_0, 60 .hfi_id = HFI_PROP_PROFILE, 61 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 62 .set = iris_set_u32_enum, 63 }, 64 { 65 .cap_id = LEVEL_H264, 66 .min = V4L2_MPEG_VIDEO_H264_LEVEL_1_0, 67 .max = V4L2_MPEG_VIDEO_H264_LEVEL_6_2, 68 .step_or_mask = BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_0) | 69 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1B) | 70 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_1) | 71 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_2) | 72 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_3) | 73 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_0) | 74 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_1) | 75 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_2) | 76 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_0) | 77 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_1) | 78 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_2) | 79 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_0) | 80 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_1) | 81 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_2) | 82 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_0) | 83 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_1) | 84 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_2) | 85 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_6_0) | 86 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_6_1) | 87 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_6_2), 88 .value = V4L2_MPEG_VIDEO_H264_LEVEL_6_1, 89 .hfi_id = HFI_PROP_LEVEL, 90 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 91 .set = iris_set_u32_enum, 92 }, 93 { 94 .cap_id = LEVEL_HEVC, 95 .min = V4L2_MPEG_VIDEO_HEVC_LEVEL_1, 96 .max = V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2, 97 .step_or_mask = BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_1) | 98 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_2) | 99 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_2_1) | 100 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_3) | 101 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_3_1) | 102 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_4) | 103 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1) | 104 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5) | 105 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1) | 106 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5_2) | 107 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6) | 108 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6_1) | 109 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2), 110 .value = V4L2_MPEG_VIDEO_HEVC_LEVEL_6_1, 111 .hfi_id = HFI_PROP_LEVEL, 112 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 113 .set = iris_set_u32_enum, 114 }, 115 { 116 .cap_id = LEVEL_VP9, 117 .min = V4L2_MPEG_VIDEO_VP9_LEVEL_1_0, 118 .max = V4L2_MPEG_VIDEO_VP9_LEVEL_6_0, 119 .step_or_mask = BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_1_0) | 120 BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_1_1) | 121 BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_2_0) | 122 BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_2_1) | 123 BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_3_0) | 124 BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_3_1) | 125 BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_4_0) | 126 BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_4_1) | 127 BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_5_0) | 128 BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_5_1) | 129 BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_5_2) | 130 BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_6_0), 131 .value = V4L2_MPEG_VIDEO_VP9_LEVEL_6_0, 132 .hfi_id = HFI_PROP_LEVEL, 133 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 134 .set = iris_set_u32_enum, 135 }, 136 { 137 .cap_id = LEVEL_AV1, 138 .min = V4L2_MPEG_VIDEO_AV1_LEVEL_2_0, 139 .max = V4L2_MPEG_VIDEO_AV1_LEVEL_6_1, 140 .step_or_mask = BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_2_0) | 141 BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_2_1) | 142 BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_2_2) | 143 BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_2_3) | 144 BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_3_0) | 145 BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_3_1) | 146 BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_3_2) | 147 BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_3_3) | 148 BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_4_0) | 149 BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_4_1) | 150 BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_4_2) | 151 BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_4_3) | 152 BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_5_0) | 153 BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_5_1) | 154 BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_5_2) | 155 BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_5_3) | 156 BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_6_0) | 157 BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_6_1), 158 .value = V4L2_MPEG_VIDEO_AV1_LEVEL_6_1, 159 .hfi_id = HFI_PROP_LEVEL, 160 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 161 .set = iris_set_u32_enum, 162 }, 163 { 164 .cap_id = TIER, 165 .min = V4L2_MPEG_VIDEO_HEVC_TIER_MAIN, 166 .max = V4L2_MPEG_VIDEO_HEVC_TIER_HIGH, 167 .step_or_mask = BIT(V4L2_MPEG_VIDEO_HEVC_TIER_MAIN) | 168 BIT(V4L2_MPEG_VIDEO_HEVC_TIER_HIGH), 169 .value = V4L2_MPEG_VIDEO_HEVC_TIER_HIGH, 170 .hfi_id = HFI_PROP_TIER, 171 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 172 .set = iris_set_u32_enum, 173 }, 174 { 175 .cap_id = TIER_AV1, 176 .min = 0, 177 .max = 1, 178 .step_or_mask = 1, 179 .value = 0, 180 .hfi_id = HFI_PROP_TIER, 181 .flags = CAP_FLAG_INPUT_PORT, 182 .set = iris_set_u32, 183 }, 184 { 185 .cap_id = DRAP, 186 .min = 0, 187 .max = 1, 188 .step_or_mask = 1, 189 .value = 0, 190 .hfi_id = HFI_PROP_AV1_DRAP_CONFIG, 191 .flags = CAP_FLAG_INPUT_PORT, 192 .set = iris_set_u32, 193 }, 194 { 195 .cap_id = FILM_GRAIN, 196 .min = 0, 197 .max = 1, 198 .step_or_mask = 1, 199 .value = 0, 200 .hfi_id = HFI_PROP_AV1_FILM_GRAIN_PRESENT, 201 .flags = CAP_FLAG_VOLATILE, 202 }, 203 { 204 .cap_id = SUPER_BLOCK, 205 .min = 0, 206 .max = 1, 207 .step_or_mask = 1, 208 .value = 0, 209 .hfi_id = HFI_PROP_AV1_SUPER_BLOCK_ENABLED, 210 }, 211 { 212 .cap_id = ENH_LAYER_COUNT, 213 .min = 0, 214 .max = 1, 215 .step_or_mask = 1, 216 .value = 0, 217 .hfi_id = HFI_PROP_AV1_OP_POINT, 218 .flags = CAP_FLAG_INPUT_PORT, 219 .set = iris_set_u32, 220 }, 221 { 222 .cap_id = INPUT_BUF_HOST_MAX_COUNT, 223 .min = DEFAULT_MAX_HOST_BUF_COUNT, 224 .max = DEFAULT_MAX_HOST_BURST_BUF_COUNT, 225 .step_or_mask = 1, 226 .value = DEFAULT_MAX_HOST_BUF_COUNT, 227 .hfi_id = HFI_PROP_BUFFER_HOST_MAX_COUNT, 228 .flags = CAP_FLAG_INPUT_PORT, 229 .set = iris_set_u32, 230 }, 231 { 232 .cap_id = STAGE, 233 .min = STAGE_1, 234 .max = STAGE_2, 235 .step_or_mask = 1, 236 .value = STAGE_2, 237 .hfi_id = HFI_PROP_STAGE, 238 .set = iris_set_stage, 239 }, 240 { 241 .cap_id = PIPE, 242 /* .max, .min and .value are set via platform data */ 243 .step_or_mask = 1, 244 .hfi_id = HFI_PROP_PIPE, 245 .set = iris_set_pipe, 246 }, 247 { 248 .cap_id = POC, 249 .min = 0, 250 .max = 2, 251 .step_or_mask = 1, 252 .value = 1, 253 .hfi_id = HFI_PROP_PIC_ORDER_CNT_TYPE, 254 }, 255 { 256 .cap_id = CODED_FRAMES, 257 .min = CODED_FRAMES_PROGRESSIVE, 258 .max = CODED_FRAMES_PROGRESSIVE, 259 .step_or_mask = 0, 260 .value = CODED_FRAMES_PROGRESSIVE, 261 .hfi_id = HFI_PROP_CODED_FRAMES, 262 }, 263 { 264 .cap_id = BIT_DEPTH, 265 .min = BIT_DEPTH_8, 266 .max = BIT_DEPTH_10, 267 .step_or_mask = 1, 268 .value = BIT_DEPTH_8, 269 .hfi_id = HFI_PROP_LUMA_CHROMA_BIT_DEPTH, 270 }, 271 { 272 .cap_id = RAP_FRAME, 273 .min = 0, 274 .max = 1, 275 .step_or_mask = 1, 276 .value = 1, 277 .hfi_id = HFI_PROP_DEC_START_FROM_RAP_FRAME, 278 .flags = CAP_FLAG_INPUT_PORT, 279 .set = iris_set_u32, 280 }, 281 }; 282 283 static const struct platform_inst_fw_cap inst_fw_cap_sm8550_enc[] = { 284 { 285 .cap_id = PROFILE_H264, 286 .min = V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE, 287 .max = V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_HIGH, 288 .step_or_mask = BIT(V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE) | 289 BIT(V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_HIGH) | 290 BIT(V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE) | 291 BIT(V4L2_MPEG_VIDEO_H264_PROFILE_MAIN) | 292 BIT(V4L2_MPEG_VIDEO_H264_PROFILE_HIGH), 293 .value = V4L2_MPEG_VIDEO_H264_PROFILE_HIGH, 294 .hfi_id = HFI_PROP_PROFILE, 295 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 296 .set = iris_set_profile, 297 }, 298 { 299 .cap_id = PROFILE_HEVC, 300 .min = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN, 301 .max = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10, 302 .step_or_mask = BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN) | 303 BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE) | 304 BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10), 305 .value = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN, 306 .hfi_id = HFI_PROP_PROFILE, 307 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 308 .set = iris_set_profile, 309 }, 310 { 311 .cap_id = LEVEL_H264, 312 .min = V4L2_MPEG_VIDEO_H264_LEVEL_1_0, 313 .max = V4L2_MPEG_VIDEO_H264_LEVEL_6_0, 314 .step_or_mask = BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_0) | 315 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1B) | 316 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_1) | 317 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_2) | 318 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_3) | 319 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_0) | 320 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_1) | 321 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_2) | 322 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_0) | 323 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_1) | 324 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_2) | 325 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_0) | 326 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_1) | 327 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_2) | 328 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_0) | 329 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_1) | 330 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_2) | 331 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_6_0), 332 .value = V4L2_MPEG_VIDEO_H264_LEVEL_5_0, 333 .hfi_id = HFI_PROP_LEVEL, 334 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 335 .set = iris_set_level, 336 }, 337 { 338 .cap_id = LEVEL_HEVC, 339 .min = V4L2_MPEG_VIDEO_HEVC_LEVEL_1, 340 .max = V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2, 341 .step_or_mask = BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_1) | 342 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_2) | 343 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_2_1) | 344 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_3) | 345 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_3_1) | 346 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_4) | 347 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1) | 348 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5) | 349 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1) | 350 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5_2) | 351 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6) | 352 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6_1) | 353 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2), 354 .value = V4L2_MPEG_VIDEO_HEVC_LEVEL_5, 355 .hfi_id = HFI_PROP_LEVEL, 356 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 357 .set = iris_set_level, 358 }, 359 { 360 .cap_id = STAGE, 361 .min = STAGE_1, 362 .max = STAGE_2, 363 .step_or_mask = 1, 364 .value = STAGE_2, 365 .hfi_id = HFI_PROP_STAGE, 366 .set = iris_set_stage, 367 }, 368 { 369 .cap_id = HEADER_MODE, 370 .min = V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE, 371 .max = V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME, 372 .step_or_mask = BIT(V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE) | 373 BIT(V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME), 374 .value = V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME, 375 .hfi_id = HFI_PROP_SEQ_HEADER_MODE, 376 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 377 .set = iris_set_header_mode_gen2, 378 }, 379 { 380 .cap_id = PREPEND_SPSPPS_TO_IDR, 381 .min = 0, 382 .max = 1, 383 .step_or_mask = 1, 384 .value = 0, 385 }, 386 { 387 .cap_id = BITRATE, 388 .min = 1, 389 .max = BITRATE_MAX, 390 .step_or_mask = 1, 391 .value = BITRATE_DEFAULT, 392 .hfi_id = HFI_PROP_TOTAL_BITRATE, 393 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 394 CAP_FLAG_DYNAMIC_ALLOWED, 395 .set = iris_set_bitrate_gen2, 396 }, 397 { 398 .cap_id = BITRATE_PEAK, 399 .min = 1, 400 .max = BITRATE_MAX, 401 .step_or_mask = 1, 402 .value = BITRATE_DEFAULT, 403 .hfi_id = HFI_PROP_TOTAL_PEAK_BITRATE, 404 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 405 CAP_FLAG_DYNAMIC_ALLOWED, 406 .set = iris_set_peak_bitrate, 407 }, 408 { 409 .cap_id = BITRATE_MODE, 410 .min = V4L2_MPEG_VIDEO_BITRATE_MODE_VBR, 411 .max = V4L2_MPEG_VIDEO_BITRATE_MODE_CBR, 412 .step_or_mask = BIT(V4L2_MPEG_VIDEO_BITRATE_MODE_VBR) | 413 BIT(V4L2_MPEG_VIDEO_BITRATE_MODE_CBR), 414 .value = V4L2_MPEG_VIDEO_BITRATE_MODE_VBR, 415 .hfi_id = HFI_PROP_RATE_CONTROL, 416 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 417 .set = iris_set_bitrate_mode_gen2, 418 }, 419 { 420 .cap_id = FRAME_SKIP_MODE, 421 .min = V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_DISABLED, 422 .max = V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_BUF_LIMIT, 423 .step_or_mask = BIT(V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_DISABLED) | 424 BIT(V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_LEVEL_LIMIT) | 425 BIT(V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_BUF_LIMIT), 426 .value = V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_DISABLED, 427 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 428 }, 429 { 430 .cap_id = FRAME_RC_ENABLE, 431 .min = 0, 432 .max = 1, 433 .step_or_mask = 1, 434 .value = 1, 435 }, 436 { 437 .cap_id = GOP_SIZE, 438 .min = 0, 439 .max = INT_MAX, 440 .step_or_mask = 1, 441 .value = 2 * DEFAULT_FPS - 1, 442 .hfi_id = HFI_PROP_MAX_GOP_FRAMES, 443 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 444 CAP_FLAG_DYNAMIC_ALLOWED, 445 .set = iris_set_u32, 446 }, 447 { 448 .cap_id = ENTROPY_MODE, 449 .min = V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC, 450 .max = V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC, 451 .step_or_mask = BIT(V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC) | 452 BIT(V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC), 453 .value = V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC, 454 .hfi_id = HFI_PROP_CABAC_SESSION, 455 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 456 .set = iris_set_entropy_mode_gen2, 457 }, 458 { 459 .cap_id = MIN_FRAME_QP_H264, 460 .min = MIN_QP_8BIT, 461 .max = MAX_QP, 462 .step_or_mask = 1, 463 .value = MIN_QP_8BIT, 464 .hfi_id = HFI_PROP_MIN_QP_PACKED, 465 .flags = CAP_FLAG_OUTPUT_PORT, 466 .set = iris_set_min_qp, 467 }, 468 { 469 .cap_id = MIN_FRAME_QP_HEVC, 470 .min = MIN_QP_8BIT, 471 .max = MAX_QP, 472 .step_or_mask = 1, 473 .value = MIN_QP_8BIT, 474 .hfi_id = HFI_PROP_MIN_QP_PACKED, 475 .flags = CAP_FLAG_OUTPUT_PORT, 476 .set = iris_set_min_qp, 477 }, 478 { 479 .cap_id = MAX_FRAME_QP_H264, 480 .min = MIN_QP_8BIT, 481 .max = MAX_QP, 482 .step_or_mask = 1, 483 .value = MAX_QP, 484 .hfi_id = HFI_PROP_MAX_QP_PACKED, 485 .flags = CAP_FLAG_OUTPUT_PORT, 486 .set = iris_set_max_qp, 487 }, 488 { 489 .cap_id = MAX_FRAME_QP_HEVC, 490 .min = MIN_QP_8BIT, 491 .max = MAX_QP, 492 .step_or_mask = 1, 493 .value = MAX_QP, 494 .hfi_id = HFI_PROP_MAX_QP_PACKED, 495 .flags = CAP_FLAG_OUTPUT_PORT, 496 .set = iris_set_max_qp, 497 }, 498 { 499 .cap_id = I_FRAME_MIN_QP_H264, 500 .min = MIN_QP_8BIT, 501 .max = MAX_QP, 502 .step_or_mask = 1, 503 .value = MIN_QP_8BIT, 504 }, 505 { 506 .cap_id = I_FRAME_MIN_QP_HEVC, 507 .min = MIN_QP_8BIT, 508 .max = MAX_QP, 509 .step_or_mask = 1, 510 .value = MIN_QP_8BIT, 511 }, 512 { 513 .cap_id = P_FRAME_MIN_QP_H264, 514 .min = MIN_QP_8BIT, 515 .max = MAX_QP, 516 .step_or_mask = 1, 517 .value = MIN_QP_8BIT, 518 }, 519 { 520 .cap_id = P_FRAME_MIN_QP_HEVC, 521 .min = MIN_QP_8BIT, 522 .max = MAX_QP, 523 .step_or_mask = 1, 524 .value = MIN_QP_8BIT, 525 }, 526 { 527 .cap_id = B_FRAME_MIN_QP_H264, 528 .min = MIN_QP_8BIT, 529 .max = MAX_QP, 530 .step_or_mask = 1, 531 .value = MIN_QP_8BIT, 532 }, 533 { 534 .cap_id = B_FRAME_MIN_QP_HEVC, 535 .min = MIN_QP_8BIT, 536 .max = MAX_QP, 537 .step_or_mask = 1, 538 .value = MIN_QP_8BIT, 539 }, 540 { 541 .cap_id = I_FRAME_MAX_QP_H264, 542 .min = MIN_QP_8BIT, 543 .max = MAX_QP, 544 .step_or_mask = 1, 545 .value = MAX_QP, 546 }, 547 { 548 .cap_id = I_FRAME_MAX_QP_HEVC, 549 .min = MIN_QP_8BIT, 550 .max = MAX_QP, 551 .step_or_mask = 1, 552 .value = MAX_QP, 553 }, 554 { 555 .cap_id = P_FRAME_MAX_QP_H264, 556 .min = MIN_QP_8BIT, 557 .max = MAX_QP, 558 .step_or_mask = 1, 559 .value = MAX_QP, 560 }, 561 { 562 .cap_id = P_FRAME_MAX_QP_HEVC, 563 .min = MIN_QP_8BIT, 564 .max = MAX_QP, 565 .step_or_mask = 1, 566 .value = MAX_QP, 567 }, 568 { 569 .cap_id = B_FRAME_MAX_QP_H264, 570 .min = MIN_QP_8BIT, 571 .max = MAX_QP, 572 .step_or_mask = 1, 573 .value = MAX_QP, 574 }, 575 { 576 .cap_id = B_FRAME_MAX_QP_HEVC, 577 .min = MIN_QP_8BIT, 578 .max = MAX_QP, 579 .step_or_mask = 1, 580 .value = MAX_QP, 581 }, 582 { 583 .cap_id = I_FRAME_QP_H264, 584 .min = MIN_QP_8BIT, 585 .max = MAX_QP, 586 .step_or_mask = 1, 587 .value = DEFAULT_QP, 588 .hfi_id = HFI_PROP_QP_PACKED, 589 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 590 CAP_FLAG_DYNAMIC_ALLOWED, 591 .set = iris_set_frame_qp, 592 }, 593 { 594 .cap_id = I_FRAME_QP_HEVC, 595 .min = MIN_QP_8BIT, 596 .max = MAX_QP, 597 .step_or_mask = 1, 598 .value = DEFAULT_QP, 599 .hfi_id = HFI_PROP_QP_PACKED, 600 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 601 CAP_FLAG_DYNAMIC_ALLOWED, 602 .set = iris_set_frame_qp, 603 }, 604 { 605 .cap_id = P_FRAME_QP_H264, 606 .min = MIN_QP_8BIT, 607 .max = MAX_QP, 608 .step_or_mask = 1, 609 .value = DEFAULT_QP, 610 .hfi_id = HFI_PROP_QP_PACKED, 611 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 612 CAP_FLAG_DYNAMIC_ALLOWED, 613 .set = iris_set_frame_qp, 614 }, 615 { 616 .cap_id = P_FRAME_QP_HEVC, 617 .min = MIN_QP_8BIT, 618 .max = MAX_QP, 619 .step_or_mask = 1, 620 .value = DEFAULT_QP, 621 .hfi_id = HFI_PROP_QP_PACKED, 622 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 623 CAP_FLAG_DYNAMIC_ALLOWED, 624 .set = iris_set_frame_qp, 625 }, 626 { 627 .cap_id = B_FRAME_QP_H264, 628 .min = MIN_QP_8BIT, 629 .max = MAX_QP, 630 .step_or_mask = 1, 631 .value = DEFAULT_QP, 632 .hfi_id = HFI_PROP_QP_PACKED, 633 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 634 CAP_FLAG_DYNAMIC_ALLOWED, 635 .set = iris_set_frame_qp, 636 }, 637 { 638 .cap_id = B_FRAME_QP_HEVC, 639 .min = MIN_QP_8BIT, 640 .max = MAX_QP, 641 .step_or_mask = 1, 642 .value = DEFAULT_QP, 643 .hfi_id = HFI_PROP_QP_PACKED, 644 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 645 CAP_FLAG_DYNAMIC_ALLOWED, 646 .set = iris_set_frame_qp, 647 }, 648 { 649 .cap_id = INPUT_BUF_HOST_MAX_COUNT, 650 .min = DEFAULT_MAX_HOST_BUF_COUNT, 651 .max = DEFAULT_MAX_HOST_BURST_BUF_COUNT, 652 .step_or_mask = 1, 653 .value = DEFAULT_MAX_HOST_BUF_COUNT, 654 .hfi_id = HFI_PROP_BUFFER_HOST_MAX_COUNT, 655 .flags = CAP_FLAG_INPUT_PORT, 656 .set = iris_set_u32, 657 }, 658 { 659 .cap_id = OUTPUT_BUF_HOST_MAX_COUNT, 660 .min = DEFAULT_MAX_HOST_BUF_COUNT, 661 .max = DEFAULT_MAX_HOST_BURST_BUF_COUNT, 662 .step_or_mask = 1, 663 .value = DEFAULT_MAX_HOST_BUF_COUNT, 664 .hfi_id = HFI_PROP_BUFFER_HOST_MAX_COUNT, 665 .flags = CAP_FLAG_OUTPUT_PORT, 666 .set = iris_set_u32, 667 }, 668 { 669 .cap_id = ROTATION, 670 .min = 0, 671 .max = 270, 672 .step_or_mask = 90, 673 .value = 0, 674 .hfi_id = HFI_PROP_ROTATION, 675 .flags = CAP_FLAG_OUTPUT_PORT, 676 .set = iris_set_rotation, 677 }, 678 { 679 .cap_id = HFLIP, 680 .min = 0, 681 .max = 1, 682 .step_or_mask = 1, 683 .value = 0, 684 .hfi_id = HFI_PROP_FLIP, 685 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 686 CAP_FLAG_DYNAMIC_ALLOWED, 687 .set = iris_set_flip, 688 }, 689 { 690 .cap_id = VFLIP, 691 .min = 0, 692 .max = 1, 693 .step_or_mask = 1, 694 .value = 0, 695 .hfi_id = HFI_PROP_FLIP, 696 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 697 CAP_FLAG_DYNAMIC_ALLOWED, 698 .set = iris_set_flip, 699 }, 700 { 701 .cap_id = IR_TYPE, 702 .min = V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE_RANDOM, 703 .max = V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE_CYCLIC, 704 .step_or_mask = BIT(V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE_RANDOM) | 705 BIT(V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE_CYCLIC), 706 .value = V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE_RANDOM, 707 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 708 }, 709 { 710 .cap_id = IR_PERIOD, 711 .min = 0, 712 .max = INT_MAX, 713 .step_or_mask = 1, 714 .value = 0, 715 .flags = CAP_FLAG_OUTPUT_PORT | 716 CAP_FLAG_DYNAMIC_ALLOWED, 717 .set = iris_set_ir_period_gen2, 718 }, 719 { 720 .cap_id = LTR_COUNT, 721 .min = 0, 722 .max = MAX_LTR_FRAME_COUNT_GEN2, 723 .step_or_mask = 1, 724 .value = 0, 725 .hfi_id = HFI_PROP_LTR_COUNT, 726 .flags = CAP_FLAG_OUTPUT_PORT, 727 .set = iris_set_ltr_count_gen2, 728 }, 729 { 730 .cap_id = USE_LTR, 731 .min = 0, 732 .max = ((1 << MAX_LTR_FRAME_COUNT_GEN2) - 1), 733 .step_or_mask = 0, 734 .value = 0, 735 .hfi_id = HFI_PROP_LTR_USE, 736 .flags = CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, 737 .set = iris_set_use_and_mark_ltr, 738 }, 739 { 740 .cap_id = MARK_LTR, 741 .min = INVALID_DEFAULT_MARK_OR_USE_LTR, 742 .max = (MAX_LTR_FRAME_COUNT_GEN2 - 1), 743 .step_or_mask = 1, 744 .value = INVALID_DEFAULT_MARK_OR_USE_LTR, 745 .hfi_id = HFI_PROP_LTR_MARK, 746 .flags = CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, 747 .set = iris_set_use_and_mark_ltr, 748 }, 749 { 750 .cap_id = B_FRAME, 751 .min = 0, 752 .max = 1, 753 .step_or_mask = 1, 754 .value = 0, 755 .hfi_id = HFI_PROP_MAX_B_FRAMES, 756 .flags = CAP_FLAG_OUTPUT_PORT, 757 .set = iris_set_u32, 758 }, 759 { 760 .cap_id = LAYER_ENABLE, 761 .min = 0, 762 .max = 1, 763 .step_or_mask = 1, 764 .value = 0, 765 .flags = CAP_FLAG_OUTPUT_PORT, 766 }, 767 { 768 .cap_id = LAYER_TYPE_H264, 769 .min = V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_B, 770 .max = V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_P, 771 .step_or_mask = BIT(V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_B) | 772 BIT(V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_P), 773 .value = V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_P, 774 .hfi_id = HFI_PROP_LAYER_ENCODING_TYPE, 775 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 776 .set = iris_set_layer_type, 777 }, 778 { 779 .cap_id = LAYER_TYPE_HEVC, 780 .min = V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_B, 781 .max = V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_P, 782 .step_or_mask = BIT(V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_B) | 783 BIT(V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_P), 784 .value = V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_P, 785 .hfi_id = HFI_PROP_LAYER_ENCODING_TYPE, 786 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 787 .set = iris_set_layer_type, 788 }, 789 { 790 .cap_id = LAYER_COUNT_H264, 791 .min = 0, 792 .max = 5, 793 .step_or_mask = 1, 794 .value = 0, 795 .hfi_id = HFI_PROP_LAYER_COUNT, 796 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, 797 .set = iris_set_layer_count_gen2, 798 }, 799 { 800 .cap_id = LAYER_COUNT_HEVC, 801 .min = 0, 802 .max = 5, 803 .step_or_mask = 1, 804 .value = 0, 805 .hfi_id = HFI_PROP_LAYER_COUNT, 806 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, 807 .set = iris_set_layer_count_gen2, 808 }, 809 { 810 .cap_id = LAYER0_BITRATE_H264, 811 .min = 1, 812 .max = BITRATE_MAX, 813 .step_or_mask = 1, 814 .value = BITRATE_DEFAULT, 815 .hfi_id = HFI_PROP_BITRATE_LAYER1, 816 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 817 CAP_FLAG_DYNAMIC_ALLOWED, 818 .set = iris_set_layer_bitrate, 819 }, 820 { 821 .cap_id = LAYER1_BITRATE_H264, 822 .min = 1, 823 .max = BITRATE_MAX, 824 .step_or_mask = 1, 825 .value = BITRATE_DEFAULT, 826 .hfi_id = HFI_PROP_BITRATE_LAYER2, 827 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 828 CAP_FLAG_DYNAMIC_ALLOWED, 829 .set = iris_set_layer_bitrate, 830 }, 831 { 832 .cap_id = LAYER2_BITRATE_H264, 833 .min = 1, 834 .max = BITRATE_MAX, 835 .step_or_mask = 1, 836 .value = BITRATE_DEFAULT, 837 .hfi_id = HFI_PROP_BITRATE_LAYER3, 838 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 839 CAP_FLAG_DYNAMIC_ALLOWED, 840 .set = iris_set_layer_bitrate, 841 }, 842 { 843 .cap_id = LAYER3_BITRATE_H264, 844 .min = 1, 845 .max = BITRATE_MAX, 846 .step_or_mask = 1, 847 .value = BITRATE_DEFAULT, 848 .hfi_id = HFI_PROP_BITRATE_LAYER4, 849 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 850 CAP_FLAG_DYNAMIC_ALLOWED, 851 .set = iris_set_layer_bitrate, 852 }, 853 { 854 .cap_id = LAYER4_BITRATE_H264, 855 .min = 1, 856 .max = BITRATE_MAX, 857 .step_or_mask = 1, 858 .value = BITRATE_DEFAULT, 859 .hfi_id = HFI_PROP_BITRATE_LAYER5, 860 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 861 CAP_FLAG_DYNAMIC_ALLOWED, 862 .set = iris_set_layer_bitrate, 863 }, 864 { 865 .cap_id = LAYER5_BITRATE_H264, 866 .min = 1, 867 .max = BITRATE_MAX, 868 .step_or_mask = 1, 869 .value = BITRATE_DEFAULT, 870 .hfi_id = HFI_PROP_BITRATE_LAYER6, 871 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 872 CAP_FLAG_DYNAMIC_ALLOWED, 873 .set = iris_set_layer_bitrate, 874 }, 875 { 876 .cap_id = LAYER0_BITRATE_HEVC, 877 .min = 1, 878 .max = BITRATE_MAX, 879 .step_or_mask = 1, 880 .value = BITRATE_DEFAULT, 881 .hfi_id = HFI_PROP_BITRATE_LAYER1, 882 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 883 CAP_FLAG_DYNAMIC_ALLOWED, 884 .set = iris_set_layer_bitrate, 885 }, 886 { 887 .cap_id = LAYER1_BITRATE_HEVC, 888 .min = 1, 889 .max = BITRATE_MAX, 890 .step_or_mask = 1, 891 .value = BITRATE_DEFAULT, 892 .hfi_id = HFI_PROP_BITRATE_LAYER2, 893 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 894 CAP_FLAG_DYNAMIC_ALLOWED, 895 .set = iris_set_layer_bitrate, 896 }, 897 { 898 .cap_id = LAYER2_BITRATE_HEVC, 899 .min = 1, 900 .max = BITRATE_MAX, 901 .step_or_mask = 1, 902 .value = BITRATE_DEFAULT, 903 .hfi_id = HFI_PROP_BITRATE_LAYER3, 904 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 905 CAP_FLAG_DYNAMIC_ALLOWED, 906 .set = iris_set_layer_bitrate, 907 }, 908 { 909 .cap_id = LAYER3_BITRATE_HEVC, 910 .min = 1, 911 .max = BITRATE_MAX, 912 .step_or_mask = 1, 913 .value = BITRATE_DEFAULT, 914 .hfi_id = HFI_PROP_BITRATE_LAYER4, 915 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 916 CAP_FLAG_DYNAMIC_ALLOWED, 917 .set = iris_set_layer_bitrate, 918 }, 919 { 920 .cap_id = LAYER4_BITRATE_HEVC, 921 .min = 1, 922 .max = BITRATE_MAX, 923 .step_or_mask = 1, 924 .value = BITRATE_DEFAULT, 925 .hfi_id = HFI_PROP_BITRATE_LAYER5, 926 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 927 CAP_FLAG_DYNAMIC_ALLOWED, 928 .set = iris_set_layer_bitrate, 929 }, 930 { 931 .cap_id = LAYER5_BITRATE_HEVC, 932 .min = 1, 933 .max = BITRATE_MAX, 934 .step_or_mask = 1, 935 .value = BITRATE_DEFAULT, 936 .hfi_id = HFI_PROP_BITRATE_LAYER6, 937 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 938 CAP_FLAG_DYNAMIC_ALLOWED, 939 .set = iris_set_layer_bitrate, 940 } 941 }; 942 943 static const u32 sm8550_vdec_input_config_params_default[] = { 944 HFI_PROP_BITSTREAM_RESOLUTION, 945 HFI_PROP_CROP_OFFSETS, 946 HFI_PROP_LUMA_CHROMA_BIT_DEPTH, 947 HFI_PROP_CODED_FRAMES, 948 HFI_PROP_BUFFER_FW_MIN_OUTPUT_COUNT, 949 HFI_PROP_PIC_ORDER_CNT_TYPE, 950 HFI_PROP_PROFILE, 951 HFI_PROP_LEVEL, 952 HFI_PROP_SIGNAL_COLOR_INFO, 953 }; 954 955 static const u32 sm8550_vdec_input_config_param_hevc[] = { 956 HFI_PROP_BITSTREAM_RESOLUTION, 957 HFI_PROP_CROP_OFFSETS, 958 HFI_PROP_LUMA_CHROMA_BIT_DEPTH, 959 HFI_PROP_BUFFER_FW_MIN_OUTPUT_COUNT, 960 HFI_PROP_PROFILE, 961 HFI_PROP_LEVEL, 962 HFI_PROP_TIER, 963 HFI_PROP_SIGNAL_COLOR_INFO, 964 }; 965 966 static const u32 sm8550_vdec_input_config_param_vp9[] = { 967 HFI_PROP_BITSTREAM_RESOLUTION, 968 HFI_PROP_CROP_OFFSETS, 969 HFI_PROP_LUMA_CHROMA_BIT_DEPTH, 970 HFI_PROP_BUFFER_FW_MIN_OUTPUT_COUNT, 971 HFI_PROP_PROFILE, 972 HFI_PROP_LEVEL, 973 }; 974 975 static const u32 sm8550_vdec_input_config_param_av1[] = { 976 HFI_PROP_BITSTREAM_RESOLUTION, 977 HFI_PROP_CROP_OFFSETS, 978 HFI_PROP_LUMA_CHROMA_BIT_DEPTH, 979 HFI_PROP_BUFFER_FW_MIN_OUTPUT_COUNT, 980 HFI_PROP_PROFILE, 981 HFI_PROP_LEVEL, 982 HFI_PROP_TIER, 983 HFI_PROP_AV1_FILM_GRAIN_PRESENT, 984 HFI_PROP_AV1_SUPER_BLOCK_ENABLED, 985 HFI_PROP_SIGNAL_COLOR_INFO, 986 }; 987 988 static const u32 sm8550_venc_input_config_params[] = { 989 HFI_PROP_COLOR_FORMAT, 990 HFI_PROP_RAW_RESOLUTION, 991 HFI_PROP_CROP_OFFSETS, 992 HFI_PROP_LINEAR_STRIDE_SCANLINE, 993 HFI_PROP_SIGNAL_COLOR_INFO, 994 }; 995 996 static const u32 sm8550_vdec_output_config_params[] = { 997 HFI_PROP_OPB_ENABLE, 998 HFI_PROP_COLOR_FORMAT, 999 HFI_PROP_LINEAR_STRIDE_SCANLINE, 1000 HFI_PROP_UBWC_STRIDE_SCANLINE, 1001 }; 1002 1003 static const u32 sm8550_venc_output_config_params[] = { 1004 HFI_PROP_BITSTREAM_RESOLUTION, 1005 HFI_PROP_CROP_OFFSETS, 1006 HFI_PROP_FRAME_RATE, 1007 }; 1008 1009 static const u32 sm8550_vdec_subscribe_input_properties[] = { 1010 HFI_PROP_NO_OUTPUT, 1011 }; 1012 1013 static const u32 sm8550_vdec_subscribe_output_properties_avc[] = { 1014 HFI_PROP_PICTURE_TYPE, 1015 HFI_PROP_CABAC_SESSION, 1016 }; 1017 1018 static const u32 sm8550_vdec_subscribe_output_properties_hevc[] = { 1019 HFI_PROP_PICTURE_TYPE, 1020 }; 1021 1022 static const u32 sm8550_vdec_subscribe_output_properties_vp9[] = { 1023 HFI_PROP_PICTURE_TYPE, 1024 }; 1025 1026 static const u32 sm8550_vdec_subscribe_output_properties_av1[] = { 1027 HFI_PROP_PICTURE_TYPE, 1028 HFI_PROP_WORST_COMPRESSION_RATIO, 1029 HFI_PROP_WORST_COMPLEXITY_FACTOR, 1030 }; 1031 1032 static const u32 sm8550_dec_ip_int_buf_tbl[] = { 1033 BUF_BIN, 1034 BUF_COMV, 1035 BUF_NON_COMV, 1036 BUF_LINE, 1037 BUF_PARTIAL, 1038 }; 1039 1040 static const u32 sm8550_dec_op_int_buf_tbl[] = { 1041 BUF_DPB, 1042 }; 1043 1044 static const u32 sm8550_enc_ip_int_buf_tbl[] = { 1045 BUF_VPSS, 1046 }; 1047 1048 static const u32 sm8550_enc_op_int_buf_tbl[] = { 1049 BUF_BIN, 1050 BUF_COMV, 1051 BUF_NON_COMV, 1052 BUF_LINE, 1053 BUF_SCRATCH_2, 1054 }; 1055 1056 const struct iris_firmware_data iris_hfi_gen2_data = { 1057 .init_hfi_ops = iris_hfi_gen2_sys_ops_init, 1058 1059 .core_arch = VIDEO_ARCH_LX, 1060 1061 .inst_fw_caps_dec = inst_fw_cap_sm8550_dec, 1062 .inst_fw_caps_dec_size = ARRAY_SIZE(inst_fw_cap_sm8550_dec), 1063 .inst_fw_caps_enc = inst_fw_cap_sm8550_enc, 1064 .inst_fw_caps_enc_size = ARRAY_SIZE(inst_fw_cap_sm8550_enc), 1065 1066 .dec_input_config_params_default = 1067 sm8550_vdec_input_config_params_default, 1068 .dec_input_config_params_default_size = 1069 ARRAY_SIZE(sm8550_vdec_input_config_params_default), 1070 .dec_input_config_params_hevc = 1071 sm8550_vdec_input_config_param_hevc, 1072 .dec_input_config_params_hevc_size = 1073 ARRAY_SIZE(sm8550_vdec_input_config_param_hevc), 1074 .dec_input_config_params_vp9 = 1075 sm8550_vdec_input_config_param_vp9, 1076 .dec_input_config_params_vp9_size = 1077 ARRAY_SIZE(sm8550_vdec_input_config_param_vp9), 1078 .dec_input_config_params_av1 = 1079 sm8550_vdec_input_config_param_av1, 1080 .dec_input_config_params_av1_size = 1081 ARRAY_SIZE(sm8550_vdec_input_config_param_av1), 1082 .dec_output_config_params = 1083 sm8550_vdec_output_config_params, 1084 .dec_output_config_params_size = 1085 ARRAY_SIZE(sm8550_vdec_output_config_params), 1086 1087 .enc_input_config_params = 1088 sm8550_venc_input_config_params, 1089 .enc_input_config_params_size = 1090 ARRAY_SIZE(sm8550_venc_input_config_params), 1091 .enc_output_config_params = 1092 sm8550_venc_output_config_params, 1093 .enc_output_config_params_size = 1094 ARRAY_SIZE(sm8550_venc_output_config_params), 1095 1096 .dec_input_prop = sm8550_vdec_subscribe_input_properties, 1097 .dec_input_prop_size = ARRAY_SIZE(sm8550_vdec_subscribe_input_properties), 1098 .dec_output_prop_avc = sm8550_vdec_subscribe_output_properties_avc, 1099 .dec_output_prop_avc_size = 1100 ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_avc), 1101 .dec_output_prop_hevc = sm8550_vdec_subscribe_output_properties_hevc, 1102 .dec_output_prop_hevc_size = 1103 ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_hevc), 1104 .dec_output_prop_vp9 = sm8550_vdec_subscribe_output_properties_vp9, 1105 .dec_output_prop_vp9_size = 1106 ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_vp9), 1107 .dec_output_prop_av1 = sm8550_vdec_subscribe_output_properties_av1, 1108 .dec_output_prop_av1_size = 1109 ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_av1), 1110 1111 .dec_ip_int_buf_tbl = sm8550_dec_ip_int_buf_tbl, 1112 .dec_ip_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_ip_int_buf_tbl), 1113 .dec_op_int_buf_tbl = sm8550_dec_op_int_buf_tbl, 1114 .dec_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_op_int_buf_tbl), 1115 1116 .enc_ip_int_buf_tbl = sm8550_enc_ip_int_buf_tbl, 1117 .enc_ip_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_ip_int_buf_tbl), 1118 .enc_op_int_buf_tbl = sm8550_enc_op_int_buf_tbl, 1119 .enc_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_op_int_buf_tbl), 1120 }; 1121