This patch allows multiple misc parameter buffers for the same type within the same Begin/Render/End sequence in the future. Currently only the first element for each misc type is used, so it doesn't change any functionality yet.
v2: rebased Signed-off-by: Xiang, Haihao <haihao.xi...@intel.com> Tested-by: Luo, Focus <focus....@intel.com> --- src/gen6_mfc_common.c | 4 ++-- src/gen8_mfc.c | 6 +++--- src/gen9_mfc_hevc.c | 4 ++-- src/gen9_vdenc.c | 4 ++-- src/gen9_vp9_encoder.c | 26 +++++++++++++------------- src/i965_drv_video.c | 16 +++++++++------- src/i965_drv_video.h | 2 +- src/i965_encoder.c | 10 +++++----- 8 files changed, 37 insertions(+), 35 deletions(-) diff --git a/src/gen6_mfc_common.c b/src/gen6_mfc_common.c index 67a84ea..8677ecb 100644 --- a/src/gen6_mfc_common.c +++ b/src/gen6_mfc_common.c @@ -1884,8 +1884,8 @@ intel_h264_enc_roi_config(VADriverContextP ctx, if (!encoder_context->context_roi || (encode_state->num_slice_params_ext > 1)) return; - if (encode_state->misc_param[VAEncMiscParameterTypeROI] != NULL) { - pMiscParamROI = (VAEncMiscParameterBuffer*)encode_state->misc_param[VAEncMiscParameterTypeROI]->buffer; + if (encode_state->misc_param[VAEncMiscParameterTypeROI][0] != NULL) { + pMiscParamROI = (VAEncMiscParameterBuffer*)encode_state->misc_param[VAEncMiscParameterTypeROI][0]->buffer; pParamROI = (VAEncMiscParameterBufferROI *)pMiscParamROI->data; /* check whether number of ROI is correct */ diff --git a/src/gen8_mfc.c b/src/gen8_mfc.c index f880333..daef41c 100644 --- a/src/gen8_mfc.c +++ b/src/gen8_mfc.c @@ -3324,9 +3324,9 @@ static void gen8_mfc_vp8_brc_init(struct encode_state *encode_state, { struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; VAEncSequenceParameterBufferVP8 *seq_param = (VAEncSequenceParameterBufferVP8 *)encode_state->seq_param_ext->buffer; - VAEncMiscParameterBuffer* misc_param_hrd = (VAEncMiscParameterBuffer*)encode_state->misc_param[VAEncMiscParameterTypeHRD]->buffer; + VAEncMiscParameterBuffer* misc_param_hrd = (VAEncMiscParameterBuffer*)encode_state->misc_param[VAEncMiscParameterTypeHRD][0]->buffer; VAEncMiscParameterHRD* param_hrd = (VAEncMiscParameterHRD*)misc_param_hrd->data; - VAEncMiscParameterBuffer* misc_param_frame_rate_buffer = (VAEncMiscParameterBuffer*)encode_state->misc_param[VAEncMiscParameterTypeFrameRate]->buffer; + VAEncMiscParameterBuffer* misc_param_frame_rate_buffer = (VAEncMiscParameterBuffer*)encode_state->misc_param[VAEncMiscParameterTypeFrameRate][0]->buffer; VAEncMiscParameterFrameRate* param_frame_rate = (VAEncMiscParameterFrameRate*)misc_param_frame_rate_buffer->data; double bitrate = seq_param->bits_per_second; unsigned int frame_rate = param_frame_rate->framerate; @@ -3523,7 +3523,7 @@ static bool gen8_mfc_vp8_brc_updated_check(struct encode_state *encode_state, struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; double cur_fps, cur_bitrate; VAEncSequenceParameterBufferVP8 *seq_param = (VAEncSequenceParameterBufferVP8 *)encode_state->seq_param_ext->buffer; - VAEncMiscParameterBuffer *misc_param_frame_rate_buf = (VAEncMiscParameterBuffer*)encode_state->misc_param[VAEncMiscParameterTypeFrameRate]->buffer; + VAEncMiscParameterBuffer *misc_param_frame_rate_buf = (VAEncMiscParameterBuffer*)encode_state->misc_param[VAEncMiscParameterTypeFrameRate][0]->buffer; VAEncMiscParameterFrameRate *param_frame_rate = (VAEncMiscParameterFrameRate*)misc_param_frame_rate_buf->data; unsigned int frame_rate = param_frame_rate->framerate; diff --git a/src/gen9_mfc_hevc.c b/src/gen9_mfc_hevc.c index 9aaf4e9..be5666c 100644 --- a/src/gen9_mfc_hevc.c +++ b/src/gen9_mfc_hevc.c @@ -2238,10 +2238,10 @@ static void intel_hcpe_brc_init(struct encode_state *encode_state, qp1_size = qp1_size * bpp; qp51_size = qp51_size * bpp; - if (!encode_state->misc_param[VAEncMiscParameterTypeHRD] || !encode_state->misc_param[VAEncMiscParameterTypeHRD]->buffer) + if (!encode_state->misc_param[VAEncMiscParameterTypeHRD][0] || !encode_state->misc_param[VAEncMiscParameterTypeHRD][0]->buffer) return; - pMiscParamHRD = (VAEncMiscParameterBuffer*)encode_state->misc_param[VAEncMiscParameterTypeHRD]->buffer; + pMiscParamHRD = (VAEncMiscParameterBuffer*)encode_state->misc_param[VAEncMiscParameterTypeHRD][0]->buffer; pParameterHRD = (VAEncMiscParameterHRD*)pMiscParamHRD->data; if (pSequenceParameter->ip_period) { diff --git a/src/gen9_vdenc.c b/src/gen9_vdenc.c index e19def1..46da334 100644 --- a/src/gen9_vdenc.c +++ b/src/gen9_vdenc.c @@ -931,10 +931,10 @@ gen9_vdenc_update_misc_parameters(VADriverContextP ctx, VAEncMiscParameterBuffer *misc_param; for (i = 0; i < ARRAY_ELEMS(encode_state->misc_param); i++) { - if (!encode_state->misc_param[i] || !encode_state->misc_param[i]->buffer) + if (!encode_state->misc_param[i][0] || !encode_state->misc_param[i][0]->buffer) continue; - misc_param = (VAEncMiscParameterBuffer *)encode_state->misc_param[i]->buffer; + misc_param = (VAEncMiscParameterBuffer *)encode_state->misc_param[i][0]->buffer; switch (misc_param->type) { case VAEncMiscParameterTypeFrameRate: diff --git a/src/gen9_vp9_encoder.c b/src/gen9_vp9_encoder.c index 34952c9..f39d6d0 100644 --- a/src/gen9_vp9_encoder.c +++ b/src/gen9_vp9_encoder.c @@ -3944,7 +3944,7 @@ gen9_encode_vp9_check_parameter(VADriverContextP ctx, VAEncMiscParameterHRD *misc_param_hrd; misc_param = (VAEncMiscParameterBuffer *) - encode_state->misc_param[VAEncMiscParameterTypeHRD]->buffer; + encode_state->misc_param[VAEncMiscParameterTypeHRD][0]->buffer; misc_param_hrd = (VAEncMiscParameterHRD *)misc_param->data; vp9_state->init_vbv_buffer_fullness_in_bit = misc_param_hrd->initial_buffer_fullness; @@ -3955,7 +3955,7 @@ gen9_encode_vp9_check_parameter(VADriverContextP ctx, VAEncMiscParameterFrameRate *misc_param_fr; misc_param = (VAEncMiscParameterBuffer *) - encode_state->misc_param[VAEncMiscParameterTypeFrameRate]->buffer; + encode_state->misc_param[VAEncMiscParameterTypeFrameRate][0]->buffer; misc_param_fr = (VAEncMiscParameterFrameRate *)misc_param->data; vp9_state->frame_rate = misc_param_fr->framerate; @@ -3969,7 +3969,7 @@ gen9_encode_vp9_check_parameter(VADriverContextP ctx, VAEncMiscParameterRateControl *misc_param_rc; misc_param = (VAEncMiscParameterBuffer *) - encode_state->misc_param[VAEncMiscParameterTypeRateControl]->buffer; + encode_state->misc_param[VAEncMiscParameterTypeRateControl][0]->buffer; misc_param_rc = (VAEncMiscParameterRateControl *)misc_param->data; vp9_state->target_bit_rate = misc_param_rc->bits_per_second; @@ -3990,7 +3990,7 @@ gen9_encode_vp9_check_parameter(VADriverContextP ctx, VAEncMiscParameterFrameRate *misc_param_fr; misc_param = (VAEncMiscParameterBuffer *) - encode_state->misc_param[VAEncMiscParameterTypeFrameRate]->buffer; + encode_state->misc_param[VAEncMiscParameterTypeFrameRate][0]->buffer; misc_param_fr = (VAEncMiscParameterFrameRate *)misc_param->data; vp9_state->frame_rate = misc_param_fr->framerate; @@ -4003,7 +4003,7 @@ gen9_encode_vp9_check_parameter(VADriverContextP ctx, VAEncMiscParameterRateControl *misc_param_rc; misc_param = (VAEncMiscParameterBuffer *) - encode_state->misc_param[VAEncMiscParameterTypeRateControl]->buffer; + encode_state->misc_param[VAEncMiscParameterTypeRateControl][0]->buffer; misc_param_rc = (VAEncMiscParameterRateControl *)misc_param->data; vp9_state->max_bit_rate = misc_param_rc->bits_per_second; @@ -4027,7 +4027,7 @@ gen9_encode_vp9_check_parameter(VADriverContextP ctx, VAEncMiscParameterFrameRate *misc_param_fr; misc_param = (VAEncMiscParameterBuffer *) - encode_state->misc_param[VAEncMiscParameterTypeFrameRate]->buffer; + encode_state->misc_param[VAEncMiscParameterTypeFrameRate][0]->buffer; misc_param_fr = (VAEncMiscParameterFrameRate *)misc_param->data; if (vp9_state->frame_rate != misc_param_fr->framerate) { @@ -4049,7 +4049,7 @@ gen9_encode_vp9_check_parameter(VADriverContextP ctx, VAEncMiscParameterRateControl *misc_param_rc; misc_param = (VAEncMiscParameterBuffer *) - encode_state->misc_param[VAEncMiscParameterTypeRateControl]->buffer; + encode_state->misc_param[VAEncMiscParameterTypeRateControl][0]->buffer; misc_param_rc = (VAEncMiscParameterRateControl *)misc_param->data; if (encoder_context->rate_control_mode == VA_RC_CBR) { @@ -5815,19 +5815,19 @@ gen9_vp9_pak_brc_prepare(struct encode_state *encode_state, } /* Frame_rate */ - if (encode_state->misc_param[VAEncMiscParameterTypeFrameRate] && - encode_state->misc_param[VAEncMiscParameterTypeFrameRate]->buffer) { + if (encode_state->misc_param[VAEncMiscParameterTypeFrameRate][0] && + encode_state->misc_param[VAEncMiscParameterTypeFrameRate][0]->buffer) { vp9_state->brc_flag_check |= VP9_BRC_FR; } /* HRD */ - if (encode_state->misc_param[VAEncMiscParameterTypeRateControl] && - encode_state->misc_param[VAEncMiscParameterTypeRateControl]->buffer) { + if (encode_state->misc_param[VAEncMiscParameterTypeRateControl][0] && + encode_state->misc_param[VAEncMiscParameterTypeRateControl][0]->buffer) { vp9_state->brc_flag_check |= VP9_BRC_RC; } - if (encode_state->misc_param[VAEncMiscParameterTypeHRD] && - encode_state->misc_param[VAEncMiscParameterTypeHRD]->buffer) { + if (encode_state->misc_param[VAEncMiscParameterTypeHRD][0] && + encode_state->misc_param[VAEncMiscParameterTypeHRD][0]->buffer) { vp9_state->brc_flag_check |= VP9_BRC_HRD; } diff --git a/src/i965_drv_video.c b/src/i965_drv_video.c index 2ca84c0..a8ecb24 100644 --- a/src/i965_drv_video.c +++ b/src/i965_drv_video.c @@ -1992,7 +1992,7 @@ static void i965_destroy_context(struct object_heap *heap, struct object_base *obj) { struct object_context *obj_context = (struct object_context *)obj; - int i; + int i, j; if (obj_context->hw_context) { obj_context->hw_context->destroy(obj_context->hw_context); @@ -2017,7 +2017,8 @@ i965_destroy_context(struct object_heap *heap, struct object_base *obj) i965_release_buffer_store(&obj_context->codec_state.encode.packed_header_data[i]); for (i = 0; i < ARRAY_ELEMS(obj_context->codec_state.encode.misc_param); i++) - i965_release_buffer_store(&obj_context->codec_state.encode.misc_param[i]); + for (j = 0; j < ARRAY_ELEMS(obj_context->codec_state.encode.misc_param[0]); j++) + i965_release_buffer_store(&obj_context->codec_state.encode.misc_param[i][j]); for (i = 0; i < obj_context->codec_state.encode.num_slice_params_ext; i++) i965_release_buffer_store(&obj_context->codec_state.encode.slice_params_ext[i]); @@ -2728,7 +2729,7 @@ i965_BeginPicture(VADriverContextP ctx, struct object_surface *obj_surface = SURFACE(render_target); struct object_config *obj_config; VAStatus vaStatus = VA_STATUS_SUCCESS; - int i; + int i, j; ASSERT_RET(obj_context, VA_STATUS_ERROR_INVALID_CONTEXT); ASSERT_RET(obj_surface, VA_STATUS_ERROR_INVALID_SURFACE); @@ -2779,13 +2780,14 @@ i965_BeginPicture(VADriverContextP ctx, * It is uncertain whether the other misc buffer should be released. * So only release the previous ROI buffer. */ - i965_release_buffer_store(&obj_context->codec_state.encode.misc_param[VAEncMiscParameterTypeROI]); + i965_release_buffer_store(&obj_context->codec_state.encode.misc_param[VAEncMiscParameterTypeROI][0]); i965_release_buffer_store(&obj_context->codec_state.encode.encmb_map); if (obj_config->profile == VAProfileVP9Profile0) { for (i = 0; i < ARRAY_ELEMS(obj_context->codec_state.encode.misc_param); i++) - i965_release_buffer_store(&obj_context->codec_state.encode.misc_param[i]); + for (j = 0; j < ARRAY_ELEMS(obj_context->codec_state.encode.misc_param[0]); j++) + i965_release_buffer_store(&obj_context->codec_state.encode.misc_param[i][j]); i965_release_buffer_store(&obj_context->codec_state.encode.seq_param_ext); } @@ -3111,8 +3113,8 @@ i965_encoder_render_misc_parameter_buffer(VADriverContextP ctx, if (param->type >= ARRAY_ELEMS(encode->misc_param)) return VA_STATUS_ERROR_INVALID_PARAMETER; - i965_release_buffer_store(&encode->misc_param[param->type]); - i965_reference_buffer_store(&encode->misc_param[param->type], obj_buffer->buffer_store); + i965_release_buffer_store(&encode->misc_param[param->type][0]); + i965_reference_buffer_store(&encode->misc_param[param->type][0], obj_buffer->buffer_store); return VA_STATUS_SUCCESS; } diff --git a/src/i965_drv_video.h b/src/i965_drv_video.h index 9b9bfac..7bef613 100644 --- a/src/i965_drv_video.h +++ b/src/i965_drv_video.h @@ -266,7 +266,7 @@ struct encode_state int last_packed_header_type; - struct buffer_store *misc_param[16]; + struct buffer_store *misc_param[16][8]; VASurfaceID current_render_target; struct object_surface *input_yuv_object; diff --git a/src/i965_encoder.c b/src/i965_encoder.c index ec5dd2f..0620c40 100644 --- a/src/i965_encoder.c +++ b/src/i965_encoder.c @@ -434,10 +434,10 @@ intel_encoder_check_brc_parameter(VADriverContextP ctx, return ret; for (i = 0; i < ARRAY_ELEMS(encode_state->misc_param); i++) { - if (!encode_state->misc_param[i] || !encode_state->misc_param[i]->buffer) + if (!encode_state->misc_param[i][0] || !encode_state->misc_param[i][0]->buffer) continue; - misc_param = (VAEncMiscParameterBuffer *)encode_state->misc_param[i]->buffer; + misc_param = (VAEncMiscParameterBuffer *)encode_state->misc_param[i][0]->buffer; switch (misc_param->type) { case VAEncMiscParameterTypeFrameRate: @@ -473,9 +473,9 @@ intel_encoder_check_misc_parameter(VADriverContextP ctx, { VAStatus ret = VA_STATUS_SUCCESS; - if (encode_state->misc_param[VAEncMiscParameterTypeQualityLevel] && - encode_state->misc_param[VAEncMiscParameterTypeQualityLevel]->buffer) { - VAEncMiscParameterBuffer* pMiscParam = (VAEncMiscParameterBuffer*)encode_state->misc_param[VAEncMiscParameterTypeQualityLevel]->buffer; + if (encode_state->misc_param[VAEncMiscParameterTypeQualityLevel][0] && + encode_state->misc_param[VAEncMiscParameterTypeQualityLevel][0]->buffer) { + VAEncMiscParameterBuffer* pMiscParam = (VAEncMiscParameterBuffer*)encode_state->misc_param[VAEncMiscParameterTypeQualityLevel][0]->buffer; VAEncMiscParameterBufferQualityLevel* param_quality_level = (VAEncMiscParameterBufferQualityLevel*)pMiscParam->data; encoder_context->quality_level = param_quality_level->quality_level; -- 1.9.1 _______________________________________________ Libva mailing list Libva@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libva