void vp9_setup_key_frame(VP9_COMP *cpi) { VP9_COMMON *cm = &cpi->common; // Setup for Key frame: vp9_default_coef_probs(& cpi->common); vp9_kf_default_bmode_probs(cpi->common.kf_bmode_prob); vp9_init_mbmode_probs(& cpi->common); vp9_default_bmode_probs(cm->fc.bmode_prob); if(cm->last_frame_seg_map) vpx_memset(cm->last_frame_seg_map, 0, (cm->mb_rows * cm->mb_cols)); vp9_init_mv_probs(& cpi->common); // cpi->common.filter_level = 0; // Reset every key frame. cpi->common.filter_level = cpi->common.base_qindex * 3 / 8; // interval before next GF cpi->frames_till_gf_update_due = cpi->baseline_gf_interval; cpi->common.refresh_golden_frame = TRUE; cpi->common.refresh_alt_ref_frame = TRUE; vp9_init_mode_contexts(&cpi->common); vpx_memcpy(&cpi->common.lfc, &cpi->common.fc, sizeof(cpi->common.fc)); vpx_memcpy(&cpi->common.lfc_a, &cpi->common.fc, sizeof(cpi->common.fc)); vpx_memset(cm->prev_mip, 0, (cm->mb_cols + 1) * (cm->mb_rows + 1)* sizeof(MODE_INFO)); vpx_memset(cm->mip, 0, (cm->mb_cols + 1) * (cm->mb_rows + 1)* sizeof(MODE_INFO)); vp9_update_mode_info_border(cm, cm->mip); vp9_update_mode_info_in_image(cm, cm->mi); }
void vp9_setup_key_frame(VP9_COMP *cpi) { VP9_COMMON *cm = &cpi->common; // Setup for Key frame: vp9_default_coef_probs(& cpi->common); vp9_kf_default_bmode_probs(cpi->common.kf_bmode_prob); vp9_init_mbmode_probs(& cpi->common); vp9_default_bmode_probs(cm->fc.bmode_prob); if(cm->last_frame_seg_map) vpx_memset(cm->last_frame_seg_map, 0, (cm->mb_rows * cm->mb_cols)); vp9_init_mv_probs(& cpi->common); // cpi->common.filter_level = 0; // Reset every key frame. cpi->common.filter_level = cpi->common.base_qindex * 3 / 8; // interval before next GF cpi->frames_till_gf_update_due = cpi->baseline_gf_interval; cpi->common.refresh_golden_frame = TRUE; cpi->common.refresh_alt_ref_frame = TRUE; vp9_init_mode_contexts(&cpi->common); vpx_memcpy(&cpi->common.lfc, &cpi->common.fc, sizeof(cpi->common.fc)); vpx_memcpy(&cpi->common.lfc_a, &cpi->common.fc, sizeof(cpi->common.fc)); vpx_memset(cm->prev_mip, 0, (cm->mb_cols + 1) * (cm->mb_rows + 1)* sizeof(MODE_INFO)); vpx_memset(cm->mip, 0, (cm->mb_cols + 1) * (cm->mb_rows + 1)* sizeof(MODE_INFO)); vp9_update_mode_info_border(cm, cm->mip); vp9_update_mode_info_in_image(cm, cm->mi); #if CONFIG_NEW_MVREF if (1) { MACROBLOCKD *xd = &cpi->mb.e_mbd; // Defaults probabilities for encoding the MV ref id signal vpx_memset(xd->mb_mv_ref_probs, VP9_DEFAULT_MV_REF_PROB, sizeof(xd->mb_mv_ref_probs)); } #endif }
int vp9_alloc_frame_buffers(VP9_COMMON *oci, int width, int height) { int i; int aligned_width, aligned_height; vp9_de_alloc_frame_buffers(oci); /* our internal buffers are always multiples of 16 */ aligned_width = (width + 15) & ~15; aligned_height = (height + 15) & ~15; for (i = 0; i < NUM_YV12_BUFFERS; i++) { oci->fb_idx_ref_cnt[i] = 0; if (vp8_yv12_alloc_frame_buffer(&oci->yv12_fb[i], width, height, VP9BORDERINPIXELS) < 0) { vp9_de_alloc_frame_buffers(oci); return 1; } } oci->new_fb_idx = NUM_YV12_BUFFERS - 1; oci->fb_idx_ref_cnt[oci->new_fb_idx] = 1; for (i = 0; i < 3; i++) oci->active_ref_idx[i] = i; for (i = 0; i < NUM_REF_FRAMES; i++) { oci->ref_frame_map[i] = i; oci->fb_idx_ref_cnt[i] = 1; } if (vp8_yv12_alloc_frame_buffer(&oci->temp_scale_frame, width, 16, VP9BORDERINPIXELS) < 0) { vp9_de_alloc_frame_buffers(oci); return 1; } if (vp8_yv12_alloc_frame_buffer(&oci->post_proc_buffer, width, height, VP9BORDERINPIXELS) < 0) { vp9_de_alloc_frame_buffers(oci); return 1; } oci->mb_rows = aligned_height >> 4; oci->mb_cols = aligned_width >> 4; oci->MBs = oci->mb_rows * oci->mb_cols; oci->mode_info_stride = oci->mb_cols + 1; oci->mip = vpx_calloc((oci->mb_cols + 1) * (oci->mb_rows + 1), sizeof(MODE_INFO)); if (!oci->mip) { vp9_de_alloc_frame_buffers(oci); return 1; } oci->mi = oci->mip + oci->mode_info_stride + 1; /* allocate memory for last frame MODE_INFO array */ oci->prev_mip = vpx_calloc((oci->mb_cols + 1) * (oci->mb_rows + 1), sizeof(MODE_INFO)); if (!oci->prev_mip) { vp9_de_alloc_frame_buffers(oci); return 1; } oci->prev_mi = oci->prev_mip + oci->mode_info_stride + 1; oci->above_context = vpx_calloc(sizeof(ENTROPY_CONTEXT_PLANES) * (3 + oci->mb_cols), 1); if (!oci->above_context) { vp9_de_alloc_frame_buffers(oci); return 1; } vp9_update_mode_info_border(oci, oci->mip); vp9_update_mode_info_in_image(oci, oci->mi); return 0; }