1 /*------------------------------------------------------------------------
2 * Vulkan Conformance Tests
3 * ------------------------
4 *
5 * Copyright (c) 2023 The Khronos Group Inc.
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 *
19 *//*!
20 * \file
21 * \brief Reference checksums for video decode validation
22 *
23 * See the <vulkan_data_dir>/vulkan/video/frame_checksums.py file for
24 * instructions on generating the checksums for new tests.
25 *--------------------------------------------------------------------*/
26
27 #include "vktVideoClipInfo.hpp"
28 #include "vktVideoTestUtils.hpp"
29
30
31 namespace vkt {
32 namespace video
33 {
34
35 static const char* clipA[30] =
36 {
37 "7fec73fbcd485785b0c5f14776628bd6",
38 "4e635dfa94b770ee983540746f416270",
39 "a8bbb2ae42f5edebe7891ff803be7c4f",
40 "3389478c7a0011551274bb68ce6deb5f",
41 "63aa1d861304729dfec950f486a15a0b",
42 "04980dcedb06d21d0c7dc37653d3a458",
43 "2a0162386ebbf3eea6f613042cb2a617",
44 "a29121c412ae6bda174254039a5b6086",
45 "bfdeb27a7a83b250a8311a4468c3e4bf",
46 "cee21548a5235a8eea878dd695ef8f50",
47 "3b8cc378c3843c7c5918e9213e9e4f81",
48 "d11322bbaec122fcc7f2d8ed6b455110",
49 "ffe3f13784f7689735d2b8c96bcd2d0b",
50 "0253711c4523988d4b9736238f5e5d01",
51 "d3968c4560c31815443f857ddb0082a3",
52 "74b0ae5f72a6676e4679b30f06598277",
53 "7d49ad952d2600aefe20e0a6611e91bf",
54 "32d86ff0d1dfb493adb2d90e973025fb",
55 "a0f52f968b800bd8b67c2a44b5394690",
56 "0a54a47ed72ecead9f7a43f39a562fca",
57 "c1effee5f75f5c59c71a3765e199861c",
58 "75f020c1da96c2d5da31483c16a1e4ed",
59 "66cfa534ced4f1b18b6b04cc0a41331d",
60 "3648527cf7b9b7366759c5ab8f1aab20",
61 "1c7c47a07c5bb38dfe2a4e9e2cf5d860",
62 "2e2bc3c723a731b4df4eb32a0b36293d",
63 "6e647c760a0304d97abf291a2b9e66be",
64 "5a9fe2e1bdf31ad0d256aeeecbe35ae7",
65 "3e825fb6fb5361151fb7c1347523d6d0",
66 "2870bd63631f4b787a1b084974cd519c",
67 };
68
69 static const char* clipB[30] =
70 {
71 "a5221c5caa575aadb9c6c1e968ab6c29",
72 "5214efd7d98f6c4dcab897bb1310743b",
73 "6c7ab991e68a285711731911d88ed121",
74 "43a583ed805e254a5473ae515eea2e93",
75 "1a9fb658f449d71648b6f2cdca1aa34d",
76 "377be6813960071259167f7305894469",
77 "cf3ab21b6b6570f63a2b8eff7ee04879",
78 "596a68452693b2e56df40e30275a353e",
79 "e785d42901a1196690bd0f3700011a90",
80 "88a00463d768d796e106408ebcb6721e",
81 "bda7da34a619ef6d9cd08ab03fa72e3a",
82 "bebc1624c3cdebcfc3016c33955f4923",
83 "e209eac5c302e23252570b74973f94bf",
84 "4ff0ba2f72cb6d8f0229dc12e2cfbbcf",
85 "18ac88f74d7df142046079d733779035",
86 "147bb36e92f6ff87e348c48f38b47dab",
87 "9e09197f76ba89c70c2b183a167a6696",
88 "867c16867c26bc0c58f16c5ebeff6eb2",
89 "b8efc23369b7f2ea19e2b21ce97368db",
90 "5b911f588984740ef772f5845f3a5805",
91 "27f0f7fe39718799061e0e532bfbed14",
92 "60020402bc2b645b703af5156f52ee9d",
93 "d73e71817bf776b62b4d1e81793d659f",
94 "e873082290fbcfddebd784fc2edaab9f",
95 "2f4e293b00c145f1f5515920d2fd5705",
96 "be907f259eca15e8914bc08861f3c76f",
97 "a18eb46de4c7dff7915bc65673d2fff9",
98 "615315bca5a50fabad86745e070b3c8f",
99 "2a2aa07f61aa590eb9a10a07c85dfe04",
100 "119fd37851af0cac45fda60d7dc1ccd8",
101 };
102
103 static const char* clipC[30] =
104 {
105 "2086be0ea6f35e68a9f34ea51a359ef0", // 352x288 reference checksums
106 "9e045b8e14c7f635fff4a4e56a359ff7",
107 "b9aace50035d92d2b2b0cbc5049ccea1",
108 "eda08231bb604567d72d850b9aaa8658",
109 "b5b9ec2c1a231f595c6c747a93926287",
110 "81f77e981e65926f04ed9483f838ce1f",
111 "8fb63cb865f410e5d003a6691ef6d998",
112 "0417e3ce4d51670e8cf5e1a1a8b64b0d",
113 "5c7cee8e1e72b3acb71dd09f51e3d4e4",
114 "966368b1970e59dbd14d5e492691c25c",
115 "8afd1bb08c05651dacc5bf1a72fb1001",
116 "bd9fe310e70fc55fbc0b43895aa14eb1",
117 "057435492eb70ebf1ffcec5b423828f7",
118 "6df3ab9e8f590e8e21b88e5401361d49",
119 "531730c9a1ce3076c5f1a30609efcf17",
120 "87823f36c56ecd539c955cfe3e44d097", // 176x144 reference checksums
121 "65399b5342b3ee7bba9f51074523ae16",
122 "fd3c5efbc237e24c3242aaa35124b77c",
123 "56dd0b57ba4b436605f236ae7ad8535c",
124 "c1694a837158581a282493ffb7778d1a",
125 "64417694aeccbe36abb77cd5689083ea",
126 "08bba16075a5d1d36fadac3ca3a71d06",
127 "adb982cd7240ab8d97924631455a5d88",
128 "822bd35904dabe46e9238aae77c5e85f",
129 "1da1fc85653b894fc6f4cf2ddd41b7f6",
130 "80e283c058324a21cace4c8ed1f0a178",
131 "b5169864eb21620a1a4a0f988c01fefa",
132 "cf38cf96287f0cd13fdbdc2b25cfd0d1",
133 "95b71dc4a6a7925cfb1ad6c76e547b95",
134 "c2146da8b89f068e00d7de837a02b89c",
135 };
136
137 static const char* h264_4k_26_ibp_main[26] =
138 {
139 "2cd5ad413430098893a617ab46a7b885",
140 "0b82fc7501897a834470f68e0647c96b",
141 "5099dbd788ec90ad9010bbcc4ca3a813",
142 "10ffaf41904c779627ab6ae9ebe5bf9f",
143 "7d4aca0319da143a09d03b3b13d5ba23",
144 "34f6ab5b1b676c189950f0b2f80d9431",
145 "e812f06035d77030cf56eaa65632783c",
146 "f8dbeb21b35a5fedcfd171a8207f836b",
147 "b0c5a18f31c92e9778d1dcdca4b781d3",
148 "bb89ff68261f0626eb8699dc3e000278",
149 "aeb5064995db3a5cdae6283c67a2949e",
150 "425dfb76d5961994a6dff267dc0fc5a6",
151 "17800cb3d7598c6284f544069653c594",
152 "bb193efca8e1a2f6bcb9f523c815468f",
153 "a8eb65b204edc25a9dada32889717218",
154 "715e7ec00e756ca3c85722f9464aeba3",
155 "496e1e2c97a8cbfabb7b179838e3384f",
156 "102445bf67c88ecb761f3263b8ab672b",
157 "d9a3dbe8b05a4d7fd04a4564771b3dc0",
158 "8fe9190578592d6a551f47f19926bb21",
159 "854519810e75eb9501e896ec66b83d59",
160 "ccd65246951a2b77dce66e11faa97811",
161 "cde30e5d581267834ae91f4af77d7fac",
162 "e144d9fe07470ae7be48362ab8817cc1",
163 "4ef58adc2006d4456a0145102efe83b3",
164 "ebfb7d5301c287e09a6473402fdcd010",
165 };
166
167 static const char* jellyfishHEVC[26] =
168 {
169 "131ecbc5c6ebac63c3b25721cb5cb2b2",
170 "0a9da70fd9959874e74542c7768d9e08",
171 "2f09ce3f5d243d84b12f53d2574b8e9c",
172 "909d939a5d09650e49703b7e78beddfe",
173 "483cf425d719b961173db2f1a1c7f282",
174 "b3d1e44427723fb80d1229e335e2cacd",
175 "5c5f38b8ab0f19602c0af8fc4a7b37a1",
176 "7e3e579e923a0f5d07b75fa18e8be8ce",
177 "ad2dc11df6f46a011d0dd923c0001dc5",
178 "f490093b4e2dfee8fe13b2e41310607f",
179 "982511b0c457e643b4f77bfd64db55eb",
180 "f985dc3bd5b366edf0a7541af3fa3a72",
181 "6493f4a899a3450fe8f2dfb77ab97812",
182 "04dec3a5a5ce2bd480593a708885a0c2",
183 "0afbf90e7e45c04f566eac2aecb19e52",
184 "e1016a026c40490db627cdc51ef7b600",
185 "869d25ef36cc75bc2729ab4a563cd1a0",
186 "ba0f91e20161af480776c24790538153",
187 "5896ccae5cdc7abbee7d064f11bc55bf",
188 "80565c134c28c8413cb8ee6217af15fd",
189 "e1acab18892d012cf14d6acc69f660b5",
190 "c05cf136e5f464daa2e03484d855913e",
191 "20f32820fa8deb9e971f56778bc7ba96",
192 "e9bbe21340ed0c828a6f2eb5c2b204e6",
193 "27c5e8099070dfcbae31ba7f9ddd97e5",
194 "87be085bd498c3f97e9bc55beed79683",
195 };
196
197 static auto H264_420_8BIT_HIGH_PROFILE = VideoProfileInfo{VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR,
198 VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR,
199 VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR,
200 VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR,
201 STD_VIDEO_H264_PROFILE_IDC_HIGH};
202 static auto H264_420_8BIT_MAIN_PROFILE = VideoProfileInfo{VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR,
203 VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR,
204 VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR,
205 VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR,
206 STD_VIDEO_H264_PROFILE_IDC_MAIN};
207 static auto H265_420_8BIT_MAIN_PROFILE = VideoProfileInfo{VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR,
208 VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR,
209 VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR,
210 VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR,
211 STD_VIDEO_H265_PROFILE_IDC_MAIN};
212
213 static ClipInfo Clips[] =
214 {
215 {
216 CLIP_A,
217 "vulkan/video/clip-a.h264",
218 H264_420_8BIT_HIGH_PROFILE,
219 30,
220 10,
221 3,
222 clipA,
223 },
224 {
225 CLIP_B,
226 "vulkan/video/clip-b.h264",
227 H264_420_8BIT_HIGH_PROFILE,
228 30,
229 10,
230 3,
231 clipB,
232 },
233 {
234 CLIP_C,
235 "vulkan/video/clip-c.h264",
236 H264_420_8BIT_HIGH_PROFILE,
237 30,
238 10,
239 3,
240 clipC,
241 },
242 {
243 CLIP_D,
244 "vulkan/video/clip-d.h265",
245 H265_420_8BIT_MAIN_PROFILE,
246 30,
247 10,
248 3,
249 clipA,// same as clip A
250 },
251 {
252 CLIP_H264_4K_26_IBP_MAIN,
253 "vulkan/video/4k_26_ibp_main.h264",
254 H264_420_8BIT_MAIN_PROFILE,
255 26,
256 13,
257 2,
258 h264_4k_26_ibp_main,
259 },
260 {
261 CLIP_JELLY_HEVC,
262 "vulkan/video/jellyfish-250-mbps-4k-uhd-GOB-IPB13.h265",
263 H265_420_8BIT_MAIN_PROFILE,
264 26,
265 26,
266 1,
267 jellyfishHEVC,
268 },
269 };
270
clipInfo(ClipName c)271 const ClipInfo* clipInfo(ClipName c)
272 {
273 return &Clips[c];
274 }
275
checksumForClipFrame(const ClipInfo* cinfo, int frameNumber)276 const char* checksumForClipFrame(const ClipInfo* cinfo, int frameNumber)
277 {
278 DE_ASSERT(frameNumber >= 0 && frameNumber < cinfo->totalFrames);
279 return cinfo->frameChecksums[frameNumber];
280 }
281
282
283 } // namespace video
284 } // namespace vkt
285