Skip to content

Commit 869d77e

Browse files
Stanimir Varbanovmchehab
authored andcommitted
media: venus: hfi_plat_v6: Populate capabilities for v6
Add new hfi platform file with capabilities of hfi v6. Signed-off-by: Stanimir Varbanov <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
1 parent 367b619 commit 869d77e

File tree

4 files changed

+329
-0
lines changed

4 files changed

+329
-0
lines changed

drivers/media/platform/qcom/venus/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ venus-core-objs += core.o helpers.o firmware.o \
55
hfi_venus.o hfi_msgs.o hfi_cmds.o hfi.o \
66
hfi_parser.o pm_helpers.o dbgfs.o \
77
hfi_platform.o hfi_platform_v4.o \
8+
hfi_platform_v6.o \
89

910
venus-dec-objs += vdec.o vdec_ctrls.o
1011
venus-enc-objs += venc.o venc_ctrls.o

drivers/media/platform/qcom/venus/hfi_platform.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ const struct hfi_platform *hfi_platform_get(enum hfi_version version)
99
switch (version) {
1010
case HFI_VERSION_4XX:
1111
return &hfi_plat_v4;
12+
case HFI_VERSION_6XX:
13+
return &hfi_plat_v6;
1214
default:
1315
break;
1416
}

drivers/media/platform/qcom/venus/hfi_platform.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ struct hfi_platform {
5353
};
5454

5555
extern const struct hfi_platform hfi_plat_v4;
56+
extern const struct hfi_platform hfi_plat_v6;
5657

