FILE
hfi_platform_v4.c
File preview with syntax highlighting.
linux-6.19.14/drivers/media/platform/qcom/venus/hfi_platform_v4.c
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Copyright (c) 2020, The Linux Foundation. All rights reserved. 4 */ 5#include "core.h" 6#include "hfi_platform.h" 7 8static const struct hfi_plat_caps caps[] = { 9{ 10 .codec = HFI_VIDEO_CODEC_H264, 11 .domain = VIDC_SESSION_TYPE_DEC, 12 .cap_bufs_mode_dynamic = true, 13 .caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 96, 4096, 1}, 14 .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 96, 4096, 1}, 15 .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 1, 36864, 1}, 16 .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 120000000, 1}, 17 .caps[4] = {HFI_CAPABILITY_SCALE_X, 4096, 65536, 1}, 18 .caps[5] = {HFI_CAPABILITY_SCALE_Y, 4096, 65536, 1}, 19 .caps[6] = {HFI_CAPABILITY_MBS_PER_SECOND, 1, 2073600, 1}, 20 .caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 480, 1}, 21 .caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 1, 2, 1}, 22 .caps[9] = {HFI_CAPABILITY_MAX_WORKMODES, 1, 3, 1}, 23 .num_caps = 10, 24 .pl[0] = {HFI_H264_PROFILE_BASELINE, HFI_H264_LEVEL_52}, 25 .pl[1] = {HFI_H264_PROFILE_MAIN, HFI_H264_LEVEL_52}, 26 .pl[2] = {HFI_H264_PROFILE_HIGH, HFI_H264_LEVEL_52}, 27 .pl[3] = {HFI_H264_PROFILE_CONSTRAINED_BASE, HFI_H264_LEVEL_52}, 28 .pl[4] = {HFI_H264_PROFILE_CONSTRAINED_HIGH, HFI_H264_LEVEL_52}, 29 .num_pl = 5, 30 .fmts[0] = {HFI_BUFFER_OUTPUT, HFI_COLOR_FORMAT_NV12_UBWC}, 31 .fmts[1] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12_UBWC}, 32 .fmts[2] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12}, 33 .fmts[3] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV21}, 34 .num_fmts = 4, 35}, { 36 .codec = HFI_VIDEO_CODEC_HEVC, 37 .domain = VIDC_SESSION_TYPE_DEC, 38 .cap_bufs_mode_dynamic = true, 39 .caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 96, 4096, 1}, 40 .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 96, 4096, 1}, 41 .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 1, 36864, 1}, 42 .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 120000000, 1}, 43 .caps[4] = {HFI_CAPABILITY_SCALE_X, 4096, 65536, 1}, 44 .caps[5] = {HFI_CAPABILITY_SCALE_Y, 4096, 65536, 1}, 45 .caps[6] = {HFI_CAPABILITY_MBS_PER_SECOND, 1, 2073600, 1}, 46 .caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 480, 1}, 47 .caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 1, 2, 1}, 48 .caps[9] = {HFI_CAPABILITY_MAX_WORKMODES, 1, 3, 1}, 49 .num_caps = 10, 50 .pl[0] = {HFI_HEVC_PROFILE_MAIN, HFI_HEVC_LEVEL_6 | HFI_HEVC_TIER_HIGH0 << 28}, 51 .pl[1] = {HFI_HEVC_PROFILE_MAIN10, HFI_HEVC_LEVEL_6 | HFI_HEVC_TIER_HIGH0 << 28}, 52 .num_pl = 2, 53 .fmts[0] = {HFI_BUFFER_OUTPUT, HFI_COLOR_FORMAT_NV12_UBWC}, 54 .fmts[1] = {HFI_BUFFER_OUTPUT, HFI_COLOR_FORMAT_YUV420_TP10_UBWC}, 55 .fmts[2] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12_UBWC}, 56 .fmts[3] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12}, 57 .fmts[4] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV21}, 58 .fmts[5] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_P010}, 59 .fmts[6] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_YUV420_TP10_UBWC}, 60 .num_fmts = 7, 61}, { 62 .codec = HFI_VIDEO_CODEC_VP8, 63 .domain = VIDC_SESSION_TYPE_DEC, 64 .cap_bufs_mode_dynamic = true, 65 .caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 96, 4096, 1}, 66 .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 96, 4096, 1}, 67 .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 1, 36864, 1}, 68 .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 120000000, 1}, 69 .caps[4] = {HFI_CAPABILITY_SCALE_X, 4096, 65536, 1}, 70 .caps[5] = {HFI_CAPABILITY_SCALE_Y, 4096, 65536, 1}, 71 .caps[6] = {HFI_CAPABILITY_MBS_PER_SECOND, 1, 2073600, 1}, 72 .caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 480, 1}, 73 .caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 1, 2, 1}, 74 .caps[9] = {HFI_CAPABILITY_MAX_WORKMODES, 1, 3, 1}, 75 .num_caps = 10, 76 .pl[0] = {HFI_VPX_PROFILE_MAIN, HFI_VPX_LEVEL_VERSION_0}, 77 .pl[1] = {HFI_VPX_PROFILE_MAIN, HFI_VPX_LEVEL_VERSION_1}, 78 .pl[2] = {HFI_VPX_PROFILE_MAIN, HFI_VPX_LEVEL_VERSION_2}, 79 .pl[3] = {HFI_VPX_PROFILE_MAIN, HFI_VPX_LEVEL_VERSION_3}, 80 .num_pl = 4, 81 .fmts[0] = {HFI_BUFFER_OUTPUT, HFI_COLOR_FORMAT_NV12_UBWC}, 82 .fmts[1] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12_UBWC}, 83 .fmts[2] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12}, 84 .fmts[3] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV21}, 85 .num_fmts = 4, 86}, { 87 .codec = HFI_VIDEO_CODEC_VP9, 88 .domain = VIDC_SESSION_TYPE_DEC, 89 .cap_bufs_mode_dynamic = true, 90 .caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 96, 4096, 1}, 91 .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 96, 4096, 1}, 92 .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 1, 36864, 1}, 93 .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 120000000, 1}, 94 .caps[4] = {HFI_CAPABILITY_SCALE_X, 4096, 65536, 1}, 95 .caps[5] = {HFI_CAPABILITY_SCALE_Y, 4096, 65536, 1}, 96 .caps[6] = {HFI_CAPABILITY_MBS_PER_SECOND, 1, 2073600, 1}, 97 .caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 480, 1}, 98 .caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 1, 2, 1}, 99 .caps[9] = {HFI_CAPABILITY_MAX_WORKMODES, 1, 3, 1}, 100 .num_caps = 10, 101 .pl[0] = {HFI_VP9_PROFILE_P0, 200}, 102 .pl[1] = {HFI_VP9_PROFILE_P2_10B, 200}, 103 .num_pl = 2, 104 .fmts[0] = {HFI_BUFFER_OUTPUT, HFI_COLOR_FORMAT_NV12_UBWC}, 105 .fmts[1] = {HFI_BUFFER_OUTPUT, HFI_COLOR_FORMAT_YUV420_TP10_UBWC}, 106 .fmts[2] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12_UBWC}, 107 .fmts[3] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12}, 108 .fmts[4] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV21}, 109 .fmts[5] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_P010}, 110 .fmts[6] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_YUV420_TP10_UBWC}, 111 .num_fmts = 7, 112}, { 113 .codec = HFI_VIDEO_CODEC_MPEG2, 114 .domain = VIDC_SESSION_TYPE_DEC, 115 .cap_bufs_mode_dynamic = true, 116 .caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 96, 1920, 1}, 117 .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 96, 1920, 1}, 118 .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 1, 8160, 1}, 119 .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 40000000, 1}, 120 .caps[4] = {HFI_CAPABILITY_SCALE_X, 4096, 65536, 1}, 121 .caps[5] = {HFI_CAPABILITY_SCALE_Y, 4096, 65536, 1}, 122 .caps[6] = {HFI_CAPABILITY_MBS_PER_SECOND, 1, 244800, 1}, 123 .caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 30, 1}, 124 .caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 1, 2, 1}, 125 .caps[9] = {HFI_CAPABILITY_MAX_WORKMODES, 1, 1, 1}, 126 .num_caps = 10, 127 .pl[0] = {HFI_MPEG2_PROFILE_SIMPLE, HFI_MPEG2_LEVEL_H14}, 128 .pl[1] = {HFI_MPEG2_PROFILE_MAIN, HFI_MPEG2_LEVEL_H14}, 129 .num_pl = 2, 130 .fmts[0] = {HFI_BUFFER_OUTPUT, HFI_COLOR_FORMAT_NV12_UBWC}, 131 .fmts[1] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12_UBWC}, 132 .fmts[2] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12}, 133 .fmts[3] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV21}, 134 .num_fmts = 4, 135}, { 136 .codec = HFI_VIDEO_CODEC_H264, 137 .domain = VIDC_SESSION_TYPE_ENC, 138 .cap_bufs_mode_dynamic = true, 139 .caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 96, 4096, 16}, 140 .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 96, 4096, 16}, 141 .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 1, 36864, 1}, 142 .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 120000000, 1}, 143 .caps[4] = {HFI_CAPABILITY_SCALE_X, 8192, 65536, 1}, 144 .caps[5] = {HFI_CAPABILITY_SCALE_Y, 8192, 65536, 1}, 145 .caps[6] = {HFI_CAPABILITY_MBS_PER_SECOND, 1, 1036800, 1}, 146 .caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 480, 1}, 147 .caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 1, 3, 1}, 148 .caps[9] = {HFI_CAPABILITY_PEAKBITRATE, 32000, 160000000, 1}, 149 .caps[10] = {HFI_CAPABILITY_HIER_P_NUM_ENH_LAYERS, 0, 5, 1}, 150 .caps[11] = {HFI_CAPABILITY_ENC_LTR_COUNT, 0, 4, 1}, 151 .caps[12] = {HFI_CAPABILITY_LCU_SIZE, 16, 16, 1}, 152 .caps[13] = {HFI_CAPABILITY_BFRAME, 0, 1, 1}, 153 .caps[14] = {HFI_CAPABILITY_HIER_P_HYBRID_NUM_ENH_LAYERS, 0, 5, 1}, 154 .caps[15] = {HFI_CAPABILITY_I_FRAME_QP, 0, 51, 1}, 155 .caps[16] = {HFI_CAPABILITY_P_FRAME_QP, 0, 51, 1}, 156 .caps[17] = {HFI_CAPABILITY_B_FRAME_QP, 0, 51, 1}, 157 .caps[18] = {HFI_CAPABILITY_MAX_WORKMODES, 1, 2, 1}, 158 .caps[19] = {HFI_CAPABILITY_RATE_CONTROL_MODES, 0x1000001, 0x1000005, 1}, 159 .caps[20] = {HFI_CAPABILITY_COLOR_SPACE_CONVERSION, 0, 2, 1}, 160 .num_caps = 21, 161 .pl[0] = {HFI_H264_PROFILE_BASELINE, HFI_H264_LEVEL_52}, 162 .pl[1] = {HFI_H264_PROFILE_MAIN, HFI_H264_LEVEL_52}, 163 .pl[2] = {HFI_H264_PROFILE_HIGH, HFI_H264_LEVEL_52}, 164 .pl[3] = {HFI_H264_PROFILE_CONSTRAINED_BASE, HFI_H264_LEVEL_52}, 165 .pl[4] = {HFI_H264_PROFILE_CONSTRAINED_HIGH, HFI_H264_LEVEL_52}, 166 .num_pl = 5, 167 .fmts[0] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_NV12}, 168 .fmts[1] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_NV12_UBWC}, 169 .fmts[2] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_YUV420_TP10_UBWC}, 170 .fmts[3] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_P010}, 171 .num_fmts = 4, 172}, { 173 .codec = HFI_VIDEO_CODEC_HEVC, 174 .domain = VIDC_SESSION_TYPE_ENC, 175 .cap_bufs_mode_dynamic = true, 176 .caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 96, 4096, 16}, 177 .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 96, 4096, 16}, 178 .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 1, 36864, 1}, 179 .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 120000000, 1}, 180 .caps[4] = {HFI_CAPABILITY_SCALE_X, 8192, 65536, 1}, 181 .caps[5] = {HFI_CAPABILITY_SCALE_Y, 8192, 65536, 1}, 182 .caps[6] = {HFI_CAPABILITY_MBS_PER_SECOND, 1, 1036800, 1}, 183 .caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 480, 1}, 184 .caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 1, 3, 1}, 185 .caps[9] = {HFI_CAPABILITY_PEAKBITRATE, 32000, 160000000, 1}, 186 .caps[10] = {HFI_CAPABILITY_HIER_P_NUM_ENH_LAYERS, 0, 5, 1}, 187 .caps[11] = {HFI_CAPABILITY_ENC_LTR_COUNT, 0, 4, 1}, 188 .caps[12] = {HFI_CAPABILITY_LCU_SIZE, 32, 32, 1}, 189 .caps[13] = {HFI_CAPABILITY_BFRAME, 0, 1, 1}, 190 .caps[14] = {HFI_CAPABILITY_HIER_P_HYBRID_NUM_ENH_LAYERS, 0, 5, 1}, 191 .caps[15] = {HFI_CAPABILITY_I_FRAME_QP, 0, 63, 1}, 192 .caps[16] = {HFI_CAPABILITY_P_FRAME_QP, 0, 63, 1}, 193 .caps[17] = {HFI_CAPABILITY_B_FRAME_QP, 0, 63, 1}, 194 .caps[18] = {HFI_CAPABILITY_MAX_WORKMODES, 1, 2, 1}, 195 .caps[19] = {HFI_CAPABILITY_RATE_CONTROL_MODES, 0x1000001, 0x1000005, 1}, 196 .caps[20] = {HFI_CAPABILITY_COLOR_SPACE_CONVERSION, 0, 2, 1}, 197 .caps[21] = {HFI_CAPABILITY_ROTATION, 1, 4, 90}, 198 .caps[22] = {HFI_CAPABILITY_BLUR_WIDTH, 96, 4096, 16}, 199 .caps[23] = {HFI_CAPABILITY_BLUR_HEIGHT, 96, 4096, 16}, 200 .num_caps = 24, 201 .pl[0] = {HFI_HEVC_PROFILE_MAIN, HFI_HEVC_LEVEL_6 | HFI_HEVC_TIER_HIGH0}, 202 .pl[1] = {HFI_HEVC_PROFILE_MAIN10, HFI_HEVC_LEVEL_6 | HFI_HEVC_TIER_HIGH0}, 203 .num_pl = 2, 204 .fmts[0] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_NV12}, 205 .fmts[1] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_NV12_UBWC}, 206 .fmts[2] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_YUV420_TP10_UBWC}, 207 .fmts[3] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_P010}, 208 .num_fmts = 4, 209}, { 210 .codec = HFI_VIDEO_CODEC_VP8, 211 .domain = VIDC_SESSION_TYPE_ENC, 212 .cap_bufs_mode_dynamic = true, 213 .caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 96, 4096, 16}, 214 .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 96, 4096, 16}, 215 .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 1, 36864, 1}, 216 .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 120000000, 1}, 217 .caps[4] = {HFI_CAPABILITY_SCALE_X, 8192, 65536, 1}, 218 .caps[5] = {HFI_CAPABILITY_SCALE_Y, 8192, 65536, 1}, 219 .caps[6] = {HFI_CAPABILITY_MBS_PER_SECOND, 1, 1036800, 1}, 220 .caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 240, 1}, 221 .caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 1, 3, 1}, 222 .caps[9] = {HFI_CAPABILITY_PEAKBITRATE, 32000, 160000000, 1}, 223 .caps[10] = {HFI_CAPABILITY_HIER_P_NUM_ENH_LAYERS, 0, 3, 1}, 224 .caps[11] = {HFI_CAPABILITY_ENC_LTR_COUNT, 0, 2, 1}, 225 .caps[12] = {HFI_CAPABILITY_LCU_SIZE, 16, 16, 1}, 226 .caps[13] = {HFI_CAPABILITY_BFRAME, 0, 1, 1}, 227 .caps[14] = {HFI_CAPABILITY_HIER_P_HYBRID_NUM_ENH_LAYERS, 0, 5, 1}, 228 .caps[15] = {HFI_CAPABILITY_I_FRAME_QP, 0, 127, 1}, 229 .caps[16] = {HFI_CAPABILITY_P_FRAME_QP, 0, 127, 1}, 230 .caps[17] = {HFI_CAPABILITY_MAX_WORKMODES, 1, 2, 1}, 231 .caps[18] = {HFI_CAPABILITY_RATE_CONTROL_MODES, 0x1000001, 0x1000005, 1}, 232 .caps[19] = {HFI_CAPABILITY_BLUR_WIDTH, 96, 4096, 16}, 233 .caps[20] = {HFI_CAPABILITY_BLUR_HEIGHT, 96, 4096, 16}, 234 .caps[21] = {HFI_CAPABILITY_COLOR_SPACE_CONVERSION, 0, 2, 1}, 235 .caps[22] = {HFI_CAPABILITY_ROTATION, 1, 4, 90}, 236 .num_caps = 23, 237 .pl[0] = {HFI_VPX_PROFILE_MAIN, HFI_VPX_LEVEL_VERSION_0}, 238 .pl[1] = {HFI_VPX_PROFILE_MAIN, HFI_VPX_LEVEL_VERSION_1}, 239 .pl[2] = {HFI_VPX_PROFILE_MAIN, HFI_VPX_LEVEL_VERSION_2}, 240 .pl[3] = {HFI_VPX_PROFILE_MAIN, HFI_VPX_LEVEL_VERSION_3}, 241 .num_pl = 4, 242 .fmts[0] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_NV12}, 243 .fmts[1] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_NV12_UBWC}, 244 .fmts[2] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_YUV420_TP10_UBWC}, 245 .fmts[3] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_P010}, 246 .num_fmts = 4, 247} }; 248 249static const struct hfi_plat_caps caps_lite[] = { 250{ 251 .codec = HFI_VIDEO_CODEC_H264, 252 .domain = VIDC_SESSION_TYPE_DEC, 253 .caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 128, 1920, 1}, 254 .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 128, 1920, 1}, 255 .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 64, 8160, 1}, 256 .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 60000000, 1 }, 257 .caps[4] = {HFI_CAPABILITY_MBS_PER_SECOND, 64, 244800, 1}, 258 .caps[5] = {HFI_CAPABILITY_FRAMERATE, 1, 120, 1}, 259 .caps[6] = {HFI_CAPABILITY_MAX_VIDEOCORES, 0, 1, 1}, 260 .num_caps = 7, 261 .pl[0] = { HFI_H264_PROFILE_BASELINE, HFI_H264_LEVEL_5}, 262 .pl[1] = {HFI_H264_PROFILE_MAIN, HFI_H264_LEVEL_5}, 263 .pl[2] = {HFI_H264_PROFILE_HIGH, HFI_H264_LEVEL_5}, 264 .pl[3] = {HFI_H264_PROFILE_CONSTRAINED_BASE, HFI_H264_LEVEL_5}, 265 .pl[4] = {HFI_H264_PROFILE_CONSTRAINED_HIGH, HFI_H264_LEVEL_5}, 266 .num_pl = 5, 267 .fmts[0] = {HFI_BUFFER_OUTPUT, HFI_COLOR_FORMAT_NV12_UBWC}, 268 .fmts[1] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12_UBWC}, 269 .fmts[2] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12}, 270 .fmts[3] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV21}, 271 .num_fmts = 4, 272}, { 273 .codec = HFI_VIDEO_CODEC_HEVC, 274 .domain = VIDC_SESSION_TYPE_DEC, 275 .caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 128, 1920, 1}, 276 .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 128, 1920, 1}, 277 .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 64, 8160, 1}, 278 .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 60000000, 1 }, 279 .caps[4] = {HFI_CAPABILITY_MBS_PER_SECOND, 64, 244800, 1}, 280 .caps[5] = {HFI_CAPABILITY_FRAMERATE, 1, 120, 1}, 281 .caps[6] = {HFI_CAPABILITY_MAX_VIDEOCORES, 0, 1, 1}, 282 .num_caps = 7, 283 .pl[0] = {HFI_HEVC_PROFILE_MAIN, HFI_HEVC_LEVEL_5 | HFI_HEVC_TIER_HIGH0 << 28 }, 284 .pl[1] = {HFI_HEVC_PROFILE_MAIN10, HFI_HEVC_LEVEL_5 | HFI_HEVC_TIER_HIGH0 << 28 }, 285 .num_pl = 2, 286 .fmts[0] = {HFI_BUFFER_OUTPUT, HFI_COLOR_FORMAT_NV12_UBWC}, 287 .fmts[1] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12_UBWC}, 288 .fmts[2] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12}, 289 .fmts[3] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV21}, 290 .num_fmts = 4, 291}, { 292 .codec = HFI_VIDEO_CODEC_VP9, 293 .domain = VIDC_SESSION_TYPE_DEC, 294 .caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 128, 1920, 1}, 295 .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 128, 1920, 1}, 296 .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 64, 8160, 1}, 297 .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 60000000, 1 }, 298 .caps[4] = {HFI_CAPABILITY_MBS_PER_SECOND, 64, 244800, 1}, 299 .caps[5] = {HFI_CAPABILITY_FRAMERATE, 1, 120, 1}, 300 .caps[6] = {HFI_CAPABILITY_MAX_VIDEOCORES, 0, 1, 1}, 301 .num_caps = 7, 302 .pl[0] = {HFI_VP9_PROFILE_P0, 200}, 303 .pl[1] = {HFI_VP9_PROFILE_P2_10B, 200}, 304 .num_pl = 2, 305 .fmts[0] = {HFI_BUFFER_OUTPUT, HFI_COLOR_FORMAT_NV12_UBWC}, 306 .fmts[1] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12_UBWC}, 307 .fmts[2] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12}, 308 .fmts[3] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV21}, 309 .num_fmts = 4, 310}, { 311 .codec = HFI_VIDEO_CODEC_H264, 312 .domain = VIDC_SESSION_TYPE_ENC, 313 .caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 128, 1920, 1}, 314 .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 128, 1920, 1}, 315 .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 64, 8160, 1}, 316 .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 60000000, 1 }, 317 .caps[4] = {HFI_CAPABILITY_MBS_PER_SECOND, 64, 244800, 1}, 318 .caps[5] = {HFI_CAPABILITY_FRAMERATE, 1, 120, 1}, 319 .caps[6] = {HFI_CAPABILITY_MAX_VIDEOCORES, 0, 1, 1}, 320 .caps[7] = {HFI_CAPABILITY_HIER_P_NUM_ENH_LAYERS, 0, 6, 1}, 321 .caps[8] = {HFI_CAPABILITY_ENC_LTR_COUNT, 0, 4, 1}, 322 .caps[9] = {HFI_CAPABILITY_MBS_PER_SECOND_POWERSAVE, 0, 244800, 1}, 323 .caps[10] = {HFI_CAPABILITY_I_FRAME_QP, 0, 51, 1}, 324 .caps[11] = {HFI_CAPABILITY_P_FRAME_QP, 0, 51, 1}, 325 .caps[12] = {HFI_CAPABILITY_B_FRAME_QP, 0, 51, 1}, 326 .caps[13] = {HFI_CAPABILITY_SLICE_BYTE, 1, 10, 1}, 327 .caps[14] = {HFI_CAPABILITY_SLICE_MB, 1, 10, 1}, 328 .num_caps = 15, 329 .pl[0] = {HFI_H264_PROFILE_BASELINE, HFI_H264_LEVEL_5}, 330 .pl[1] = {HFI_H264_PROFILE_MAIN, HFI_H264_LEVEL_5}, 331 .pl[2] = {HFI_H264_PROFILE_HIGH, HFI_H264_LEVEL_5}, 332 .pl[3] = {HFI_H264_PROFILE_CONSTRAINED_BASE, HFI_H264_LEVEL_5}, 333 .pl[4] = {HFI_H264_PROFILE_CONSTRAINED_HIGH, HFI_H264_LEVEL_5}, 334 .num_pl = 5, 335 .fmts[0] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_NV12}, 336 .fmts[1] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_NV12_UBWC}, 337 .num_fmts = 2, 338}, { 339 .codec = HFI_VIDEO_CODEC_HEVC, 340 .domain = VIDC_SESSION_TYPE_ENC, 341 .caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 128, 1920, 1}, 342 .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 128, 1920, 1}, 343 .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 64, 8160, 1}, 344 .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 60000000, 1 }, 345 .caps[4] = {HFI_CAPABILITY_MBS_PER_SECOND, 64, 244800, 1}, 346 .caps[5] = {HFI_CAPABILITY_FRAMERATE, 1, 120, 1}, 347 .caps[6] = {HFI_CAPABILITY_MAX_VIDEOCORES, 0, 1, 1}, 348 .caps[7] = {HFI_CAPABILITY_HIER_P_NUM_ENH_LAYERS, 0, 6, 1}, 349 .caps[8] = {HFI_CAPABILITY_ENC_LTR_COUNT, 0, 4, 1}, 350 .caps[9] = {HFI_CAPABILITY_MBS_PER_SECOND_POWERSAVE, 0, 244800, 1}, 351 .caps[10] = {HFI_CAPABILITY_I_FRAME_QP, 0, 51, 1}, 352 .caps[11] = {HFI_CAPABILITY_P_FRAME_QP, 0, 51, 1}, 353 .caps[12] = {HFI_CAPABILITY_B_FRAME_QP, 0, 51, 1}, 354 .caps[13] = {HFI_CAPABILITY_SLICE_BYTE, 1, 10, 1}, 355 .caps[14] = {HFI_CAPABILITY_SLICE_MB, 1, 10, 1}, 356 .num_caps = 15, 357 .pl[0] = {HFI_HEVC_PROFILE_MAIN, HFI_HEVC_LEVEL_5 | HFI_HEVC_TIER_HIGH0}, 358 .pl[1] = {HFI_HEVC_PROFILE_MAIN10, HFI_HEVC_LEVEL_5 | HFI_HEVC_TIER_HIGH0}, 359 .num_pl = 2, 360 .fmts[0] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_NV12}, 361 .fmts[1] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_NV12_UBWC}, 362 .num_fmts = 2, 363} }; 364 365static const struct hfi_plat_caps *get_capabilities(struct venus_core *core, 366 unsigned int *entries) 367{ 368 *entries = is_lite(core) ? ARRAY_SIZE(caps_lite) : ARRAY_SIZE(caps); 369 370 return is_lite(core) ? caps_lite : caps; 371} 372 373static void get_codecs(struct venus_core *core, 374 u32 *enc_codecs, u32 *dec_codecs, u32 *count) 375{ 376 const struct hfi_plat_caps *caps; 377 unsigned int num; 378 size_t i; 379 380 *enc_codecs = 0; 381 *dec_codecs = 0; 382 383 caps = get_capabilities(core, &num); 384 385 for (i = 0; i < num; caps++, i++) { 386 if (caps->domain == VIDC_SESSION_TYPE_ENC) 387 *enc_codecs |= caps->codec; 388 else 389 *dec_codecs |= caps->codec; 390 } 391 392 *count = num; 393} 394 395static const struct hfi_platform_codec_freq_data codec_freq_data[] = { 396 { V4L2_PIX_FMT_H264, VIDC_SESSION_TYPE_ENC, 675, 10, 320 }, 397 { V4L2_PIX_FMT_HEVC, VIDC_SESSION_TYPE_ENC, 675, 10, 320 }, 398 { V4L2_PIX_FMT_VP8, VIDC_SESSION_TYPE_ENC, 675, 10, 320 }, 399 { V4L2_PIX_FMT_MPEG2, VIDC_SESSION_TYPE_DEC, 200, 10, 200 }, 400 { V4L2_PIX_FMT_H264, VIDC_SESSION_TYPE_DEC, 200, 10, 200 }, 401 { V4L2_PIX_FMT_HEVC, VIDC_SESSION_TYPE_DEC, 200, 10, 200 }, 402 { V4L2_PIX_FMT_VP8, VIDC_SESSION_TYPE_DEC, 200, 10, 200 }, 403 { V4L2_PIX_FMT_VP9, VIDC_SESSION_TYPE_DEC, 200, 10, 200 }, 404}; 405 406static const struct hfi_platform_codec_freq_data codec_freq_data_lite[] = { 407 { V4L2_PIX_FMT_H264, VIDC_SESSION_TYPE_DEC, 440, 0, 440 }, 408 { V4L2_PIX_FMT_HEVC, VIDC_SESSION_TYPE_DEC, 440, 0, 440 }, 409 { V4L2_PIX_FMT_VP9, VIDC_SESSION_TYPE_DEC, 440, 0, 440 }, 410 { V4L2_PIX_FMT_H264, VIDC_SESSION_TYPE_ENC, 675, 0, 675 }, 411 { V4L2_PIX_FMT_HEVC, VIDC_SESSION_TYPE_ENC, 675, 0, 675 }, 412}; 413 414static const struct hfi_platform_codec_freq_data * 415get_codec_freq_data(struct venus_core *core, u32 session_type, u32 pixfmt) 416{ 417 const struct hfi_platform_codec_freq_data *data; 418 unsigned int i, data_size; 419 const struct hfi_platform_codec_freq_data *found = NULL; 420 421 if (is_lite(core)) { 422 data = codec_freq_data_lite; 423 data_size = ARRAY_SIZE(codec_freq_data_lite); 424 } else { 425 data = codec_freq_data; 426 data_size = ARRAY_SIZE(codec_freq_data); 427 } 428 429 for (i = 0; i < data_size; i++) { 430 if (data[i].pixfmt == pixfmt && data[i].session_type == session_type) { 431 found = &data[i]; 432 break; 433 } 434 } 435 436 return found; 437} 438 439static unsigned long codec_vpp_freq(struct venus_core *core, 440 u32 session_type, u32 codec) 441{ 442 const struct hfi_platform_codec_freq_data *data; 443 444 data = get_codec_freq_data(core, session_type, codec); 445 if (data) 446 return data->vpp_freq; 447 448 return 0; 449} 450 451static unsigned long codec_vsp_freq(struct venus_core *core, 452 u32 session_type, u32 codec) 453{ 454 const struct hfi_platform_codec_freq_data *data; 455 456 data = get_codec_freq_data(core, session_type, codec); 457 if (data) 458 return data->vsp_freq; 459 460 return 0; 461} 462 463static unsigned long codec_lp_freq(struct venus_core *core, 464 u32 session_type, u32 codec) 465{ 466 const struct hfi_platform_codec_freq_data *data; 467 468 data = get_codec_freq_data(core, session_type, codec); 469 if (data) 470 return data->low_power_freq; 471 472 return 0; 473} 474 475const struct hfi_platform hfi_plat_v4 = { 476 .codec_vpp_freq = codec_vpp_freq, 477 .codec_vsp_freq = codec_vsp_freq, 478 .codec_lp_freq = codec_lp_freq, 479 .codecs = get_codecs, 480 .capabilities = get_capabilities, 481};
~/
Read-only file preview.