[Libva] [PATCH 2/3] MVC: CODEC_H264_MVC defination and relatived properties check

Li Xiaowei xiaowei.a.li at intel.com
Thu Dec 19 02:15:26 PST 2013


Signed-off-by: Li Xiaowei <xiaowei.a.li at intel.com>
---
 src/i965_drv_video.c |   41 ++++++++++++++++++++++++++++++++++++++---
 src/i965_drv_video.h |    3 +++
 src/i965_encoder.c   |    7 +++++++
 3 files changed, 48 insertions(+), 3 deletions(-)

diff --git a/src/i965_drv_video.c b/src/i965_drv_video.c
index deb1c53..1df4cec 100755
--- a/src/i965_drv_video.c
+++ b/src/i965_drv_video.c
@@ -86,6 +86,11 @@
 #define HAS_VP8_ENCODING(ctx)   ((ctx)->codec_info->has_vp8_encoding && \
                                  (ctx)->intel.has_bsd)
 
+#define HAS_H264_MVC_DECODING(ctx)  ((ctx)->codec_info->has_h264_mvc_decoding && \
+                                     (ctx)->intel.has_bsd)
+
+#define HAS_H264_MVC_ENCODING(ctx)  ((ctx)->codec_info->has_h264_mvc_encoding && \
+                                     (ctx)->intel.has_bsd)
 
 static int get_sampling_from_fourcc(unsigned int fourcc);
 
@@ -320,6 +325,8 @@ static struct hw_codec_info gen75_hw_codec_info = {
     .has_di_motion_adptive = 1,
     .has_di_motion_compensated = 1,
     .has_blending = 1,
+    .has_h264_mvc_decoding = 1,
+    .has_h264_mvc_encoding = 1,
 
     .num_filters = 4,
     .filters = {
@@ -441,6 +448,12 @@ i965_QueryConfigProfiles(VADriverContextP ctx,
         profile_list[i++] = VAProfileVP8Version0_3;
     }
 
+    if (HAS_H264_MVC_DECODING(i965) ||
+        HAS_H264_MVC_ENCODING(i965)) {
+        profile_list[i++] = VAProfileH264MultiviewHigh;
+        profile_list[i++] = VAProfileH264StereoHigh;
+    }
+
     /* If the assert fails then I965_MAX_PROFILES needs to be bigger */
     assert(i <= I965_MAX_PROFILES);
     *num_profiles = i;
@@ -473,11 +486,19 @@ i965_QueryConfigEntrypoints(VADriverContextP ctx,
     case VAProfileH264High:
         if (HAS_H264_DECODING(i965))
             entrypoint_list[n++] = VAEntrypointVLD;
-        
+
         if (HAS_H264_ENCODING(i965))
             entrypoint_list[n++] = VAEntrypointEncSlice;
 
         break;
+   case VAProfileH264MultiviewHigh:
+   case VAProfileH264StereoHigh:
+       if (HAS_H264_MVC_DECODING(i965))
+            entrypoint_list[n++] = VAEntrypointVLD;
+
+       if (HAS_H264_MVC_ENCODING(i965))
+            entrypoint_list[n++] = VAEntrypointEncSlice;
+        break;
 
     case VAProfileVC1Simple:
     case VAProfileVC1Main:
@@ -665,6 +686,17 @@ i965_CreateConfig(VADriverContextP ctx,
 
         break;
 
+    case VAProfileH264MultiviewHigh:
+    case VAProfileH264StereoHigh:
+        if ((HAS_H264_MVC_DECODING(i965) && VAEntrypointVLD == entrypoint) ||
+            (HAS_H264_MVC_ENCODING(i965) && VAEntrypointEncSlice == entrypoint)) {
+            vaStatus = VA_STATUS_SUCCESS;
+        } else {
+            vaStatus = VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT;
+        }
+
+        break;
+
     default:
         vaStatus = VA_STATUS_ERROR_UNSUPPORTED_PROFILE;
         break;
@@ -1854,7 +1886,8 @@ i965_MapBuffer(VADriverContextP ctx,
 
                 coded_buffer_segment->base.buf = buffer = (unsigned char *)(obj_buffer->buffer_store->bo->virtual) + I965_CODEDBUFFER_HEADER_SIZE;
 
-                if (coded_buffer_segment->codec == CODEC_H264) {
+                if (coded_buffer_segment->codec == CODEC_H264 ||
+                    coded_buffer_segment->codec == CODEC_H264_MVC) {
                     delimiter0 = H264_DELIMITER0;
                     delimiter1 = H264_DELIMITER1;
                     delimiter2 = H264_DELIMITER2;
@@ -1985,7 +2018,9 @@ i965_BeginPicture(VADriverContextP ctx,
     case VAProfileH264ConstrainedBaseline:
     case VAProfileH264Main:
     case VAProfileH264High:
-        vaStatus = VA_STATUS_SUCCESS;
+    case VAProfileH264MultiviewHigh:
+    case VAProfileH264StereoHigh:
+         vaStatus = VA_STATUS_SUCCESS;
         break;
 
     case VAProfileVC1Simple:
diff --git a/src/i965_drv_video.h b/src/i965_drv_video.h
index 5336c35..a13dd4b 100644
--- a/src/i965_drv_video.h
+++ b/src/i965_drv_video.h
@@ -302,6 +302,8 @@ struct hw_codec_info
     unsigned int has_blending:1;
     unsigned int has_vp8_decoding:1;
     unsigned int has_vp8_encoding:1;
+    unsigned int has_h264_mvc_decoding:1;
+    unsigned int has_h264_mvc_encoding:1;
 
     unsigned int num_filters;
     struct i965_filter filters[VAProcFilterCount];
@@ -384,6 +386,7 @@ va_enc_packed_type_to_idx(int packed_type);
 /* reserve 2 byte for internal using */
 #define CODEC_H264      0
 #define CODEC_MPEG2     1
+#define CODEC_H264_MVC  2
 
 #define H264_DELIMITER0 0x00
 #define H264_DELIMITER1 0x00
diff --git a/src/i965_encoder.c b/src/i965_encoder.c
index 9bf133f..9084953 100644
--- a/src/i965_encoder.c
+++ b/src/i965_encoder.c
@@ -270,6 +270,8 @@ intel_encoder_sanity_check_input(VADriverContextP ctx,
     case VAProfileH264ConstrainedBaseline:
     case VAProfileH264Main:
     case VAProfileH264High:
+    case VAProfileH264MultiviewHigh:
+    case VAProfileH264StereoHigh:
         vaStatus = intel_encoder_check_avc_parameter(ctx, encode_state, encoder_context);
         break;
 
@@ -358,6 +360,11 @@ intel_enc_hw_context_init(VADriverContextP ctx,
         encoder_context->codec = CODEC_H264;
         break;
 
+    case VAProfileH264StereoHigh:
+    case VAProfileH264MultiviewHigh:
+        encoder_context->codec = CODEC_H264_MVC;
+        break;
+
     default:
         /* Never get here */
         assert(0);
-- 
1.7.9.5



More information about the Libva mailing list