Haihao, Yes, you are right. I make a mistake. Here I treat one forward B frame as the P frame to match the test tool.
Thanks, Pengfei -----Original Message----- From: Xiang, Haihao Sent: Tuesday, June 2, 2015 1:29 PM To: Qu, Pengfei Cc: Balachandran, Sreerenj; libva@lists.freedesktop.org Subject: Re: [Libva] [PATCH] HEVC: Fix the Wrong slice type usage Hi Sree, Pengfei, The vme_state_message[] for H.264 P slice should be used for HEVC P slice, so I think Sree's original patch is right. Thanks Haihao > It is OK to me. > > Thanks, > Pengfei > -----Original Message----- > From: Libva [mailto:libva-boun...@lists.freedesktop.org] On Behalf Of > sreerenj.balachand...@intel.com > Sent: Friday, May 29, 2015 11:27 AM > To: libva@lists.freedesktop.org > Subject: [Libva] [PATCH] HEVC: Fix the Wrong slice type usage > > From: Sreerenj Balachandran <sreerenj.balachand...@intel.com> > > Don't mix the slice_type values of h264 and h265. > > The SLICE_TYPE values of H264 and HEVC are different. > H264: Bslice_type = 1, Pslice_type = 0 > HEVC: Bslice_type = 0, Pslice_type = 1 > > Signed-off-by: Sreerenj Balachandran <sreerenj.balachand...@intel.com> > --- > src/gen6_mfc_common.c | 1 + > src/gen9_vme.c | 12 ++++++------ > src/i965_encoder_utils.c | 16 ++++++++-------- > 3 files changed, 15 insertions(+), 14 deletions(-) > > diff --git a/src/gen6_mfc_common.c b/src/gen6_mfc_common.c index > 3b3d0e7..37a355b 100644 > --- a/src/gen6_mfc_common.c > +++ b/src/gen6_mfc_common.c > @@ -1864,6 +1864,7 @@ void intel_vme_hevc_update_mbmv_cost(VADriverContextP > ctx, > m_costf = lambda * 3.5; > m_cost = m_costf; > vme_state_message[MODE_INTRA_NONPRED] = > intel_format_lutvalue(m_cost, 0x6f); > + /* Use SLICE_TYPE_P instead of HEVC_SLICE_P since we use AVC > + VME hardware */ > if (slice_type == SLICE_TYPE_P) { > m_costf = lambda * 2.5; > m_cost = m_costf; > diff --git a/src/gen9_vme.c b/src/gen9_vme.c index 39ac180..b28470b > 100644 > --- a/src/gen9_vme.c > +++ b/src/gen9_vme.c > @@ -1334,7 +1334,7 @@ gen9_vme_hevc_output_buffer_setup(VADriverContextP ctx, > struct gen6_vme_context *vme_context = encoder_context->vme_context; > VAEncSequenceParameterBufferHEVC *pSequenceParameter = > (VAEncSequenceParameterBufferHEVC *)encode_state->seq_param_ext->buffer; > VAEncSliceParameterBufferHEVC *pSliceParameter = > (VAEncSliceParameterBufferHEVC *)encode_state->slice_params_ext[0]->buffer; > - int is_intra = pSliceParameter->slice_type == SLICE_TYPE_I; > + int is_intra = pSliceParameter->slice_type == HEVC_SLICE_I; > int width_in_mbs = (pSequenceParameter->pic_width_in_luma_samples + > 15)/16; > int height_in_mbs = > (pSequenceParameter->pic_height_in_luma_samples + 15)/16; > > @@ -1405,12 +1405,12 @@ gen9_vme_hevc_surface_setup(VADriverContextP ctx, > int slice_type; > > slice_type = slice_param->slice_type; > - assert(slice_type != SLICE_TYPE_I && slice_type != SLICE_TYPE_SI); > + assert(slice_type != HEVC_SLICE_I); > > /* to do HEVC */ > intel_hevc_vme_reference_state(ctx, encode_state, > encoder_context, 0, 1, gen9_vme_source_surface_state); > > - if (slice_type == SLICE_TYPE_B) > + if (slice_type == HEVC_SLICE_B) > intel_hevc_vme_reference_state(ctx, encode_state, > encoder_context, 1, 2, gen9_vme_source_surface_state); > } > > @@ -1669,9 +1669,9 @@ static void > gen9_vme_hevc_pipeline_programing(VADriverContextP ctx, > } > } > > - if (pSliceParameter->slice_type == SLICE_TYPE_I) { > + if (pSliceParameter->slice_type == HEVC_SLICE_I) { > kernel_shader = VME_INTRA_SHADER; > - } else if (pSliceParameter->slice_type == SLICE_TYPE_P) { > + } else if (pSliceParameter->slice_type == HEVC_SLICE_P) { > kernel_shader = VME_INTER_SHADER; > } else { > kernel_shader = VME_BINTER_SHADER; @@ -1715,7 +1715,7 @@ static > VAStatus gen9_vme_hevc_prepare(VADriverContextP ctx, { > VAStatus vaStatus = VA_STATUS_SUCCESS; > VAEncSliceParameterBufferHEVC *pSliceParameter = > (VAEncSliceParameterBufferHEVC *)encode_state->slice_params_ext[0]->buffer; > - int is_intra = pSliceParameter->slice_type == SLICE_TYPE_I; > + int is_intra = pSliceParameter->slice_type == HEVC_SLICE_I; > VAEncSequenceParameterBufferHEVC *pSequenceParameter = > (VAEncSequenceParameterBufferHEVC *)encode_state->seq_param_ext->buffer; > struct gen6_vme_context *vme_context = > encoder_context->vme_context; > > diff --git a/src/i965_encoder_utils.c b/src/i965_encoder_utils.c index > 08b38a2..8237598 100644 > --- a/src/i965_encoder_utils.c > +++ b/src/i965_encoder_utils.c > @@ -891,20 +891,20 @@ void hevc_short_term_ref_pic_set(avc_bitstream > *bs,VAEncSliceParameterBufferHEVC > > hevc_rps.inter_ref_pic_set_prediction_flag = 0; > /* s0: between I and P/B; s1 : between P and B */ > - hevc_rps.num_negative_pics = > (slice_param->slice_type!=SLICE_TYPE_I) ? 1 : 0; > - hevc_rps.num_positive_pics = > (slice_param->slice_type==SLICE_TYPE_B) ? 1 : 0; > + hevc_rps.num_negative_pics = > (slice_param->slice_type!=HEVC_SLICE_I) ? 1 : 0; > + hevc_rps.num_positive_pics = > (slice_param->slice_type==HEVC_SLICE_B) ? 1 : 0; > hevc_rps.delta_poc_s0_minus1[0] = 0; > hevc_rps.used_by_curr_pic_s0_flag[0] = 0; > hevc_rps.delta_poc_s1_minus1[0] = 0; > hevc_rps.used_by_curr_pic_s1_flag[0] = 0; > if(slice_param->num_ref_idx_l0_active_minus1==0 ) > { > - hevc_rps.delta_poc_s0_minus1[0] = > (slice_param->slice_type==SLICE_TYPE_I) ? 0 : ( curPicOrderCnt - > slice_param->ref_pic_list0[0].pic_order_cnt-1); //0; > + hevc_rps.delta_poc_s0_minus1[0] = > (slice_param->slice_type==HEVC_SLICE_I) ? 0 : ( curPicOrderCnt - > slice_param->ref_pic_list0[0].pic_order_cnt-1); //0; > hevc_rps.used_by_curr_pic_s0_flag[0] = 1; > } > if(slice_param->num_ref_idx_l1_active_minus1==0 ) > { > - hevc_rps.delta_poc_s1_minus1[0] = > (slice_param->slice_type==SLICE_TYPE_I) ? 0 : ( > slice_param->ref_pic_list1[0].pic_order_cnt -curPicOrderCnt -1); > + hevc_rps.delta_poc_s1_minus1[0] = > (slice_param->slice_type==HEVC_SLICE_I) ? 0 : ( > slice_param->ref_pic_list1[0].pic_order_cnt -curPicOrderCnt -1); > hevc_rps.used_by_curr_pic_s1_flag[0] = 1; > } > > @@ -1033,7 +1033,7 @@ static void slice_rbsp(avc_bitstream *bs, > avc_bitstream_put_ui(bs, > slice_param->slice_fields.bits.slice_sao_chroma_flag, 1); > } > > - if (slice_param->slice_type != SLICE_TYPE_I) > + if (slice_param->slice_type != HEVC_SLICE_I) > { > /* num_ref_idx_active_override_flag. 0 */ > avc_bitstream_put_ui(bs, 0, 1); @@ -1042,7 +1042,7 @@ static > void slice_rbsp(avc_bitstream *bs, > /* No reference picture set modification */ > > /* MVD_l1_zero_flag */ > - if (slice_param->slice_type == SLICE_TYPE_B) > + if (slice_param->slice_type == HEVC_SLICE_B) > avc_bitstream_put_ui(bs, > slice_param->slice_fields.bits.mvd_l1_zero_flag, 1); > > /* cabac_init_present_flag. 0 */ @@ -1057,9 +1057,9 @@ static > void slice_rbsp(avc_bitstream *bs, > */ > } > if (((pic_param->pic_fields.bits.weighted_pred_flag) && > - (slice_param->slice_type == SLICE_TYPE_P)) || > + (slice_param->slice_type == HEVC_SLICE_P)) || > ((pic_param->pic_fields.bits.weighted_bipred_flag) && > - (slice_param->slice_type == SLICE_TYPE_B))) > + (slice_param->slice_type == HEVC_SLICE_B))) > { > /* TBD: > * add the weighted table > -- > 2.1.4 > > _______________________________________________ > Libva mailing list > Libva@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/libva > _______________________________________________ > Libva mailing list > Libva@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/libva _______________________________________________ Libva mailing list Libva@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libva