FILE
hfi_platform_v6.c
File preview with syntax highlighting.
linux-6.19.14/drivers/media/platform/qcom/venus/hfi_platform_v6.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, 128, 8192, 1}, 14 .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 128, 8192, 1}, 15 /* ((5760 * 2880) / 256) */ 16 .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 64, 138240, 1}, 17 .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 220000000, 1}, 18 .caps[4] = {HFI_CAPABILITY_SCALE_X, 65536, 65536, 1}, 19 .caps[5] = {HFI_CAPABILITY_SCALE_Y, 65536, 65536, 1}, 20 .caps[6] = {HFI_CAPABILITY_MBS_PER_SECOND, 64, 7833600, 1}, 21 .caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 960, 1}, 22 .caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 0, 1, 1}, 23 .num_caps = 9, 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, 128, 8192, 1}, 40 .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 128, 8192, 1}, 41 .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 64, 138240, 1}, 42 .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 220000000, 1}, 43 .caps[4] = {HFI_CAPABILITY_SCALE_X, 65536, 65536, 1}, 44 .caps[5] = {HFI_CAPABILITY_SCALE_Y, 65536, 65536, 1}, 45 .caps[6] = {HFI_CAPABILITY_MBS_PER_SECOND, 64, 7833600, 1}, 46 .caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 960, 1}, 47 .caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 0, 1, 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}, 51 .pl[1] = {HFI_HEVC_PROFILE_MAIN10, HFI_HEVC_LEVEL_6 | HFI_HEVC_TIER_HIGH0}, 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, 128, 4096, 1}, 66 .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 128, 4096, 1}, 67 .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 64, 36864, 1}, 68 .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 100000000, 1}, 69 .caps[4] = {HFI_CAPABILITY_SCALE_X, 65536, 65536, 1}, 70 .caps[5] = {HFI_CAPABILITY_SCALE_Y, 65536, 65536, 1}, 71 .caps[6] = {HFI_CAPABILITY_MBS_PER_SECOND, 64, 4423680, 1}, 72 .caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 120, 1}, 73 .caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 0, 1, 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, 128, 8192, 1}, 91 .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 128, 8192, 1}, 92 .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 64, 138240, 1}, 93 .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 220000000, 1}, 94 .caps[4] = {HFI_CAPABILITY_SCALE_X, 65536, 65536, 1}, 95 .caps[5] = {HFI_CAPABILITY_SCALE_Y, 65536, 65536, 1}, 96 .caps[6] = {HFI_CAPABILITY_MBS_PER_SECOND, 64, 7833600, 1}, 97 .caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 960, 1}, 98 .caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 0, 1, 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, 128, 1920, 1}, 117 .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 128, 1920, 1}, 118 .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 64, 8160, 1}, 119 .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 40000000, 1}, 120 .caps[4] = {HFI_CAPABILITY_SCALE_X, 65536, 65536, 1}, 121 .caps[5] = {HFI_CAPABILITY_SCALE_Y, 65536, 65536, 1}, 122 .caps[6] = {HFI_CAPABILITY_MBS_PER_SECOND, 64, 7833600, 1}, 123 .caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 30, 1}, 124 .caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 0, 1, 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, 128, 8192, 1}, 140 .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 128, 8192, 1}, 141 .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 64, 138240, 1}, 142 .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 220000000, 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, 64, 7833600, 1}, 146 .caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 960, 1}, 147 .caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 0, 1, 1}, 148 .caps[9] = {HFI_CAPABILITY_PEAKBITRATE, 32000, 160000000, 1}, 149 .caps[10] = {HFI_CAPABILITY_HIER_P_NUM_ENH_LAYERS, 0, 6, 1}, 150 .caps[11] = {HFI_CAPABILITY_ENC_LTR_COUNT, 0, 2, 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, 6, 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, 128, 8192, 16}, 177 .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 128, 8192, 16}, 178 .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 64, 138240, 1}, 179 .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 160000000, 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, 64, 7833600, 1}, 183 .caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 960, 1}, 184 .caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 0, 1, 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, 2, 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, 51, 1}, 192 .caps[16] = {HFI_CAPABILITY_P_FRAME_QP, 0, 51, 1}, 193 .caps[17] = {HFI_CAPABILITY_B_FRAME_QP, 0, 51, 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, 128, 4096, 16}, 214 .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 128, 4096, 16}, 215 .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 64, 36864, 1}, 216 .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 74000000, 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, 64, 4423680, 1}, 220 .caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 120, 1}, 221 .caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 0, 1, 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, 0, 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 *get_capabilities(struct venus_core *core, 250 unsigned int *entries) 251{ 252 if (is_lite(core)) 253 return NULL; 254 255 *entries = ARRAY_SIZE(caps); 256 return caps; 257} 258 259static void get_codecs(struct venus_core *core, u32 *enc_codecs, 260 u32 *dec_codecs, u32 *count) 261{ 262 if (is_lite(core)) 263 return; 264 265 *enc_codecs = HFI_VIDEO_CODEC_H264 | HFI_VIDEO_CODEC_HEVC | 266 HFI_VIDEO_CODEC_VP8; 267 *dec_codecs = HFI_VIDEO_CODEC_H264 | HFI_VIDEO_CODEC_HEVC | 268 HFI_VIDEO_CODEC_VP8 | HFI_VIDEO_CODEC_VP9 | 269 HFI_VIDEO_CODEC_MPEG2; 270 *count = 8; 271} 272 273static const struct hfi_platform_codec_freq_data codec_freq_data[] = { 274 { V4L2_PIX_FMT_H264, VIDC_SESSION_TYPE_ENC, 675, 25, 320 }, 275 { V4L2_PIX_FMT_HEVC, VIDC_SESSION_TYPE_ENC, 675, 25, 320 }, 276 { V4L2_PIX_FMT_VP8, VIDC_SESSION_TYPE_ENC, 675, 60, 320 }, 277 { V4L2_PIX_FMT_MPEG2, VIDC_SESSION_TYPE_DEC, 200, 25, 200 }, 278 { V4L2_PIX_FMT_H264, VIDC_SESSION_TYPE_DEC, 200, 25, 200 }, 279 { V4L2_PIX_FMT_HEVC, VIDC_SESSION_TYPE_DEC, 200, 25, 200 }, 280 { V4L2_PIX_FMT_VP8, VIDC_SESSION_TYPE_DEC, 200, 60, 200 }, 281 { V4L2_PIX_FMT_VP9, VIDC_SESSION_TYPE_DEC, 200, 60, 200 }, 282}; 283 284static const struct hfi_platform_codec_freq_data * 285get_codec_freq_data(struct venus_core *core, u32 session_type, u32 pixfmt) 286{ 287 const struct hfi_platform_codec_freq_data *data = codec_freq_data; 288 unsigned int i, data_size = ARRAY_SIZE(codec_freq_data); 289 const struct hfi_platform_codec_freq_data *found = NULL; 290 291 if (is_lite(core)) 292 return NULL; 293 294 for (i = 0; i < data_size; i++) { 295 if (data[i].pixfmt == pixfmt && data[i].session_type == session_type) { 296 found = &data[i]; 297 break; 298 } 299 } 300 301 return found; 302} 303 304static unsigned long codec_vpp_freq(struct venus_core *core, u32 session_type, 305 u32 codec) 306{ 307 const struct hfi_platform_codec_freq_data *data; 308 309 data = get_codec_freq_data(core, session_type, codec); 310 if (data) 311 return data->vpp_freq; 312 313 return 0; 314} 315 316static unsigned long codec_vsp_freq(struct venus_core *core, u32 session_type, 317 u32 codec) 318{ 319 const struct hfi_platform_codec_freq_data *data; 320 321 data = get_codec_freq_data(core, session_type, codec); 322 if (data) 323 return data->vsp_freq; 324 325 return 0; 326} 327 328static unsigned long codec_lp_freq(struct venus_core *core, u32 session_type, 329 u32 codec) 330{ 331 const struct hfi_platform_codec_freq_data *data; 332 333 data = get_codec_freq_data(core, session_type, codec); 334 if (data) 335 return data->low_power_freq; 336 337 return 0; 338} 339 340const struct hfi_platform hfi_plat_v6 = { 341 .codec_vpp_freq = codec_vpp_freq, 342 .codec_vsp_freq = codec_vsp_freq, 343 .codec_lp_freq = codec_lp_freq, 344 .codecs = get_codecs, 345 .capabilities = get_capabilities, 346 .bufreq = hfi_plat_bufreq_v6, 347};
~/
Read-only file preview.