.has_tiled_surface = 1,
.has_di_motion_adptive = 1,
.has_di_motion_compensated = 1,
+ .has_h264_mvc_decoding = 1,
+ .has_h264_mvc_encoding = 1,
.num_filters = 5,
.filters = {
.has_di_motion_adptive = 1,
.has_di_motion_compensated = 1,
.has_vp8_decoding = 1,
+ .has_h264_mvc_decoding = 1,
+ .has_h264_mvc_encoding = 1,
.num_filters = 5,
.filters = {
#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);
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_RET(i <= I965_MAX_PROFILES, VA_STATUS_ERROR_OPERATION_FAILED);
*num_profiles = i;
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:
}
break;
+ case VAProfileH264MultiviewHigh:
+ case VAProfileH264StereoHigh:
+ if ((HAS_H264_MVC_DECODING(i965) && VAEntrypointVLD == entrypoint) ||
+ (HAS_H264_MVC_ENCODING(i965) && VAEntrypointEncSlice == entrypoint)) {
+ va_status = VA_STATUS_SUCCESS;
+ } else {
+ va_status = VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT;
+ }
+
+ break;
+
default:
va_status = VA_STATUS_ERROR_UNSUPPORTED_PROFILE;
break;
VAStatus vaStatus;
vaStatus = i965_validate_config(ctx, profile, entrypoint);
+
if (VA_STATUS_SUCCESS != vaStatus) {
return vaStatus;
}
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;
case VAProfileH264ConstrainedBaseline:
case VAProfileH264Main:
case VAProfileH264High:
- vaStatus = VA_STATUS_SUCCESS;
+ case VAProfileH264MultiviewHigh:
+ case VAProfileH264StereoHigh:
+ vaStatus = VA_STATUS_SUCCESS;
break;
case VAProfileVC1Simple:
unsigned int has_di_motion_compensated: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];
/* 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
case VAProfileH264ConstrainedBaseline:
case VAProfileH264Main:
case VAProfileH264High:
+ case VAProfileH264MultiviewHigh:
+ case VAProfileH264StereoHigh:
vaStatus = intel_encoder_check_avc_parameter(ctx, encode_state, encoder_context);
break;
encoder_context->codec = CODEC_H264;
break;
+ case VAProfileH264StereoHigh:
+ case VAProfileH264MultiviewHigh:
+ encoder_context->codec = CODEC_H264_MVC;
+ break;
+
default:
/* Never get here */
assert(0);