On Fri, 2016-07-01 at 14:11 +0800, Zhao Yakui wrote: > On 07/01/2016 12:49 PM, Xiang, Haihao wrote: > > > > > > > From: Zhao Yakui<yakui.z...@intel.com> > > > > > > Signed-off-by: Zhao Yakui<yakui.zh...@intel.com> > > > Signed-off-by: pjl<ceciliap...@intel.com> > > > Signed-off-by: Pengfei Qu<pengfei...@intel.com> > > > --- > > > src/gen6_mfc_common.c | 104 > > > ++++++++++++++++++++++++++++++++++++++++---------- > > > src/gen6_vme.h | 15 +++++++- > > > 2 files changed, 98 insertions(+), 21 deletions(-) > > > > > > diff --git a/src/gen6_mfc_common.c b/src/gen6_mfc_common.c > > > index f961ecd..bb02c83 100644 > > > --- a/src/gen6_mfc_common.c > > > +++ b/src/gen6_mfc_common.c > > > @@ -765,29 +765,14 @@ static float intel_lambda_qp(int qp) > > > } > > > > > > > > > -void intel_vme_update_mbmv_cost(VADriverContextP ctx, > > > - struct encode_state > > > *encode_state, > > > - struct intel_encoder_context > > > *encoder_context) > > > +static > > > +void intel_h264_calc_mbmvcost_qp(int qp, > > > + int slice_type, > > > + uint8_t *vme_state_message) > > > { > > > - struct gen6_mfc_context *mfc_context = encoder_context- > > > > mfc_context; > > > - struct gen6_vme_context *vme_context = encoder_context- > > > > vme_context; > > > - VAEncPictureParameterBufferH264 *pic_param = > > > (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext- > > > > buffer; > > > - VAEncSliceParameterBufferH264 *slice_param = > > > (VAEncSliceParameterBufferH264 *)encode_state- > > > >slice_params_ext[0]- > > > > buffer; > > > - int qp, m_cost, j, mv_count; > > > - uint8_t *vme_state_message = (uint8_t *)(vme_context- > > > > vme_state_message); > > > + int m_cost, j, mv_count; > > > float lambda, m_costf; > > > > > > - int slice_type = intel_avc_enc_slice_type_fixup(slice_param- > > > > slice_type); > > > - > > > - > > > - if (encoder_context->rate_control_mode == VA_RC_CQP) > > > - qp = pic_param->pic_init_qp + slice_param- > > > >slice_qp_delta; > > > - else > > > - qp = mfc_context- > > > > bit_rate_control_context[slice_type].QpPrimeY; > > > - > > > - if (vme_state_message == NULL) > > > - return; > > > - > > > assert(qp<= QP_MAX); > > > lambda = intel_lambda_qp(qp); > > > if (slice_type == SLICE_TYPE_I) { > > > @@ -875,6 +860,31 @@ void > > > intel_vme_update_mbmv_cost(VADriverContextP > > > ctx, > > > vme_state_message[MODE_INTER_BWD] = > > > intel_format_lutvalue(m_cost, 0x6f); > > > } > > > } > > > + return; > > > +} > > > + > > > +void intel_vme_update_mbmv_cost(VADriverContextP ctx, > > > + struct encode_state > > > *encode_state, > > > + struct intel_encoder_context > > > *encoder_context) > > > +{ > > > + struct gen6_mfc_context *mfc_context = encoder_context- > > > > mfc_context; > > > + struct gen6_vme_context *vme_context = encoder_context- > > > > vme_context; > > > + VAEncPictureParameterBufferH264 *pic_param = > > > (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext- > > > > buffer; > > > + VAEncSliceParameterBufferH264 *slice_param = > > > (VAEncSliceParameterBufferH264 *)encode_state- > > > >slice_params_ext[0]- > > > > buffer; > > > + int qp; > > > + uint8_t *vme_state_message = (uint8_t *)(vme_context- > > > > vme_state_message); > > > + > > > + int slice_type = intel_avc_enc_slice_type_fixup(slice_param- > > > > slice_type); > > > + > > > + if (encoder_context->rate_control_mode == VA_RC_CQP) > > > + qp = pic_param->pic_init_qp + slice_param- > > > >slice_qp_delta; > > > + else > > > + qp = mfc_context- > > > > bit_rate_control_context[slice_type].QpPrimeY; > > > + > > > + if (vme_state_message == NULL) > > > + return; > > > + > > > + intel_h264_calc_mbmvcost_qp(qp, slice_type, > > > vme_state_message); > > > } > > > > > > void intel_vme_vp8_update_mbmv_cost(VADriverContextP ctx, > > > @@ -1636,6 +1646,60 @@ void > > > intel_avc_slice_insert_packed_data(VADriverContextP ctx, > > > return; > > > } > > > > > > +void > > > +intel_h264_initialize_mbmv_cost(VADriverContextP ctx, > > > + struct encode_state > > > *encode_state, > > > + struct intel_encoder_context > > > *encoder_context) > > > +{ > > > + struct i965_driver_data *i965 = i965_driver_data(ctx); > > > + struct gen6_vme_context *vme_context = encoder_context- > > > > vme_context; > > > + VAEncSliceParameterBufferH264 *slice_param = > > > (VAEncSliceParameterBufferH264 *)encode_state- > > > >slice_params_ext[0]- > > > > buffer; > > > + int qp; > > > + dri_bo *bo; > > > + uint8_t *cost_table; > > > + > > > + int slice_type = intel_avc_enc_slice_type_fixup(slice_param- > > > > slice_type); > > > + > > > + > > > + if (slice_type == SLICE_TYPE_I) { > > > + if (vme_context->i_qp_cost_table) > > > + return; > > > + } else if (slice_type == SLICE_TYPE_P) { > > > + if (vme_context->p_qp_cost_table) > > > + return; > > > + } else { > > > + if (vme_context->b_qp_cost_table) > > > + return; > > > + } > > > + > > > + /* It is enough to allocate 32 bytes for each qp. */ > > > + bo = dri_bo_alloc(i965->intel.bufmgr, > > > + "cost_table ", > > > + QP_MAX * 32, > > > + 64); > > > + > > > + dri_bo_map(bo, 1); > > > + > > > + cost_table = (uint8_t *)(bo->virtual); > > > + for (qp = 0; qp< QP_MAX; qp++) { > > > + intel_h264_calc_mbmvcost_qp(qp, slice_type, cost_table); > > > + cost_table += 32; > > > + } > > > + > > > + dri_bo_unmap(bo); > > > + > > > + if (slice_type == SLICE_TYPE_I) { > > > + vme_context->i_qp_cost_table = bo; > > > + } else if (slice_type == SLICE_TYPE_P) { > > > + vme_context->p_qp_cost_table = bo; > > > + } else { > > > + vme_context->b_qp_cost_table = bo; > > > + } > > > + > > > > Where are the allocated BOs released? It would be better to release > > these BOs in the same patch. > > > > Bo is allocated in this newly added function API. > > In fact this API is not called. Before it is called, do we need to > free > it in the same patch?
It is safe to call dri_bo_unreference(bo) in the corresponding destroy function, even if bo is NULL. > > > > > > + vme_context->cost_table_size = QP_MAX * 32; > > > + return; > > > +} > > > + > > > /* HEVC */ > > > static int > > > hevc_temporal_find_surface(VAPictureHEVC *curr_pic, > > > diff --git a/src/gen6_vme.h b/src/gen6_vme.h > > > index dc568ac..ea9918b 100644 > > > --- a/src/gen6_vme.h > > > +++ b/src/gen6_vme.h > > > @@ -1,5 +1,5 @@ > > > /* > > > - * Copyright 2009 Intel Corporation > > > + * Copyright<A9> 2009 Intel Corporation > > > > Please remove this change. > > > > > * > > > * Permission is hereby granted, free of charge, to any person > > > obtaining a > > > * copy of this software and associated documentation files > > > (the > > > @@ -46,6 +46,8 @@ > > > > > > #define GEN6_VME_KERNEL_NUMBER 3 > > > > > > +#define INTEL_COST_TABLE_OFFSET 8 > > > + > > > struct encode_state; > > > struct intel_encoder_context; > > > > > > @@ -91,6 +93,11 @@ struct gen6_vme_context > > > struct object_surface *used_reference_objects[2]; > > > void *used_references[2]; > > > unsigned int ref_index_in_mb[2]; > > > + > > > + dri_bo *i_qp_cost_table; > > > + dri_bo *p_qp_cost_table; > > > + dri_bo *b_qp_cost_table; > > > + int cost_table_size; > > > }; > > > > > > #define MPEG2_PIC_WIDTH_HEIGHT 30 > > > @@ -200,4 +207,10 @@ void > > > intel_vme_hevc_update_mbmv_cost(VADriverContextP ctx, > > > extern Bool gen8_vme_context_init(VADriverContextP ctx, struct > > > intel_encoder_context *encoder_context); > > > > > > extern Bool gen9_vme_context_init(VADriverContextP ctx, struct > > > intel_encoder_context *encoder_context); > > > + > > > +extern void > > > +intel_h264_initialize_mbmv_cost(VADriverContextP ctx, > > > + struct encode_state > > > *encode_state, > > > + struct intel_encoder_context > > > *encoder_context); > > > + > > > #endif /* _GEN6_VME_H_ */ > > > > BTW this patch can not be applied by 'git am' due to the following > > error: > > > > error: cannot convert from y to UTF-8 > > fatal: could not parse patch > > > > Please check your input when using 'git send-email'. > > > > > > > _______________________________________________ > > > Libva mailing list > > > Libva@lists.freedesktop.org > > > https://lists.freedesktop.org/mailman/listinfo/libva > > _______________________________________________ > > Libva mailing list > > Libva@lists.freedesktop.org > > https://lists.freedesktop.org/mailman/listinfo/libva > _______________________________________________ Libva mailing list Libva@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libva