- //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);
- }