summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhao Yakui <yakui.zhao@intel.com>2016-12-28 13:45:28 +0800
committerXiang, Haihao <haihao.xiang@intel.com>2016-12-29 09:19:16 +0800
commit16d7fd3beb052eeb7368253e245642e2a3a251bd (patch)
treec3f38fbb7f100256a47b3cd27d8e779b25fff1eb
parentd63fee8e20a8e09b9acea90366c4431d6d35f8b9 (diff)
Add new sequence flag check for HEVC/VP9 Encoding
Signed-off-by: Zhao Yakui <yakui.zhao@intel.com> Reviewed-by: Xiang, Haihao<haihao.xiang@intel.com>
-rw-r--r--src/i965_encoder.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/i965_encoder.c b/src/i965_encoder.c
index be37b84..d4d7445 100644
--- a/src/i965_encoder.c
+++ b/src/i965_encoder.c
@@ -1047,8 +1047,15 @@ intel_encoder_check_hevc_parameter(VADriverContextP ctx,
struct object_buffer *obj_buffer;
VAEncPictureParameterBufferHEVC *pic_param = (VAEncPictureParameterBufferHEVC *)encode_state->pic_param_ext->buffer;
VAEncSliceParameterBufferHEVC *slice_param;
+ VAEncSequenceParameterBufferHEVC *seq_param;
int i;
+ seq_param = NULL;
+
+ if (encode_state->seq_param_ext &&
+ encode_state->seq_param_ext->buffer)
+ seq_param = (VAEncSequenceParameterBufferHEVC *)(encode_state->seq_param_ext->buffer);
+
assert(!(pic_param->decoded_curr_pic.flags & VA_PICTURE_HEVC_INVALID));
if (pic_param->decoded_curr_pic.flags & VA_PICTURE_HEVC_INVALID)
@@ -1101,6 +1108,8 @@ intel_encoder_check_hevc_parameter(VADriverContextP ctx,
/* TODO: add more check here */
}
+ encoder_context->is_new_sequence = (pic_param->pic_fields.bits.idr_pic_flag && seq_param);
+
return VA_STATUS_SUCCESS;
error:
@@ -1114,6 +1123,7 @@ intel_encoder_check_vp9_parameter(VADriverContextP ctx,
{
struct i965_driver_data *i965 = i965_driver_data(ctx);
VAEncPictureParameterBufferVP9 *pic_param;
+ VAEncSequenceParameterBufferVP9 *seq_param;
struct object_surface *obj_surface;
struct object_buffer *obj_buffer;
int i = 0;
@@ -1124,6 +1134,11 @@ intel_encoder_check_vp9_parameter(VADriverContextP ctx,
encode_state->pic_param_ext->buffer == NULL)
return VA_STATUS_ERROR_INVALID_PARAMETER;
+ seq_param = NULL;
+ if (encode_state->seq_param_ext &&
+ encode_state->seq_param_ext->buffer)
+ seq_param = (VAEncSequenceParameterBufferVP9 *)(encode_state->seq_param_ext->buffer);
+
pic_param = (VAEncPictureParameterBufferVP9 *)encode_state->pic_param_ext->buffer;
obj_surface = SURFACE(pic_param->reconstructed_frame);
@@ -1169,6 +1184,8 @@ intel_encoder_check_vp9_parameter(VADriverContextP ctx,
for ( ; i < 16; i++)
encode_state->reference_objects[i] = NULL;
+ encoder_context->is_new_sequence = (is_key_frame && seq_param);
+
return VA_STATUS_SUCCESS;
error: