OSDN Git Service

Stats/PreEnc: tests: Add VAEntryPointStats
authorSreerenj Balachandran <sreerenj.balachandran@intel.com>
Fri, 1 Dec 2017 23:02:24 +0000 (15:02 -0800)
committerXiang, Haihao <haihao.xiang@intel.com>
Wed, 10 Jan 2018 06:34:35 +0000 (14:34 +0800)
Add the Stats entrypoint in test case scenarios.

intel-vaapi-driver PR: https://github.com/01org/intel-vaapi-driver/pull/282
libva PR: https://github.com/01org/libva/pull/110

Signed-off-by: Sreerenj Balachandran <sreerenj.balachandran@intel.com>
test/i965_avce_config_test.cpp
test/i965_avce_context_test.cpp
test/i965_avce_test_common.cpp

index f76d242..235d769 100644 (file)
@@ -49,7 +49,8 @@ VAStatus H264NotSupported()
 
     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();
@@ -65,7 +66,8 @@ VAStatus H264LPNotSupported()
 
     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();
@@ -81,12 +83,30 @@ VAStatus H264FEINotSupported()
 
     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());
@@ -164,6 +184,23 @@ VAStatus HasFEIEncodeSupport()
     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());
@@ -197,26 +234,31 @@ static const std::vector<ConfigTestInput> inputs = {
     {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(
index 6ad2793..7be2567 100644 (file)
@@ -99,6 +99,7 @@ TEST_P(AVCEContextTest, RateControl)
         {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) {
@@ -281,12 +282,15 @@ INSTANTIATE_TEST_CASE_P(
         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)
     )
index c35adba..3d1eec8 100644 (file)
@@ -63,6 +63,13 @@ VAStatus CheckSupported(VAProfile profile, VAEntrypoint entrypoint)
             if (HAS_FEI_H264_ENCODING(i965)) {
                 return VA_STATUS_SUCCESS;
             }
+        } else if (entrypoint == VAEntrypointStats) {
+            if (IS_SKL(i965->intel.device_info)) {
+                return VA_STATUS_SUCCESS;
+            }
+            if (HAS_H264_PREENC(i965)) {
+                return VA_STATUS_SUCCESS;
+            }
         }
         break;