if (!HAS_H264_DECODING(i965)
&& !HAS_LP_H264_ENCODING(i965)
- && !HAS_FEI_H264_ENCODING(i965))
+ && !HAS_FEI_H264_ENCODING(i965)
+ && !HAS_H264_PREENC(i965))
return ProfileNotSupported();
return EntrypointNotSupported();
if (!HAS_H264_DECODING(i965)
&& !HAS_H264_ENCODING(i965)
- && !HAS_FEI_H264_ENCODING(i965))
+ && !HAS_FEI_H264_ENCODING(i965)
+ && !HAS_H264_PREENC(i965))
return ProfileNotSupported();
return EntrypointNotSupported();
if (!HAS_H264_DECODING(i965)
&& !HAS_H264_ENCODING(i965)
- && !HAS_LP_H264_ENCODING(i965))
+ && !HAS_LP_H264_ENCODING(i965)
+ && !HAS_H264_PREENC(i965))
return ProfileNotSupported();
return EntrypointNotSupported();
}
+VAStatus H264PreEncodeNotSupported()
+{
+ I965TestEnvironment *env(I965TestEnvironment::instance());
+ EXPECT_PTR(env);
+
+ struct i965_driver_data *i965(*env);
+ EXPECT_PTR(i965);
+
+ if (!HAS_H264_DECODING(i965)
+ && !HAS_H264_ENCODING(i965)
+ && !HAS_LP_H264_ENCODING(i965)
+ && !HAS_FEI_H264_ENCODING(i965))
+ return ProfileNotSupported();
+
+ return EntrypointNotSupported();
+}
+
VAStatus H264MVCNotSupported()
{
I965TestEnvironment *env(I965TestEnvironment::instance());
return H264FEINotSupported();
}
+VAStatus HasPreEncodeSupport()
+{
+ I965TestEnvironment *env(I965TestEnvironment::instance());
+ EXPECT_PTR(env);
+
+ struct i965_driver_data *i965(*env);
+ EXPECT_PTR(i965);
+
+ if (IS_SKL(i965->intel.device_info))
+ return VA_STATUS_SUCCESS;
+
+ if (HAS_H264_PREENC(i965))
+ return VA_STATUS_SUCCESS;
+
+ return H264PreEncodeNotSupported();
+}
+
VAStatus HasMVCEncodeSupport()
{
I965TestEnvironment *env(I965TestEnvironment::instance());
{VAProfileH264ConstrainedBaseline, VAEntrypointEncSliceLP, &HasLPEncodeSupport},
{VAProfileH264ConstrainedBaseline, VAEntrypointEncPicture, &H264NotSupported},
{VAProfileH264ConstrainedBaseline, VAEntrypointFEI, &HasFEIEncodeSupport},
+ {VAProfileH264ConstrainedBaseline, VAEntrypointStats, &HasPreEncodeSupport},
{VAProfileH264Main, VAEntrypointEncSlice, &HasEncodeSupport},
{VAProfileH264Main, VAEntrypointEncSliceLP, &HasLPEncodeSupport},
{VAProfileH264Main, VAEntrypointEncPicture, &H264NotSupported},
{VAProfileH264Main, VAEntrypointFEI, &HasFEIEncodeSupport},
+ {VAProfileH264Main, VAEntrypointStats, &HasPreEncodeSupport},
{VAProfileH264High, VAEntrypointEncSlice, &HasEncodeSupport},
{VAProfileH264High, VAEntrypointEncSliceLP, &HasLPEncodeSupport},
{VAProfileH264High, VAEntrypointEncPicture, &H264NotSupported},
{VAProfileH264High, VAEntrypointFEI, &HasFEIEncodeSupport},
+ {VAProfileH264High, VAEntrypointStats, &HasPreEncodeSupport},
{VAProfileH264MultiviewHigh, VAEntrypointEncSlice, &HasMVCEncodeSupport},
{VAProfileH264MultiviewHigh, VAEntrypointEncSliceLP, &H264MVCNotSupported},
{VAProfileH264MultiviewHigh, VAEntrypointEncPicture, &H264MVCNotSupported},
{VAProfileH264MultiviewHigh, VAEntrypointFEI, &H264MVCNotSupported},
+ {VAProfileH264MultiviewHigh, VAEntrypointStats, &H264MVCNotSupported},
{VAProfileH264StereoHigh, VAEntrypointEncSlice, &HasStereoEncodeSupport},
{VAProfileH264StereoHigh, VAEntrypointEncSliceLP, &H264StereoNotSupported},
{VAProfileH264StereoHigh, VAEntrypointEncPicture, &H264StereoNotSupported},
{VAProfileH264StereoHigh, VAEntrypointFEI, &H264StereoNotSupported},
+ {VAProfileH264StereoHigh, VAEntrypointStats, &H264MVCNotSupported},
};
INSTANTIATE_TEST_CASE_P(
{VAEntrypointEncSlice, i965->codec_info->h264_brc_mode},
{VAEntrypointEncSliceLP, i965->codec_info->lp_h264_brc_mode},
{VAEntrypointFEI, VA_RC_CQP},
+ {VAEntrypointStats, VA_RC_NONE},
};
for (auto rc : rateControls) {
std::make_tuple(VAProfileH264ConstrainedBaseline, VAEntrypointEncSlice),
std::make_tuple(VAProfileH264ConstrainedBaseline, VAEntrypointEncSliceLP),
std::make_tuple(VAProfileH264ConstrainedBaseline, VAEntrypointFEI),
+ std::make_tuple(VAProfileH264ConstrainedBaseline, VAEntrypointStats),
std::make_tuple(VAProfileH264Main, VAEntrypointEncSlice),
std::make_tuple(VAProfileH264Main, VAEntrypointEncSliceLP),
std::make_tuple(VAProfileH264Main, VAEntrypointFEI),
+ std::make_tuple(VAProfileH264Main, VAEntrypointStats),
std::make_tuple(VAProfileH264High, VAEntrypointEncSlice),
std::make_tuple(VAProfileH264High, VAEntrypointEncSliceLP),
std::make_tuple(VAProfileH264High, VAEntrypointFEI),
+ std::make_tuple(VAProfileH264High, VAEntrypointStats),
std::make_tuple(VAProfileH264MultiviewHigh, VAEntrypointEncSlice),
std::make_tuple(VAProfileH264StereoHigh, VAEntrypointEncSlice)
)