5758
const struct hfi_platform *hfi_platform_get(enum hfi_version version);
5859
unsigned long hfi_platform_get_codec_vpp_freq(enum hfi_version version, u32 codec,
Lines changed: 325 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,325 @@
1+
// SPDX-License-Identifier: GPL-2.0-only
2+
/*
3+
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
4+
*/
5+
#include "hfi_platform.h"
6+
7+
static const struct hfi_plat_caps caps[] = {
8+
{
9+
.codec = HFI_VIDEO_CODEC_H264,
10+
.domain = VIDC_SESSION_TYPE_DEC,
11+
.cap_bufs_mode_dynamic = true,
12+
.caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 96, 5760, 1},
13+
.caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 96, 5760, 1},
14+
/* ((5760 * 2880) / 256) */
15+
.caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 36, 64800, 1},
16+
.caps[3] = {HFI_CAPABILITY_BITRATE, 1, 200000000, 1},
17+
.caps[4] = {HFI_CAPABILITY_SCALE_X, 65536, 65536, 1},
18+
.caps[5] = {HFI_CAPABILITY_SCALE_Y, 65536, 65536, 1},
19+
.caps[6] = {HFI_CAPABILITY_MBS_PER_SECOND, 36, 1958400, 1},
20+
.caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 480, 1},
21+
.caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 0, 1, 1},
22+
.num_caps = 9,
23+
.pl[0] = {HFI_H264_PROFILE_BASELINE, HFI_H264_LEVEL_52},
24+
.pl[1] = {HFI_H264_PROFILE_MAIN, HFI_H264_LEVEL_52},
25+
.pl[2] = {HFI_H264_PROFILE_HIGH, HFI_H264_LEVEL_52},
26+
.pl[3] = {HFI_H264_PROFILE_CONSTRAINED_BASE, HFI_H264_LEVEL_52},
27+
.pl[4] = {HFI_H264_PROFILE_CONSTRAINED_HIGH, HFI_H264_LEVEL_52},
28+
.num_pl = 5,
29+
.fmts[0] = {HFI_BUFFER_OUTPUT, HFI_COLOR_FORMAT_NV12_UBWC},
30+
.fmts[1] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12_UBWC},
31+
.fmts[2] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12},
32+
.fmts[3] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV21},
33+
.num_fmts = 4,
34+
}, {
35+
.codec = HFI_VIDEO_CODEC_HEVC,
36+
.domain = VIDC_SESSION_TYPE_DEC,
37+
.cap_bufs_mode_dynamic = true,
38+
.caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 96, 4096, 1},
39+
.caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 96, 4096, 1},
40+
.caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 1, 36864, 1},
41+
.caps[3] = {HFI_CAPABILITY_BITRATE, 1, 120000000, 1},
42+
.caps[4] = {HFI_CAPABILITY_SCALE_X, 4096, 65536, 1},
43+
.caps[5] = {HFI_CAPABILITY_SCALE_Y, 4096, 65536, 1},
44+
.caps[6] = {HFI_CAPABILITY_MBS_PER_SECOND, 1, 2073600, 1},
45+
.caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 480, 1},
46+
.caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 1, 2, 1},
47+
.caps[9] = {HFI_CAPABILITY_MAX_WORKMODES, 1, 3, 1},
48+
.num_caps = 10,
49+
.pl[0] = {HFI_HEVC_PROFILE_MAIN, HFI_HEVC_LEVEL_6 | HFI_HEVC_TIER_HIGH0},
50+
.pl[1] = {HFI_HEVC_PROFILE_MAIN10, HFI_HEVC_LEVEL_6 | HFI_HEVC_TIER_HIGH0},
51+
.num_pl = 2,
52+
.fmts[0] = {HFI_BUFFER_OUTPUT, HFI_COLOR_FORMAT_NV12_UBWC},
53+
.fmts[1] = {HFI_BUFFER_OUTPUT, HFI_COLOR_FORMAT_YUV420_TP10_UBWC},
54+
.fmts[2] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12_UBWC},
55+
.fmts[3] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12},
56+
.fmts[4] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV21},
57+
.fmts[5] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_P010},
58+
.fmts[6] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_YUV420_TP10},
59+
.num_fmts = 7,
60+
}, {
61+
.codec = HFI_VIDEO_CODEC_VP8,
62+
.domain = VIDC_SESSION_TYPE_DEC,
63+
.cap_bufs_mode_dynamic = true,
64+
.caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 96, 4096, 1},
65+
.caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 96, 4096, 1},
66+
.caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 1, 36864, 1},
67+
.caps[3] = {HFI_CAPABILITY_BITRATE, 1, 120000000, 1},
68+
.caps[4] = {HFI_CAPABILITY_SCALE_X, 4096, 65536, 1},
69+
.caps[5] = {HFI_CAPABILITY_SCALE_Y, 4096, 65536, 1},
70+
.caps[6] = {HFI_CAPABILITY_MBS_PER_SECOND, 1, 2073600, 1},
71+
.caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 480, 1},
72+
.caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 1, 2, 1},
73+
.caps[9] = {HFI_CAPABILITY_MAX_WORKMODES, 1, 3, 1},
74+
.num_caps = 10,
75+
.pl[0] = {HFI_VPX_PROFILE_MAIN, HFI_VPX_LEVEL_VERSION_0},
76+
.pl[1] = {HFI_VPX_PROFILE_MAIN, HFI_VPX_LEVEL_VERSION_1},
77+
.pl[2] = {HFI_VPX_PROFILE_MAIN, HFI_VPX_LEVEL_VERSION_2},
78+
.pl[3] = {HFI_VPX_PROFILE_MAIN, HFI_VPX_LEVEL_VERSION_3},
79+
.num_pl = 4,
80+
.fmts[0] = {HFI_BUFFER_OUTPUT, HFI_COLOR_FORMAT_NV12_UBWC},
81+
.fmts[1] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12_UBWC},
82+
.fmts[2] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12},
83+
.fmts[3] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV21},
84+
.num_fmts = 4,
85+
}, {
86+
.codec = HFI_VIDEO_CODEC_VP9,
87+
.domain = VIDC_SESSION_TYPE_DEC,
88+
.cap_bufs_mode_dynamic = true,
89+
.caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 96, 4096, 1},
90+
.caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 96, 4096, 1},
91+
.caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 1, 36864, 1},
92+
.caps[3] = {HFI_CAPABILITY_BITRATE, 1, 120000000, 1},
93+
.caps[4] = {HFI_CAPABILITY_SCALE_X, 4096, 65536, 1},
94+
.caps[5] = {HFI_CAPABILITY_SCALE_Y, 4096, 65536, 1},
95+
.caps[6] = {HFI_CAPABILITY_MBS_PER_SECOND, 1, 2073600, 1},
96+
.caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 480, 1},
97+
.caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 1, 2, 1},
98+
.caps[9] = {HFI_CAPABILITY_MAX_WORKMODES, 1, 3, 1},
99+
.num_caps = 10,
100+
.pl[0] = {HFI_VP9_PROFILE_P0, 200},
101+
.pl[1] = {HFI_VP9_PROFILE_P2_10B, 200},
102+
.num_pl = 2,
103+
.fmts[0] = {HFI_BUFFER_OUTPUT, HFI_COLOR_FORMAT_NV12_UBWC},
104+
.fmts[1] = {HFI_BUFFER_OUTPUT, HFI_COLOR_FORMAT_YUV420_TP10_UBWC},
105+
.fmts[2] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12_UBWC},
106+
.fmts[3] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12},
107+
.fmts[4] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV21},
108+
.fmts[5] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_P010},
109+
.fmts[6] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_YUV420_TP10},
110+
.num_fmts = 7,
111+
}, {
112+
.codec = HFI_VIDEO_CODEC_MPEG2,
113+
.domain = VIDC_SESSION_TYPE_DEC,
114+
.cap_bufs_mode_dynamic = true,
115+
.caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 96, 1920, 1},
116+
.caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 96, 1920, 1},
117+
.caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 1, 8160, 1},
118+
.caps[3] = {HFI_CAPABILITY_BITRATE, 1, 40000000, 1},
119+
.caps[4] = {HFI_CAPABILITY_SCALE_X, 4096, 65536, 1},
120+
.caps[5] = {HFI_CAPABILITY_SCALE_Y, 4096, 65536, 1},
121+
.caps[6] = {HFI_CAPABILITY_MBS_PER_SECOND, 1, 244800, 1},
122+
.caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 30, 1},
123+
.caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 1, 2, 1},
124+
.caps[9] = {HFI_CAPABILITY_MAX_WORKMODES, 1, 1, 1},
125+
.num_caps = 10,
126+
.pl[0] = {HFI_MPEG2_PROFILE_SIMPLE, HFI_MPEG2_LEVEL_H14},
127+
.pl[1] = {HFI_MPEG2_PROFILE_MAIN, HFI_MPEG2_LEVEL_H14},
128+
.num_pl = 2,
129+
.fmts[0] = {HFI_BUFFER_OUTPUT, HFI_COLOR_FORMAT_NV12_UBWC},
130+
.fmts[1] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12_UBWC},
131+
.fmts[2] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12},
132+
.fmts[3] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV21},
133+
.num_fmts = 4,
134+
}, {
135+
.codec = HFI_VIDEO_CODEC_H264,
136+
.domain = VIDC_SESSION_TYPE_ENC,
137+
.cap_bufs_mode_dynamic = true,
138+
.caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 96, 4096, 16},
139+
.caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 96, 4096, 16},
140+
.caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 1, 36864, 1},
141+
.caps[3] = {HFI_CAPABILITY_BITRATE, 1, 120000000, 1},
142+
.caps[4] = {HFI_CAPABILITY_SCALE_X, 8192, 65536, 1},
143+
.caps[5] = {HFI_CAPABILITY_SCALE_Y, 8192, 65536, 1},
144+
.caps[6] = {HFI_CAPABILITY_MBS_PER_SECOND, 1, 1036800, 1},
145+
.caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 480, 1},
146+
.caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 1, 3, 1},
147+
.caps[9] = {HFI_CAPABILITY_PEAKBITRATE, 32000, 160000000, 1},
148+
.caps[10] = {HFI_CAPABILITY_HIER_P_NUM_ENH_LAYERS, 0, 5, 1},
149+
.caps[11] = {HFI_CAPABILITY_ENC_LTR_COUNT, 0, 4, 1},
150+
.caps[12] = {HFI_CAPABILITY_LCU_SIZE, 16, 16, 1},
151+
.caps[13] = {HFI_CAPABILITY_BFRAME, 0, 1, 1},
152+
.caps[14] = {HFI_CAPABILITY_HIER_P_HYBRID_NUM_ENH_LAYERS, 0, 5, 1},
153+
.caps[15] = {HFI_CAPABILITY_I_FRAME_QP, 0, 51, 1},
154+
.caps[16] = {HFI_CAPABILITY_P_FRAME_QP, 0, 51, 1},
155+
.caps[17] = {HFI_CAPABILITY_B_FRAME_QP, 0, 51, 1},
156+
.caps[18] = {HFI_CAPABILITY_MAX_WORKMODES, 1, 2, 1},
157+
.caps[19] = {HFI_CAPABILITY_RATE_CONTROL_MODES, 0x1000001, 0x1000005, 1},
158+
.caps[20] = {HFI_CAPABILITY_COLOR_SPACE_CONVERSION, 0, 2, 1},
159+
.num_caps = 21,
160+
.pl[0] = {HFI_H264_PROFILE_BASELINE, HFI_H264_LEVEL_52},
161+
.pl[1] = {HFI_H264_PROFILE_MAIN, HFI_H264_LEVEL_52},
162+
.pl[2] = {HFI_H264_PROFILE_HIGH, HFI_H264_LEVEL_52},
163+
.pl[3] = {HFI_H264_PROFILE_CONSTRAINED_BASE, HFI_H264_LEVEL_52},
164+
.pl[4] = {HFI_H264_PROFILE_CONSTRAINED_HIGH, HFI_H264_LEVEL_52},
165+
.num_pl = 5,
166+
.fmts[0] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_NV12},
167+
.fmts[1] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_NV12_UBWC},
168+
.fmts[2] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_YUV420_TP10_UBWC},
169+
.fmts[3] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_P010},
170+
.num_fmts = 4,
171+
}, {
172+
.codec = HFI_VIDEO_CODEC_HEVC,
173+
.domain = VIDC_SESSION_TYPE_ENC,
174+
.cap_bufs_mode_dynamic = true,
175+
.caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 96, 4096, 16},
176+
.caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 96, 4096, 16},
177+
.caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 1, 36864, 1},
178+
.caps[3] = {HFI_CAPABILITY_BITRATE, 1, 120000000, 1},
179+
.caps[4] = {HFI_CAPABILITY_SCALE_X, 8192, 65536, 1},
180+
.caps[5] = {HFI_CAPABILITY_SCALE_Y, 8192, 65536, 1},
181+
.caps[6] = {HFI_CAPABILITY_MBS_PER_SECOND, 1, 1036800, 1},
182+
.caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 480, 1},
183+
.caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 1, 3, 1},
184+
.caps[9] = {HFI_CAPABILITY_PEAKBITRATE, 32000, 160000000, 1},
185+
.caps[10] = {HFI_CAPABILITY_HIER_P_NUM_ENH_LAYERS, 0, 5, 1},
186+
.caps[11] = {HFI_CAPABILITY_ENC_LTR_COUNT, 0, 4, 1},
187+
.caps[12] = {HFI_CAPABILITY_LCU_SIZE, 32, 32, 1},
188+
.caps[13] = {HFI_CAPABILITY_BFRAME, 0, 1, 1},
189+
.caps[14] = {HFI_CAPABILITY_HIER_P_HYBRID_NUM_ENH_LAYERS, 0, 5, 1},
190+
.caps[15] = {HFI_CAPABILITY_I_FRAME_QP, 0, 63, 1},
191+
.caps[16] = {HFI_CAPABILITY_P_FRAME_QP, 0, 63, 1},
192+
.caps[17] = {HFI_CAPABILITY_B_FRAME_QP, 0, 63, 1},
193+
.caps[18] = {HFI_CAPABILITY_MAX_WORKMODES, 1, 2, 1},
194+
.caps[19] = {HFI_CAPABILITY_RATE_CONTROL_MODES, 0x1000001, 0x1000005, 1},
195+
.caps[20] = {HFI_CAPABILITY_COLOR_SPACE_CONVERSION, 0, 2, 1},
196+
.caps[21] = {HFI_CAPABILITY_ROTATION, 1, 4, 90},
197+
.caps[22] = {HFI_CAPABILITY_BLUR_WIDTH, 96, 4096, 16},
198+
.caps[23] = {HFI_CAPABILITY_BLUR_HEIGHT, 96, 4096, 16},
199+
.num_caps = 24,
200+
.pl[0] = {HFI_HEVC_PROFILE_MAIN, HFI_HEVC_LEVEL_6 | HFI_HEVC_TIER_HIGH0},
201+
.pl[1] = {HFI_HEVC_PROFILE_MAIN10, HFI_HEVC_LEVEL_6 | HFI_HEVC_TIER_HIGH0},
202+
.num_pl = 2,
203+
.fmts[0] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_NV12},
204+
.fmts[1] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_NV12_UBWC},
205+
.fmts[2] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_YUV420_TP10_UBWC},
206+
.fmts[3] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_P010},
207+
.num_fmts = 4,
208+
}, {
209+
.codec = HFI_VIDEO_CODEC_VP8,
210+
.domain = VIDC_SESSION_TYPE_ENC,
211+
.cap_bufs_mode_dynamic = true,
212+
.caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 96, 4096, 16},
213+
.caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 96, 4096, 16},
214+
.caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 1, 36864, 1},
215+
.caps[3] = {HFI_CAPABILITY_BITRATE, 1, 120000000, 1},
216+
.caps[4] = {HFI_CAPABILITY_SCALE_X, 8192, 65536, 1},
217+
.caps[5] = {HFI_CAPABILITY_SCALE_Y, 8192, 65536, 1},
218+
.caps[6] = {HFI_CAPABILITY_MBS_PER_SECOND, 1, 1036800, 1},
219+
.caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 240, 1},
220+
.caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 1, 3, 1},
221+
.caps[9] = {HFI_CAPABILITY_PEAKBITRATE, 32000, 160000000, 1},
222+
.caps[10] = {HFI_CAPABILITY_HIER_P_NUM_ENH_LAYERS, 0, 3, 1},
223+
.caps[11] = {HFI_CAPABILITY_ENC_LTR_COUNT, 0, 2, 1},
224+
.caps[12] = {HFI_CAPABILITY_LCU_SIZE, 16, 16, 1},
225+
.caps[13] = {HFI_CAPABILITY_BFRAME, 0, 1, 1},
226+
.caps[14] = {HFI_CAPABILITY_HIER_P_HYBRID_NUM_ENH_LAYERS, 0, 5, 1},
227+
.caps[15] = {HFI_CAPABILITY_I_FRAME_QP, 0, 127, 1},
228+
.caps[16] = {HFI_CAPABILITY_P_FRAME_QP, 0, 127, 1},
229+
.caps[17] = {HFI_CAPABILITY_MAX_WORKMODES, 1, 2, 1},
230+
.caps[18] = {HFI_CAPABILITY_RATE_CONTROL_MODES, 0x1000001, 0x1000005, 1},
231+
.caps[19] = {HFI_CAPABILITY_BLUR_WIDTH, 96, 4096, 16},
232+
.caps[20] = {HFI_CAPABILITY_BLUR_HEIGHT, 96, 4096, 16},
233+
.caps[21] = {HFI_CAPABILITY_COLOR_SPACE_CONVERSION, 0, 2, 1},
234+
.caps[22] = {HFI_CAPABILITY_ROTATION, 1, 4, 90},
235+
.num_caps = 23,
236+
.pl[0] = {HFI_VPX_PROFILE_MAIN, HFI_VPX_LEVEL_VERSION_0},
237+
.pl[1] = {HFI_VPX_PROFILE_MAIN, HFI_VPX_LEVEL_VERSION_1},
238+
.pl[2] = {HFI_VPX_PROFILE_MAIN, HFI_VPX_LEVEL_VERSION_2},
239+
.pl[3] = {HFI_VPX_PROFILE_MAIN, HFI_VPX_LEVEL_VERSION_3},
240+
.num_pl = 4,
241+
.fmts[0] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_NV12},
242+
.fmts[1] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_NV12_UBWC},
243+
.fmts[2] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_YUV420_TP10_UBWC},
244+
.fmts[3] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_P010},
245+
.num_fmts = 4,
246+
} };
247+
248+
static const struct hfi_plat_caps *get_capabilities(unsigned int *entries)
249+
{
250+
*entries = ARRAY_SIZE(caps);
251+
return caps;
252+
}
253+
254+
static void get_codecs(u32 *enc_codecs, u32 *dec_codecs, u32 *count)
255+
{
256+
*enc_codecs = HFI_VIDEO_CODEC_H264 | HFI_VIDEO_CODEC_HEVC |
257+
HFI_VIDEO_CODEC_VP8;
258+
*dec_codecs = HFI_VIDEO_CODEC_H264 | HFI_VIDEO_CODEC_HEVC |
259+
HFI_VIDEO_CODEC_VP8 | HFI_VIDEO_CODEC_VP9 |
260+
HFI_VIDEO_CODEC_MPEG2;
261+
*count = 8;
262+
}
263+
264+
static const struct hfi_platform_codec_freq_data codec_freq_data[] = {
265+
{ V4L2_PIX_FMT_H264, VIDC_SESSION_TYPE_ENC, 675, 25 },
266+
{ V4L2_PIX_FMT_HEVC, VIDC_SESSION_TYPE_ENC, 675, 25 },
267+
{ V4L2_PIX_FMT_VP8, VIDC_SESSION_TYPE_ENC, 675, 60 },
268+
{ V4L2_PIX_FMT_MPEG2, VIDC_SESSION_TYPE_DEC, 200, 25 },
269+
{ V4L2_PIX_FMT_H264, VIDC_SESSION_TYPE_DEC, 200, 25 },
270+
{ V4L2_PIX_FMT_HEVC, VIDC_SESSION_TYPE_DEC, 200, 25 },
271+
{ V4L2_PIX_FMT_VP8, VIDC_SESSION_TYPE_DEC, 200, 60 },
272+
{ V4L2_PIX_FMT_VP9, VIDC_SESSION_TYPE_DEC, 200, 60 },
273+
};
274+
275+
static const struct hfi_platform_codec_freq_data *
276+
get_codec_freq_data(u32 session_type, u32 pixfmt)
277+
{
278+
const struct hfi_platform_codec_freq_data *data = codec_freq_data;
279+
unsigned int i, data_size = ARRAY_SIZE(codec_freq_data);
280+
const struct hfi_platform_codec_freq_data *found = NULL;
281+
282+
for (i = 0; i < data_size; i++) {
283+
if (data[i].pixfmt == pixfmt && data[i].session_type == session_type) {
284+
found = &data[i];
285+
break;
286+
}
287+
}
288+
289+
return found;
290+
}
291+
292+
static unsigned long codec_vpp_freq(u32 session_type, u32 codec)
293+
{
294+
const struct hfi_platform_codec_freq_data *data;
295+
296+
data = get_codec_freq_data(session_type, codec);
297+
if (data)
298+
return data->vpp_freq;
299+
300+
return 0;
301+
}
302+
303+
static unsigned long codec_vsp_freq(u32 session_type, u32 codec)
304+
{
305+
const struct hfi_platform_codec_freq_data *data;
306+
307+
data = get_codec_freq_data(session_type, codec);
308+
if (data)
309+
return data->vsp_freq;
310+
311+
return 0;
312+
}
313+
314+
static u8 num_vpp_pipes(void)
315+
{
316+
return 4;
317+
}
318+
319+
const struct hfi_platform hfi_plat_v6 = {
320+
.codec_vpp_freq = codec_vpp_freq,
321+
.codec_vsp_freq = codec_vsp_freq,
322+
.codecs = get_codecs,
323+
.capabilities = get_capabilities,
324+
.num_vpp_pipes = num_vpp_pipes,
325+
};

0 commit comments

Comments
 (0)