2 * Copyright (C) 2016 Intel Corporation. All Rights Reserved.
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the
6 * "Software"), to deal in the Software without restriction, including
7 * without limitation the rights to use, copy, modify, merge, publish,
8 * distribute, sub license, and/or sell copies of the Software, and to
9 * permit persons to whom the Software is furnished to do so, subject to
10 * the following conditions:
12 * The above copyright notice and this permission notice (including the
13 * next paragraph) shall be included in all copies or substantial portions
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
19 * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
20 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 #include "i965_config_test.h"
30 VAStatus ProfileNotSupported()
32 return VA_STATUS_ERROR_UNSUPPORTED_PROFILE;
35 VAStatus EntrypointNotSupported()
37 return VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT;
40 //H264*NotSupported functions report properly if profile is not supported or
41 //only entrypoint is not supported
42 VAStatus H264NotSupported()
44 I965TestEnvironment *env(I965TestEnvironment::instance());
47 struct i965_driver_data *i965(*env);
50 if (!HAS_H264_DECODING(i965)
51 && !HAS_LP_H264_ENCODING(i965)
52 && !HAS_FEI_H264_ENCODING(i965)
53 && !HAS_H264_PREENC(i965))
54 return ProfileNotSupported();
56 return EntrypointNotSupported();
59 VAStatus H264LPNotSupported()
61 I965TestEnvironment *env(I965TestEnvironment::instance());
64 struct i965_driver_data *i965(*env);
67 if (!HAS_H264_DECODING(i965)
68 && !HAS_H264_ENCODING(i965)
69 && !HAS_FEI_H264_ENCODING(i965)
70 && !HAS_H264_PREENC(i965))
71 return ProfileNotSupported();
73 return EntrypointNotSupported();
76 VAStatus H264FEINotSupported()
78 I965TestEnvironment *env(I965TestEnvironment::instance());
81 struct i965_driver_data *i965(*env);
84 if (!HAS_H264_DECODING(i965)
85 && !HAS_H264_ENCODING(i965)
86 && !HAS_LP_H264_ENCODING(i965)
87 && !HAS_H264_PREENC(i965))
88 return ProfileNotSupported();
90 return EntrypointNotSupported();
93 VAStatus H264PreEncodeNotSupported()
95 I965TestEnvironment *env(I965TestEnvironment::instance());
98 struct i965_driver_data *i965(*env);
101 if (!HAS_H264_DECODING(i965)
102 && !HAS_H264_ENCODING(i965)
103 && !HAS_LP_H264_ENCODING(i965)
104 && !HAS_FEI_H264_ENCODING(i965))
105 return ProfileNotSupported();
107 return EntrypointNotSupported();
110 VAStatus H264MVCNotSupported()
112 I965TestEnvironment *env(I965TestEnvironment::instance());
115 struct i965_driver_data *i965(*env);
118 if (!HAS_H264_MVC_DECODING_PROFILE(i965, VAProfileH264MultiviewHigh))
119 return ProfileNotSupported();
121 return EntrypointNotSupported();
124 VAStatus H264StereoNotSupported()
126 I965TestEnvironment *env(I965TestEnvironment::instance());
129 struct i965_driver_data *i965(*env);
132 if (!HAS_H264_MVC_DECODING_PROFILE(i965, VAProfileH264StereoHigh))
133 return ProfileNotSupported();
135 return EntrypointNotSupported();
138 VAStatus HasEncodeSupport()
140 I965TestEnvironment *env(I965TestEnvironment::instance());
143 struct i965_driver_data *i965(*env);
146 if (HAS_H264_ENCODING(i965))
147 return VA_STATUS_SUCCESS;
149 return H264NotSupported();
152 VAStatus HasLPEncodeSupport()
154 I965TestEnvironment *env(I965TestEnvironment::instance());
157 struct i965_driver_data *i965(*env);
160 if (IS_SKL(i965->intel.device_info))
161 return VA_STATUS_SUCCESS;
163 if (HAS_LP_H264_ENCODING(i965))
164 return VA_STATUS_SUCCESS;
166 return H264LPNotSupported();
170 VAStatus HasFEIEncodeSupport()
172 I965TestEnvironment *env(I965TestEnvironment::instance());
175 struct i965_driver_data *i965(*env);
178 if (IS_SKL(i965->intel.device_info))
179 return VA_STATUS_SUCCESS;
181 if (HAS_FEI_H264_ENCODING(i965))
182 return VA_STATUS_SUCCESS;
184 return H264FEINotSupported();
187 VAStatus HasPreEncodeSupport()
189 I965TestEnvironment *env(I965TestEnvironment::instance());
192 struct i965_driver_data *i965(*env);
195 if (IS_SKL(i965->intel.device_info))
196 return VA_STATUS_SUCCESS;
198 if (HAS_H264_PREENC(i965))
199 return VA_STATUS_SUCCESS;
201 return H264PreEncodeNotSupported();
204 VAStatus HasMVCEncodeSupport()
206 I965TestEnvironment *env(I965TestEnvironment::instance());
209 struct i965_driver_data *i965(*env);
212 if (HAS_H264_MVC_ENCODING(i965))
213 return VA_STATUS_SUCCESS;
215 return H264MVCNotSupported();
218 VAStatus HasStereoEncodeSupport()
220 I965TestEnvironment *env(I965TestEnvironment::instance());
223 struct i965_driver_data *i965(*env);
226 if (HAS_H264_MVC_ENCODING(i965))
227 return VA_STATUS_SUCCESS;
229 return H264StereoNotSupported();
232 static const std::vector<ConfigTestInput> inputs = {
233 {VAProfileH264ConstrainedBaseline, VAEntrypointEncSlice, &HasEncodeSupport},
234 {VAProfileH264ConstrainedBaseline, VAEntrypointEncSliceLP, &HasLPEncodeSupport},
235 {VAProfileH264ConstrainedBaseline, VAEntrypointEncPicture, &H264NotSupported},
236 {VAProfileH264ConstrainedBaseline, VAEntrypointFEI, &HasFEIEncodeSupport},
237 {VAProfileH264ConstrainedBaseline, VAEntrypointStats, &HasPreEncodeSupport},
239 {VAProfileH264Main, VAEntrypointEncSlice, &HasEncodeSupport},
240 {VAProfileH264Main, VAEntrypointEncSliceLP, &HasLPEncodeSupport},
241 {VAProfileH264Main, VAEntrypointEncPicture, &H264NotSupported},
242 {VAProfileH264Main, VAEntrypointFEI, &HasFEIEncodeSupport},
243 {VAProfileH264Main, VAEntrypointStats, &HasPreEncodeSupport},
245 {VAProfileH264High, VAEntrypointEncSlice, &HasEncodeSupport},
246 {VAProfileH264High, VAEntrypointEncSliceLP, &HasLPEncodeSupport},
247 {VAProfileH264High, VAEntrypointEncPicture, &H264NotSupported},
248 {VAProfileH264High, VAEntrypointFEI, &HasFEIEncodeSupport},
249 {VAProfileH264High, VAEntrypointStats, &HasPreEncodeSupport},
251 {VAProfileH264MultiviewHigh, VAEntrypointEncSlice, &HasMVCEncodeSupport},
252 {VAProfileH264MultiviewHigh, VAEntrypointEncSliceLP, &H264MVCNotSupported},
253 {VAProfileH264MultiviewHigh, VAEntrypointEncPicture, &H264MVCNotSupported},
254 {VAProfileH264MultiviewHigh, VAEntrypointFEI, &H264MVCNotSupported},
255 {VAProfileH264MultiviewHigh, VAEntrypointStats, &H264MVCNotSupported},
257 {VAProfileH264StereoHigh, VAEntrypointEncSlice, &HasStereoEncodeSupport},
258 {VAProfileH264StereoHigh, VAEntrypointEncSliceLP, &H264StereoNotSupported},
259 {VAProfileH264StereoHigh, VAEntrypointEncPicture, &H264StereoNotSupported},
260 {VAProfileH264StereoHigh, VAEntrypointFEI, &H264StereoNotSupported},
261 {VAProfileH264StereoHigh, VAEntrypointStats, &H264MVCNotSupported},
264 INSTANTIATE_TEST_CASE_P(
265 AVCEncode, I965ConfigTest, ::testing::ValuesIn(inputs));
267 } // namespace Encode