Applied. Thanks Haihao
> Signed-off-by: peng.chen <peng.c.c...@intel.com> > --- > src/gen9_mfd.c | 177 ++++++++++------------------------------------- > ---------- > src/gen9_mfd.h | 2 - > 2 files changed, 30 insertions(+), 149 deletions(-) > > diff --git a/src/gen9_mfd.c b/src/gen9_mfd.c > index 14e65c9..57c626f 100644 > --- a/src/gen9_mfd.c > +++ b/src/gen9_mfd.c > @@ -1101,6 +1101,7 @@ vp9_gen_default_probabilities(VADriverContextP > ctx, struct gen9_hcpd_context *ge > > //2. inter default > gen9_hcpd_context->vp9_fc_inter_default.tx_probs = > default_tx_probs; > + > //dummy 52 > vp9_copy(gen9_hcpd_context->vp9_fc_inter_default.coeff_probs4x4, > default_coef_probs_4x4); > vp9_copy(gen9_hcpd_context->vp9_fc_inter_default.coeff_probs8x8, > default_coef_probs_8x8); > @@ -1126,8 +1127,6 @@ vp9_gen_default_probabilities(VADriverContextP > ctx, struct gen9_hcpd_context *ge > { > gen9_hcpd_context->vp9_frame_ctx[i] = gen9_hcpd_context- > >vp9_fc_inter_default; > } > - gen9_hcpd_context->vp9_fc = gen9_hcpd_context- > >vp9_fc_inter_default; > - > } > > static void > @@ -1137,64 +1136,10 @@ vp9_update_probabilities(VADriverContextP > ctx, > { > VADecPictureParameterBufferVP9 *pic_param; > int i = 0; > - uint8_t is_saved = VP9_PROB_BUFFER_SAVED_NO; > - uint8_t is_restored = VP9_PROB_BUFFER_RESTORED_NO; > - > - uint8_t last_frame_type = gen9_hcpd_context- > >last_frame.frame_type; > - uint8_t temp_frame_ctx_id; > > assert(decode_state->pic_param && decode_state->pic_param- > >buffer); > pic_param = (VADecPictureParameterBufferVP9 *)decode_state- > >pic_param->buffer; > - temp_frame_ctx_id = pic_param- > >pic_fields.bits.frame_context_idx; > - > - if(pic_param->pic_fields.bits.frame_type == HCP_VP9_KEY_FRAME) > - { > - gen9_hcpd_context->vp9_fc = gen9_hcpd_context- > >vp9_fc_key_default; > - gen9_hcpd_context->last_frame.prob_buffer_saved_flag = > VP9_PROB_BUFFER_SAVED_NO; > - gen9_hcpd_context->last_frame.prob_buffer_restored_flag = > VP9_PROB_BUFFER_RESTORED_NO; > - > - }else > - { > - gen9_hcpd_context->vp9_fc = gen9_hcpd_context- > >vp9_fc_inter_default; > - } > - > - // restore? > - if(gen9_hcpd_context->last_frame.prob_buffer_saved_flag == > VP9_PROB_BUFFER_SAVED_SECNE_1) > - { > - if((pic_param->pic_fields.bits.frame_type == > HCP_VP9_INTER_FRAME)) > - { > - //save the inter frame values for the 343 bytes > - //Update the 343 bytes of the buffer with Intra values > - is_restored = VP9_PROB_BUFFER_RESTORED_SECNE_1; > - } > - }else if(gen9_hcpd_context->last_frame.prob_buffer_saved_flag == > VP9_PROB_BUFFER_SAVED_SECNE_2) > - { > - if((pic_param->pic_fields.bits.frame_type == > HCP_VP9_KEY_FRAME) ||pic_param- > >pic_fields.bits.intra_only||pic_param- > >pic_fields.bits.error_resilient_mode) > - { > - temp_frame_ctx_id = 0; > - } > - > - if((pic_param->pic_fields.bits.frame_type == > HCP_VP9_INTER_FRAME) && > - (temp_frame_ctx_id == 0)) > - { > > - is_restored = VP9_PROB_BUFFER_RESTORED_SECNE_2; > - } > - } > - > - if(is_restored > VP9_PROB_BUFFER_RESTORED_NO && is_restored < > VP9_PROB_BUFFER_RESTORED_SECNE_MAX) > - { > - memcpy(gen9_hcpd_context->vp9_frame_ctx[gen9_hcpd_context- > >last_frame.frame_context_idx].inter_mode_probs,gen9_hcpd_context- > >vp9_saved_fc.inter_mode_probs,VP9_PROB_BUFFER_KEY_INTER_SIZE); > - } > - > - if((gen9_hcpd_context->last_frame.prob_buffer_restored_flag == > VP9_PROB_BUFFER_RESTORED_SECNE_MAX) || > - (gen9_hcpd_context->last_frame.refresh_frame_context && > last_frame_type == HCP_VP9_KEY_FRAME && (pic_param- > >pic_fields.bits.frame_type == HCP_VP9_INTER_FRAME))) > - { > - if(pic_param->pic_fields.bits.frame_type == > HCP_VP9_INTER_FRAME) > - { > - memcpy(gen9_hcpd_context- > >vp9_frame_ctx[gen9_hcpd_context- > >last_frame.frame_context_idx].inter_mode_probs,gen9_hcpd_context- > >vp9_fc_inter_default.inter_mode_probs,VP9_PROB_BUFFER_KEY_INTER_SIZE > ); > - } > - } > //first part buffer update: Case 1)Reset all 4 probablity > buffers > if((pic_param->pic_fields.bits.frame_type == HCP_VP9_KEY_FRAME) > ||pic_param->pic_fields.bits.intra_only||pic_param- > >pic_fields.bits.error_resilient_mode) > { > @@ -1206,6 +1151,9 @@ vp9_update_probabilities(VADriverContextP ctx, > for(i = 0; i < FRAME_CONTEXTS; i++) > { > memcpy(&gen9_hcpd_context- > >vp9_frame_ctx[i],&gen9_hcpd_context- > >vp9_fc_inter_default,VP9_PROB_BUFFER_FIRST_PART_SIZE); > + > + vp9_copy(gen9_hcpd_context- > >vp9_frame_ctx[i].seg_tree_probs, default_seg_tree_probs); > + vp9_copy(gen9_hcpd_context- > >vp9_frame_ctx[i].seg_pred_probs, default_seg_pred_probs); > } > }else if(pic_param->pic_fields.bits.reset_frame_context == > 2&&pic_param->pic_fields.bits.intra_only) > { > @@ -1214,46 +1162,6 @@ vp9_update_probabilities(VADriverContextP ctx, > pic_param->pic_fields.bits.frame_context_idx = 0; > } > > - //Full buffer update: Case 2.2)Reset only segmentation prob > buffer > - if(pic_param->pic_fields.bits.segmentation_enabled && > - pic_param->pic_fields.bits.segmentation_update_map) > - { > - for(i = 0; i < FRAME_CONTEXTS; i++) > - { > - //Reset only the segementation probability buffers > - vp9_copy(gen9_hcpd_context- > >vp9_frame_ctx[i].seg_tree_probs, default_seg_tree_probs); > - vp9_copy(gen9_hcpd_context- > >vp9_frame_ctx[i].seg_pred_probs, default_seg_pred_probs); > - } > - } > - > - //update vp9_fc according to frame_context_id > - { > - gen9_hcpd_context->vp9_fc = gen9_hcpd_context- > >vp9_frame_ctx[pic_param->pic_fields.bits.frame_context_idx]; > - } > - //Partial Buffer Update > - //Case 1) Update top 3 probabilities only > - if(pic_param->pic_fields.bits.frame_type == HCP_VP9_KEY_FRAME) > - { > - memcpy(gen9_hcpd_context- > >vp9_fc.inter_mode_probs,gen9_hcpd_context- > >vp9_fc_key_default.inter_mode_probs,VP9_PROB_BUFFER_KEY_INTER_SIZE); > - if((!pic_param->pic_fields.bits.segmentation_enabled || > - !pic_param->pic_fields.bits.segmentation_update_map)) { > - //Update with key frame default probability values for > only > - //tx_probs, coef_probs, and the next 343 bytes > - memcpy(&gen9_hcpd_context->vp9_fc,&gen9_hcpd_context- > >vp9_fc_key_default,VP9_PROB_BUFFER_FIRST_PART_SIZE); > - } > - } > - //Case 2) Update 343 bytes for first inter following key frame > - if( last_frame_type == HCP_VP9_KEY_FRAME && > - (pic_param->pic_fields.bits.frame_type == > HCP_VP9_INTER_FRAME)) { > - //Update with inter frame default values for the 343 bytes > - memcpy(gen9_hcpd_context- > >vp9_fc.inter_mode_probs,gen9_hcpd_context- > >vp9_fc_inter_default.inter_mode_probs,VP9_PROB_BUFFER_KEY_INTER_SIZE > ); > - } > - //Case 2.1) Update 343 bytes for first intra-inly frame > following key frame > - if( last_frame_type == HCP_VP9_KEY_FRAME && > - pic_param->pic_fields.bits.intra_only) { > - //Update with inter frame default values for the 343 bytes > - memcpy(gen9_hcpd_context- > >vp9_fc.inter_mode_probs,gen9_hcpd_context- > >vp9_fc_key_default.inter_mode_probs,VP9_PROB_BUFFER_KEY_INTER_SIZE); > - } > //Case 3) Update only segment probabilities > if((pic_param->pic_fields.bits.segmentation_enabled && > pic_param->pic_fields.bits.segmentation_update_map)) > @@ -1261,68 +1169,34 @@ vp9_update_probabilities(VADriverContextP > ctx, > //Update seg_tree_probs and seg_pred_probs accordingly > for (i=0; i<SEG_TREE_PROBS; i++) > { > - gen9_hcpd_context->vp9_fc.seg_tree_probs[i] = pic_param- > >mb_segment_tree_probs[i]; > + gen9_hcpd_context->vp9_frame_ctx[pic_param- > >pic_fields.bits.frame_context_idx].seg_tree_probs[i] = pic_param- > >mb_segment_tree_probs[i]; > } > for (i=0; i<PREDICTION_PROBS; i++) > { > - gen9_hcpd_context->vp9_fc.seg_pred_probs[i] = pic_param- > >segment_pred_probs[i]; > + gen9_hcpd_context->vp9_frame_ctx[pic_param- > >pic_fields.bits.frame_context_idx].seg_pred_probs[i] = pic_param- > >segment_pred_probs[i]; > } > } > > - //Case 4) Considering Intra only frame in the middle of Inter > frames > - if((pic_param->pic_fields.bits.intra_only && > - (pic_param->pic_fields.bits.frame_type == > HCP_VP9_INTER_FRAME)&& > - (pic_param->pic_fields.bits.reset_frame_context==0 || > - pic_param->pic_fields.bits.reset_frame_context==1|| > - pic_param->pic_fields.bits.reset_frame_context==2|| > - pic_param->pic_fields.bits.reset_frame_context==3)) && > - (last_frame_type == HCP_VP9_INTER_FRAME)) > - { > - //save the inter frame values for the 343 bytes > - //Update the 343 bytes of the buffer with Intra values > - is_saved = VP9_PROB_BUFFER_SAVED_SECNE_1; > - } > - //Case 5) Considering Intra only frame among 3 Inter frames > - if((pic_param->pic_fields.bits.intra_only && > - (pic_param->pic_fields.bits.frame_type == > HCP_VP9_INTER_FRAME)&& > - (pic_param->pic_fields.bits.reset_frame_context==2 || > - pic_param->pic_fields.bits.frame_context_idx==1)) && > - ((last_frame_type == HCP_VP9_INTER_FRAME) && > - (gen9_hcpd_context->last_frame.frame_context_idx==0))) > - { > - //save the inter frame values for the 343 bytes > - //Update the 343 bytes of the buffer with Intra values > - is_saved = VP9_PROB_BUFFER_SAVED_SECNE_2; > - } > - > - if(is_saved > VP9_PROB_BUFFER_SAVED_NO) > - { > - gen9_hcpd_context->vp9_saved_fc = gen9_hcpd_context->vp9_fc; > - memcpy(gen9_hcpd_context- > >vp9_fc.inter_mode_probs,gen9_hcpd_context- > >vp9_fc_key_default.inter_mode_probs,VP9_PROB_BUFFER_KEY_INTER_SIZE); > - }else if(pic_param->pic_fields.bits.intra_only) > + //update vp9_fc according to frame_context_id > { > - is_restored = VP9_PROB_BUFFER_RESTORED_SECNE_MAX; > + void *pfc = (void *)&gen9_hcpd_context- > >vp9_frame_ctx[pic_param->pic_fields.bits.frame_context_idx]; > + void *pprob = NULL; > > - } > + dri_bo_map(gen9_hcpd_context->vp9_probability_buffer.bo,1); > > - // update after the restored > - if(gen9_hcpd_context->last_frame.prob_buffer_restored_flag == > VP9_PROB_BUFFER_RESTORED_SECNE_2) > - { > - if((pic_param->pic_fields.bits.frame_type == > HCP_VP9_INTER_FRAME) && > - pic_param->pic_fields.bits.frame_context_idx==1) > + pprob = (void *)gen9_hcpd_context- > >vp9_probability_buffer.bo->virtual; > + memcpy(pprob,pfc,2048); > + //only update 343bytes for key or intra_only frame > + if(pic_param->pic_fields.bits.frame_type == > HCP_VP9_KEY_FRAME || > + pic_param->pic_fields.bits.intra_only) > { > - memcpy(&gen9_hcpd_context->vp9_fc,&gen9_hcpd_context- > >vp9_fc_inter_default,VP9_PROB_BUFFER_FIRST_PART_SIZE); > + memcpy(pprob + VP9_PROB_BUFFER_FIRST_PART_SIZE - > VP9_PROB_BUFFER_KEY_INTER_SIZE > + , gen9_hcpd_context- > >vp9_fc_key_default.inter_mode_probs > + , VP9_PROB_BUFFER_KEY_INTER_SIZE); > } > - } > > - { > - dri_bo_map(gen9_hcpd_context->vp9_probability_buffer.bo,1); > - memcpy((unsigned char *)gen9_hcpd_context- > >vp9_probability_buffer.bo->virtual,&gen9_hcpd_context->vp9_fc,2048); > dri_bo_unmap(gen9_hcpd_context->vp9_probability_buffer.bo); > } > - // save the flag in order to restore or update prob buffer > - gen9_hcpd_context->last_frame.prob_buffer_saved_flag = is_saved; > - gen9_hcpd_context->last_frame.prob_buffer_restored_flag = > is_restored; > } > > static void > @@ -1977,12 +1851,21 @@ gen9_hcpd_vp9_decode_picture(VADriverContextP > ctx, > //update vp9_frame_ctx according to frame_context_id > if (pic_param->pic_fields.bits.refresh_frame_context) > { > + void *pfc = (void *)&gen9_hcpd_context- > >vp9_frame_ctx[pic_param->pic_fields.bits.frame_context_idx]; > + void *pprob = NULL; > + > //update vp9_fc to frame_context > dri_bo_map(gen9_hcpd_context->vp9_probability_buffer.bo,1); > - memcpy(&gen9_hcpd_context->vp9_fc,(unsigned char > *)gen9_hcpd_context->vp9_probability_buffer.bo->virtual,2048); > - dri_bo_unmap(gen9_hcpd_context->vp9_probability_buffer.bo); > - gen9_hcpd_context->vp9_frame_ctx[pic_param- > >pic_fields.bits.frame_context_idx] = gen9_hcpd_context->vp9_fc; > + > + pprob = (void *)gen9_hcpd_context- > >vp9_probability_buffer.bo->virtual; > + if(pic_param->pic_fields.bits.frame_type == > HCP_VP9_KEY_FRAME|| > + pic_param->pic_fields.bits.intra_only) > + memcpy(pfc, pprob, VP9_PROB_BUFFER_FIRST_PART_SIZE - > VP9_PROB_BUFFER_KEY_INTER_SIZE); > + else > + memcpy(pfc, pprob, VP9_PROB_BUFFER_FIRST_PART_SIZE); > > + > + dri_bo_unmap(gen9_hcpd_context->vp9_probability_buffer.bo); > } > > out: > diff --git a/src/gen9_mfd.h b/src/gen9_mfd.h > index a91a84a..b335408 100644 > --- a/src/gen9_mfd.h > +++ b/src/gen9_mfd.h > @@ -101,8 +101,6 @@ struct gen9_hcpd_context > FRAME_CONTEXT vp9_frame_ctx[FRAME_CONTEXTS]; > FRAME_CONTEXT vp9_fc_inter_default; > FRAME_CONTEXT vp9_fc_key_default; > - FRAME_CONTEXT vp9_fc; > - FRAME_CONTEXT vp9_saved_fc; > }; > > #endif /* GEN9_MFD_H */ _______________________________________________ Libva mailing list Libva@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libva