Merge "Improve MV prediction accuracy to achieve performance gain"
authorScott LaVarnway <slavarnway@google.com>
Mon, 6 Dec 2010 17:41:09 +0000 (09:41 -0800)
committerCode Review <code-review@webmproject.org>
Mon, 6 Dec 2010 17:41:09 +0000 (09:41 -0800)
1  2 
vp8/encoder/firstpass.c
vp8/encoder/onyx_if.c
vp8/encoder/onyx_int.h
vp8/encoder/rdopt.c
vp8/encoder/temporal_filter.c

Simple merge
@@@ -4190,9 -4183,63 +4208,63 @@@ static void encode_frame_to_data_rat
      }
  #endif
  
 -
 -
 -
 +    // Update the GF useage maps.
 +    // This is done after completing the compression of a frame when all modes etc. are finalized but before loop filter
 +    vp8_update_gf_useage_maps(cpi, cm, &cpi->mb);
+ ////////////////////////////////
+ ////////////////////////////////
+     // This frame's MVs are saved and will be used in next frame's MV prediction.
+     if(cm->show_frame)   //do not save for altref frame
+     {
+       int mb_row;
+       int mb_col;
+       MODE_INFO *tmp = cm->mip; //point to beginning of allocated MODE_INFO arrays.
+       //static int last_video_frame = 0;
+       /*
+       if (cm->current_video_frame == 0)   //first frame: set to 0
+       {
+         for (mb_row = 0; mb_row < cm->mb_rows+1; mb_row ++)
+         {
+             for (mb_col = 0; mb_col < cm->mb_cols+1; mb_col ++)
+             {
+                 cpi->lfmv[mb_col + mb_row*(cm->mode_info_stride)].as_int = 0;
+                 cpi->lf_ref_frame_sign_bias[mb_col + mb_row*(cm->mode_info_stride)] = 0;
+                 cpi->lf_ref_frame[mb_col + mb_row*(cm->mode_info_stride)] = 0;
+             }
+         }
+       }else
+       */
+       if(cm->frame_type != KEY_FRAME)
+       {
+         for (mb_row = 0; mb_row < cm->mb_rows+1; mb_row ++)
+         {
+           for (mb_col = 0; mb_col < cm->mb_cols+1; mb_col ++)
+           {
+               if(tmp->mbmi.ref_frame != INTRA_FRAME)
+                 cpi->lfmv[mb_col + mb_row*(cm->mode_info_stride)].as_int = tmp->mbmi.mv.as_int;
+               cpi->lf_ref_frame_sign_bias[mb_col + mb_row*(cm->mode_info_stride)] = cm->ref_frame_sign_bias[tmp->mbmi.ref_frame];
+               cpi->lf_ref_frame[mb_col + mb_row*(cm->mode_info_stride)] = tmp->mbmi.ref_frame;
+               //printf("[%d, %d]  ", cpi->lfmv[mb_col + mb_row*(cm->mode_info_stride-1)].as_mv.row, cpi->lfmv[mb_col + mb_row*(cm->mode_info_stride-1)].as_mv.col);
+               tmp++;
+           }
+         }
+       //last_video_frame = cm->current_video_frame;
+       }
+     }
+ //printf("after: %d   %d \n", cm->current_video_frame, cm->show_frame );
+     // Update the GF useage maps.
+     // This is done after completing the compression of a frame when all modes etc. are finalized but before loop filter
+     vp8_update_gf_useage_maps(cpi, cm, &cpi->mb);
  
      if (cm->frame_type == KEY_FRAME)
          cm->refresh_last_frame = 1;
Simple merge
Simple merge
Simple merge