OSDN Git Service

Advertise the support for HEVC on SKL
authorXiang, Haihao <haihao.xiang@intel.com>
Fri, 27 Jun 2014 08:08:16 +0000 (16:08 +0800)
committerXiang, Haihao <haihao.xiang@intel.com>
Sat, 13 Dec 2014 16:42:17 +0000 (00:42 +0800)
v2: Only support HEVC Main Profile

v3: Check profile against VAProfileHEVCMain in i965_BeginPicture()

Signed-off-by: Xiang, Haihao <haihao.xiang@intel.com>
(cherry picked from commit f623373aab09ff1477532dd25bd0ffe5bdd5e7e2)

src/i965_device_info.c
src/i965_drv_video.c
src/i965_drv_video.h

index 8d50a68..d7dee07 100644 (file)
@@ -342,6 +342,7 @@ static struct hw_codec_info skl_hw_codec_info = {
     .has_di_motion_compensated = 1,
     .has_vp8_decoding = 1,
     .has_h264_mvc_encoding = 1,
+    .has_hevc_decoding = 1,
 
     .num_filters = 5,
     .filters = {
index 110fb8f..c5f52dc 100644 (file)
@@ -99,6 +99,9 @@
 #define HAS_H264_MVC_ENCODING(ctx)  ((ctx)->codec_info->has_h264_mvc_encoding && \
                                      (ctx)->intel.has_bsd)
 
+#define HAS_HEVC_DECODING(ctx)          ((ctx)->codec_info->has_hevc_decoding && \
+                                         (ctx)->intel.has_bsd)
+
 static int get_sampling_from_fourcc(unsigned int fourcc);
 
 /* Check whether we are rendering to X11 (VA/X11 or VA/GLX API) */
@@ -460,6 +463,10 @@ i965_QueryConfigProfiles(VADriverContextP ctx,
         profile_list[i++] = VAProfileH264StereoHigh;
     }
 
+    if (HAS_HEVC_DECODING(i965)) {
+        profile_list[i++] = VAProfileHEVCMain;
+    }
+
     /* If the assert fails then I965_MAX_PROFILES needs to be bigger */
     ASSERT_RET(i <= I965_MAX_PROFILES, VA_STATUS_ERROR_OPERATION_FAILED);
     *num_profiles = i;
@@ -533,6 +540,14 @@ i965_QueryConfigEntrypoints(VADriverContextP ctx,
         if (HAS_VP8_ENCODING(i965))
             entrypoint_list[n++] = VAEntrypointEncSlice;
 
+        break;
+
+    case VAProfileHEVCMain:
+        if (HAS_HEVC_DECODING(i965))
+            entrypoint_list[n++] = VAEntrypointVLD;
+
+        break;
+
     default:
         break;
     }
@@ -621,6 +636,14 @@ i965_validate_config(VADriverContextP ctx, VAProfile profile,
 
         break;
 
+    case VAProfileHEVCMain:
+        if (HAS_HEVC_DECODING(i965) && (entrypoint == VAEntrypointVLD))
+            va_status = VA_STATUS_SUCCESS;
+        else
+            va_status = VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT;
+
+        break;
+
     default:
         va_status = VA_STATUS_ERROR_UNSUPPORTED_PROFILE;
         break;
@@ -2294,6 +2317,10 @@ i965_BeginPicture(VADriverContextP ctx,
         vaStatus = VA_STATUS_SUCCESS;
         break;
 
+    case VAProfileHEVCMain:
+        vaStatus = VA_STATUS_SUCCESS;
+        break;
+
     default:
         ASSERT_RET(0, VA_STATUS_ERROR_UNSUPPORTED_PROFILE);
         break;
index c7c5018..9636010 100644 (file)
@@ -368,6 +368,7 @@ struct hw_codec_info
     unsigned int has_vp8_decoding:1;
     unsigned int has_vp8_encoding:1;
     unsigned int has_h264_mvc_encoding:1;
+    unsigned int has_hevc_decoding:1;
 
     unsigned int num_filters;
     struct i965_filter filters[VAProcFilterCount];