[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