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.
Signed-off-by: Xiang, Haihao <[email protected]> --- 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 4c0d4cc..dc4bc3b 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 b3ee327..94a7671 100644 --- a/src/gen9_mfc_hevc.c +++ b/src/gen9_mfc_hevc.c @@ -2266,10 +2266,10 @@ static void intel_hcpe_brc_init(struct encode_state *encode_state, int ratio = 8; double buffer_size = 0; - 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 77b9f37..1ec0453 100644 --- a/src/i965_drv_video.c +++ b/src/i965_drv_video.c @@ -2056,7 +2056,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); @@ -2081,7 +2081,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]); @@ -2792,7 +2793,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); @@ -2843,13 +2844,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); } @@ -3175,8 +3177,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 9fe042f..e8ae54c 100644 --- a/src/i965_drv_video.h +++ b/src/i965_drv_video.h @@ -194,7 +194,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 50f735a..2ba5de7 100644 --- a/src/i965_encoder.c +++ b/src/i965_encoder.c @@ -428,10 +428,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: @@ -467,9 +467,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 [email protected] https://lists.freedesktop.org/mailman/listinfo/libva
