]> granicus.if.org Git - libvpx/commitdiff
removed the dependency cross key frame boundary
authorYaowu Xu <yaowu@google.com>
Fri, 12 Oct 2012 18:38:10 +0000 (11:38 -0700)
committerYaowu Xu <yaowu@google.com>
Fri, 12 Oct 2012 19:25:21 +0000 (12:25 -0700)
This allowed decoding from any key frame after skipping the frames
prior.

Change-Id: I096fccad5346d75ae50a017c94eb8d772a7e8b00

vp8/common/alloccommon.c
vp8/decoder/decodframe.c
vp8/encoder/ratectrl.c

index 2c5b64ceea30cc169a2f1ff1f0d51da7e2f60b9e..4323fdf4c4010c65d31b4bb6920e06c67345bd0f 100644 (file)
@@ -21,7 +21,7 @@
 
 extern  void vp8_init_scan_order_mask();
 
-static void update_mode_info_border(VP8_COMMON *cpi, MODE_INFO *mi_base) {
+void update_mode_info_border(VP8_COMMON *cpi, MODE_INFO *mi_base) {
   int stride = cpi->mode_info_stride;
   int i;
 
@@ -33,7 +33,7 @@ static void update_mode_info_border(VP8_COMMON *cpi, MODE_INFO *mi_base) {
     vpx_memset(&mi_base[i * stride], 0, sizeof(MODE_INFO));
   }
 }
-static void update_mode_info_in_image(VP8_COMMON *cpi, MODE_INFO *mi) {
+void update_mode_info_in_image(VP8_COMMON *cpi, MODE_INFO *mi) {
   int i, j;
 
   // For each in image mode_info element set the in image flag to 1
index 3fa6660aae73fc1f22c539d79e6c251173430f13..c46957202a2f94631c189322076e03d37a50cf04 100644 (file)
@@ -825,6 +825,7 @@ static void init_frame(VP8D_COMP *pbi) {
     vp8_init_mv_probs(pc);
 
     vp8_init_mbmode_probs(pc);
+    vp8_default_bmode_probs(pc->fc.bmode_prob);
 
     vp8_default_coef_probs(pc);
     vp8_kf_default_bmode_probs(pc->kf_bmode_prob);
@@ -858,6 +859,14 @@ static void init_frame(VP8D_COMP *pbi) {
     vpx_memcpy(pbi->common.fc.vp8_mode_contexts,
                pbi->common.fc.mode_context,
                sizeof(pbi->common.fc.mode_context));
+    vpx_memset(pc->prev_mip, 0,
+               (pc->mb_cols + 1) * (pc->mb_rows + 1)* sizeof(MODE_INFO));
+    vpx_memset(pc->mip, 0,
+               (pc->mb_cols + 1) * (pc->mb_rows + 1)* sizeof(MODE_INFO));
+
+    update_mode_info_border(pc, pc->mip);
+    update_mode_info_in_image(pc, pc->mi);
+
   } else {
 
     if (!pc->use_bilinear_mc_filter)
index 2864a6b15630f1a7d6267e0f8bb0e6ef59fcc76a..2b5f699b62e36cd4255639aa376df7eb0cc60c5f 100644 (file)
@@ -267,10 +267,12 @@ void vp8_restore_coding_context(VP8_COMP *cpi) {
 
 
 void vp8_setup_key_frame(VP8_COMP *cpi) {
+  VP8_COMMON *cm = &cpi->common;
   // Setup for Key frame:
   vp8_default_coef_probs(& cpi->common);
   vp8_kf_default_bmode_probs(cpi->common.kf_bmode_prob);
   vp8_init_mbmode_probs(& cpi->common);
+  vp8_default_bmode_probs(cm->fc.bmode_prob);
 
   vp8_init_mv_probs(& cpi->common);
 #if CONFIG_NEWMVENTROPY == 0
@@ -297,6 +299,15 @@ void vp8_setup_key_frame(VP8_COMP *cpi) {
   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));
+
+  update_mode_info_border(cm, cm->mip);
+  update_mode_info_in_image(cm, cm->mi);
+
+
 }
 
 void vp8_setup_inter_frame(VP8_COMP *cpi) {