| Index: source/libvpx/vp8/encoder/onyx_if.c
 | 
| ===================================================================
 | 
| --- source/libvpx/vp8/encoder/onyx_if.c	(revision 177019)
 | 
| +++ source/libvpx/vp8/encoder/onyx_if.c	(working copy)
 | 
| @@ -20,7 +20,7 @@
 | 
|  #include "mcomp.h"
 | 
|  #include "firstpass.h"
 | 
|  #include "psnr.h"
 | 
| -#include "vpx_scale/vpxscale.h"
 | 
| +#include "vpx_scale/vpx_scale.h"
 | 
|  #include "vp8/common/extend.h"
 | 
|  #include "ratectrl.h"
 | 
|  #include "vp8/common/quant_common.h"
 | 
| @@ -239,7 +239,7 @@
 | 
|      lc->rate_correction_factor           = cpi->rate_correction_factor;
 | 
|      lc->key_frame_rate_correction_factor = cpi->key_frame_rate_correction_factor;
 | 
|      lc->gf_rate_correction_factor        = cpi->gf_rate_correction_factor;
 | 
| -    lc->zbin_over_quant                  = cpi->zbin_over_quant;
 | 
| +    lc->zbin_over_quant                  = cpi->mb.zbin_over_quant;
 | 
|      lc->inter_frame_target               = cpi->inter_frame_target;
 | 
|      lc->total_byte_count                 = cpi->total_byte_count;
 | 
|      lc->filter_level                     = cpi->common.filter_level;
 | 
| @@ -247,8 +247,8 @@
 | 
|      lc->last_frame_percent_intra         = cpi->last_frame_percent_intra;
 | 
|  
 | 
|      memcpy (lc->count_mb_ref_frame_usage,
 | 
| -            cpi->count_mb_ref_frame_usage,
 | 
| -            sizeof(cpi->count_mb_ref_frame_usage));
 | 
| +            cpi->mb.count_mb_ref_frame_usage,
 | 
| +            sizeof(cpi->mb.count_mb_ref_frame_usage));
 | 
|  }
 | 
|  
 | 
|  static void restore_layer_context(VP8_COMP *cpi, const int layer)
 | 
| @@ -277,16 +277,16 @@
 | 
|      cpi->rate_correction_factor           = lc->rate_correction_factor;
 | 
|      cpi->key_frame_rate_correction_factor = lc->key_frame_rate_correction_factor;
 | 
|      cpi->gf_rate_correction_factor        = lc->gf_rate_correction_factor;
 | 
| -    cpi->zbin_over_quant                  = lc->zbin_over_quant;
 | 
| +    cpi->mb.zbin_over_quant                  = lc->zbin_over_quant;
 | 
|      cpi->inter_frame_target               = lc->inter_frame_target;
 | 
|      cpi->total_byte_count                 = lc->total_byte_count;
 | 
|      cpi->common.filter_level              = lc->filter_level;
 | 
|  
 | 
|      cpi->last_frame_percent_intra         = lc->last_frame_percent_intra;
 | 
|  
 | 
| -    memcpy (cpi->count_mb_ref_frame_usage,
 | 
| +    memcpy (cpi->mb.count_mb_ref_frame_usage,
 | 
|              lc->count_mb_ref_frame_usage,
 | 
| -            sizeof(cpi->count_mb_ref_frame_usage));
 | 
| +            sizeof(cpi->mb.count_mb_ref_frame_usage));
 | 
|  }
 | 
|  
 | 
|  static void setup_features(VP8_COMP *cpi)
 | 
| @@ -356,8 +356,6 @@
 | 
|      /* Activity mask based per mb zbin adjustments */
 | 
|      vpx_free(cpi->mb_activity_map);
 | 
|      cpi->mb_activity_map = 0;
 | 
| -    vpx_free(cpi->mb_norm_activity_map);
 | 
| -    cpi->mb_norm_activity_map = 0;
 | 
|  
 | 
|      vpx_free(cpi->mb.pip);
 | 
|      cpi->mb.pip = 0;
 | 
| @@ -643,11 +641,10 @@
 | 
|      for (i = 0; i < MAX_MODES; i ++)
 | 
|      {
 | 
|          cpi->mode_check_freq[i] = 0;
 | 
| -        cpi->mode_test_hit_counts[i] = 0;
 | 
|          cpi->mode_chosen_counts[i] = 0;
 | 
|      }
 | 
|  
 | 
| -    cpi->mbs_tested_so_far = 0;
 | 
| +    cpi->mb.mbs_tested_so_far = 0;
 | 
|  
 | 
|      /* best quality defaults */
 | 
|      sf->RD = 1;
 | 
| @@ -841,7 +838,7 @@
 | 
|  
 | 
|              for (i = 0; i < min; i++)
 | 
|              {
 | 
| -                sum += cpi->error_bins[i];
 | 
| +                sum += cpi->mb.error_bins[i];
 | 
|              }
 | 
|  
 | 
|              total_skip = sum;
 | 
| @@ -850,7 +847,7 @@
 | 
|              /* i starts from 2 to make sure thresh started from 2048 */
 | 
|              for (; i < 1024; i++)
 | 
|              {
 | 
| -                sum += cpi->error_bins[i];
 | 
| +                sum += cpi->mb.error_bins[i];
 | 
|  
 | 
|                  if (10 * sum >= (unsigned int)(cpi->Speed - 6)*(total_mbs - total_skip))
 | 
|                      break;
 | 
| @@ -905,7 +902,7 @@
 | 
|          if (Speed >= 15)
 | 
|              sf->half_pixel_search = 0;
 | 
|  
 | 
| -        vpx_memset(cpi->error_bins, 0, sizeof(cpi->error_bins));
 | 
| +        vpx_memset(cpi->mb.error_bins, 0, sizeof(cpi->mb.error_bins));
 | 
|  
 | 
|      }; /* switch */
 | 
|  
 | 
| @@ -1080,10 +1077,7 @@
 | 
|      }
 | 
|  
 | 
|      /* Data used for real time vc mode to see if gf needs refreshing */
 | 
| -    cpi->inter_zz_count = 0;
 | 
|      cpi->zeromv_count = 0;
 | 
| -    cpi->gf_bad_count = 0;
 | 
| -    cpi->gf_update_recommended = 0;
 | 
|  
 | 
|  
 | 
|      /* Structures used to monitor GF usage */
 | 
| @@ -1098,11 +1092,6 @@
 | 
|                      vpx_calloc(sizeof(*cpi->mb_activity_map),
 | 
|                      cm->mb_rows * cm->mb_cols));
 | 
|  
 | 
| -    vpx_free(cpi->mb_norm_activity_map);
 | 
| -    CHECK_MEM_ERROR(cpi->mb_norm_activity_map,
 | 
| -                    vpx_calloc(sizeof(*cpi->mb_norm_activity_map),
 | 
| -                    cm->mb_rows * cm->mb_cols));
 | 
| -
 | 
|      /* allocate memory for storing last frame's MVs for MV prediction. */
 | 
|      vpx_free(cpi->lfmv);
 | 
|      CHECK_MEM_ERROR(cpi->lfmv, vpx_calloc((cm->mb_rows+2) * (cm->mb_cols+2),
 | 
| @@ -1932,7 +1921,7 @@
 | 
|      /* Set starting values of RD threshold multipliers (128 = *1) */
 | 
|      for (i = 0; i < MAX_MODES; i++)
 | 
|      {
 | 
| -        cpi->rd_thresh_mult[i] = 128;
 | 
| +        cpi->mb.rd_thresh_mult[i] = 128;
 | 
|      }
 | 
|  
 | 
|  #ifdef ENTROPY_STATS
 | 
| @@ -2010,7 +1999,7 @@
 | 
|      cpi->refining_search_sad = vp8_refining_search_sad;
 | 
|  
 | 
|      /* make sure frame 1 is okay */
 | 
| -    cpi->error_bins[0] = cpi->common.MBs;
 | 
| +    cpi->mb.error_bins[0] = cpi->common.MBs;
 | 
|  
 | 
|      /* vp8cx_init_quantizer() is first called here. Add check in
 | 
|       * vp8cx_frame_init_quantizer() so that vp8cx_init_quantizer is only
 | 
| @@ -2599,7 +2588,7 @@
 | 
|          Scale2Ratio(cm->horiz_scale, &hr, &hs);
 | 
|          Scale2Ratio(cm->vert_scale, &vr, &vs);
 | 
|  
 | 
| -        vp8_scale_frame(sd, &cpi->scaled_source, cm->temp_scale_frame.y_buffer,
 | 
| +        vpx_scale_frame(sd, &cpi->scaled_source, cm->temp_scale_frame.y_buffer,
 | 
|                          tmp_height, hs, hr, vs, vr, 0);
 | 
|  
 | 
|          vp8_yv12_extend_frame_borders(&cpi->scaled_source);
 | 
| @@ -2783,10 +2772,14 @@
 | 
|  
 | 
|          if (cpi->common.frames_since_golden > 1)
 | 
|          {
 | 
| -            cpi->recent_ref_frame_usage[INTRA_FRAME] += cpi->count_mb_ref_frame_usage[INTRA_FRAME];
 | 
| -            cpi->recent_ref_frame_usage[LAST_FRAME] += cpi->count_mb_ref_frame_usage[LAST_FRAME];
 | 
| -            cpi->recent_ref_frame_usage[GOLDEN_FRAME] += cpi->count_mb_ref_frame_usage[GOLDEN_FRAME];
 | 
| -            cpi->recent_ref_frame_usage[ALTREF_FRAME] += cpi->count_mb_ref_frame_usage[ALTREF_FRAME];
 | 
| +            cpi->recent_ref_frame_usage[INTRA_FRAME] +=
 | 
| +                cpi->mb.count_mb_ref_frame_usage[INTRA_FRAME];
 | 
| +            cpi->recent_ref_frame_usage[LAST_FRAME] +=
 | 
| +                cpi->mb.count_mb_ref_frame_usage[LAST_FRAME];
 | 
| +            cpi->recent_ref_frame_usage[GOLDEN_FRAME] +=
 | 
| +                cpi->mb.count_mb_ref_frame_usage[GOLDEN_FRAME];
 | 
| +            cpi->recent_ref_frame_usage[ALTREF_FRAME] +=
 | 
| +                cpi->mb.count_mb_ref_frame_usage[ALTREF_FRAME];
 | 
|          }
 | 
|      }
 | 
|  }
 | 
| @@ -2798,7 +2791,7 @@
 | 
|  {
 | 
|      VP8_COMMON *cm = &cpi->common;
 | 
|  
 | 
| -    const int *const rfct = cpi->count_mb_ref_frame_usage;
 | 
| +    const int *const rfct = cpi->mb.count_mb_ref_frame_usage;
 | 
|      const int rf_intra = rfct[INTRA_FRAME];
 | 
|      const int rf_inter = rfct[LAST_FRAME] + rfct[GOLDEN_FRAME] + rfct[ALTREF_FRAME];
 | 
|  
 | 
| @@ -2865,40 +2858,19 @@
 | 
|  
 | 
|      if ((cpi->compressor_speed == 2) && (cpi->Speed >= 5) && (cpi->sf.RD == 0))
 | 
|      {
 | 
| -        double change = 1.0 * abs((int)(cpi->intra_error - cpi->last_intra_error)) / (1 + cpi->last_intra_error);
 | 
| -        double change2 = 1.0 * abs((int)(cpi->prediction_error - cpi->last_prediction_error)) / (1 + cpi->last_prediction_error);
 | 
| +        double change = 1.0 * abs((int)(cpi->mb.intra_error -
 | 
| +            cpi->last_intra_error)) / (1 + cpi->last_intra_error);
 | 
| +        double change2 = 1.0 * abs((int)(cpi->mb.prediction_error -
 | 
| +            cpi->last_prediction_error)) / (1 + cpi->last_prediction_error);
 | 
|          double minerror = cm->MBs * 256;
 | 
|  
 | 
| -#if 0
 | 
| +        cpi->last_intra_error = cpi->mb.intra_error;
 | 
| +        cpi->last_prediction_error = cpi->mb.prediction_error;
 | 
|  
 | 
| -        if (10 * cpi->intra_error / (1 + cpi->prediction_error) < 15
 | 
| -            && cpi->prediction_error > minerror
 | 
| +        if (10 * cpi->mb.intra_error / (1 + cpi->mb.prediction_error) < 15
 | 
| +            && cpi->mb.prediction_error > minerror
 | 
|              && (change > .25 || change2 > .25))
 | 
|          {
 | 
| -            FILE *f = fopen("intra_inter.stt", "a");
 | 
| -
 | 
| -            if (cpi->prediction_error <= 0)
 | 
| -                cpi->prediction_error = 1;
 | 
| -
 | 
| -            fprintf(f, "%d %d %d %d %14.4f\n",
 | 
| -                    cm->current_video_frame,
 | 
| -                    (int) cpi->prediction_error,
 | 
| -                    (int) cpi->intra_error,
 | 
| -                    (int)((10 * cpi->intra_error) / cpi->prediction_error),
 | 
| -                    change);
 | 
| -
 | 
| -            fclose(f);
 | 
| -        }
 | 
| -
 | 
| -#endif
 | 
| -
 | 
| -        cpi->last_intra_error = cpi->intra_error;
 | 
| -        cpi->last_prediction_error = cpi->prediction_error;
 | 
| -
 | 
| -        if (10 * cpi->intra_error / (1 + cpi->prediction_error) < 15
 | 
| -            && cpi->prediction_error > minerror
 | 
| -            && (change > .25 || change2 > .25))
 | 
| -        {
 | 
|              /*(change > 1.4 || change < .75)&& cpi->this_frame_percent_intra > cpi->last_frame_percent_intra + 3*/
 | 
|              return 1;
 | 
|          }
 | 
| @@ -3160,6 +3132,57 @@
 | 
|          cpi->current_ref_frames[LAST_FRAME] = cm->current_video_frame;
 | 
|  #endif
 | 
|      }
 | 
| +
 | 
| +#if CONFIG_TEMPORAL_DENOISING
 | 
| +    if (cpi->oxcf.noise_sensitivity)
 | 
| +    {
 | 
| +        /* we shouldn't have to keep multiple copies as we know in advance which
 | 
| +         * buffer we should start - for now to get something up and running
 | 
| +         * I've chosen to copy the buffers
 | 
| +         */
 | 
| +        if (cm->frame_type == KEY_FRAME)
 | 
| +        {
 | 
| +            int i;
 | 
| +            vp8_yv12_copy_frame(
 | 
| +                    cpi->Source,
 | 
| +                    &cpi->denoiser.yv12_running_avg[LAST_FRAME]);
 | 
| +
 | 
| +            vp8_yv12_extend_frame_borders(
 | 
| +                    &cpi->denoiser.yv12_running_avg[LAST_FRAME]);
 | 
| +
 | 
| +            for (i = 2; i < MAX_REF_FRAMES - 1; i++)
 | 
| +                vp8_yv12_copy_frame(
 | 
| +                        &cpi->denoiser.yv12_running_avg[LAST_FRAME],
 | 
| +                        &cpi->denoiser.yv12_running_avg[i]);
 | 
| +        }
 | 
| +        else /* For non key frames */
 | 
| +        {
 | 
| +            vp8_yv12_extend_frame_borders(
 | 
| +                    &cpi->denoiser.yv12_running_avg[INTRA_FRAME]);
 | 
| +
 | 
| +            if (cm->refresh_alt_ref_frame || cm->copy_buffer_to_arf)
 | 
| +            {
 | 
| +                vp8_yv12_copy_frame(
 | 
| +                        &cpi->denoiser.yv12_running_avg[INTRA_FRAME],
 | 
| +                        &cpi->denoiser.yv12_running_avg[ALTREF_FRAME]);
 | 
| +            }
 | 
| +            if (cm->refresh_golden_frame || cm->copy_buffer_to_gf)
 | 
| +            {
 | 
| +                vp8_yv12_copy_frame(
 | 
| +                        &cpi->denoiser.yv12_running_avg[INTRA_FRAME],
 | 
| +                        &cpi->denoiser.yv12_running_avg[GOLDEN_FRAME]);
 | 
| +            }
 | 
| +            if(cm->refresh_last_frame)
 | 
| +            {
 | 
| +                vp8_yv12_copy_frame(
 | 
| +                        &cpi->denoiser.yv12_running_avg[INTRA_FRAME],
 | 
| +                        &cpi->denoiser.yv12_running_avg[LAST_FRAME]);
 | 
| +            }
 | 
| +        }
 | 
| +
 | 
| +    }
 | 
| +#endif
 | 
| +
 | 
|  }
 | 
|  
 | 
|  void vp8_loopfilter_frame(VP8_COMP *cpi, VP8_COMMON *cm)
 | 
| @@ -3203,52 +3226,7 @@
 | 
|      }
 | 
|  
 | 
|      vp8_yv12_extend_frame_borders(cm->frame_to_show);
 | 
| -#if CONFIG_TEMPORAL_DENOISING
 | 
| -    if (cpi->oxcf.noise_sensitivity)
 | 
| -    {
 | 
|  
 | 
| -
 | 
| -        /* we shouldn't have to keep multiple copies as we know in advance which
 | 
| -         * buffer we should start - for now to get something up and running
 | 
| -         * I've chosen to copy the buffers
 | 
| -         */
 | 
| -        if (cm->frame_type == KEY_FRAME)
 | 
| -        {
 | 
| -            int i;
 | 
| -            vp8_yv12_copy_frame(
 | 
| -                    cpi->Source,
 | 
| -                    &cpi->denoiser.yv12_running_avg[LAST_FRAME]);
 | 
| -
 | 
| -            vp8_yv12_extend_frame_borders(
 | 
| -                    &cpi->denoiser.yv12_running_avg[LAST_FRAME]);
 | 
| -
 | 
| -            for (i = 2; i < MAX_REF_FRAMES - 1; i++)
 | 
| -                vp8_yv12_copy_frame(
 | 
| -                        cpi->Source,
 | 
| -                        &cpi->denoiser.yv12_running_avg[i]);
 | 
| -        }
 | 
| -        else /* For non key frames */
 | 
| -        {
 | 
| -            vp8_yv12_extend_frame_borders(
 | 
| -                    &cpi->denoiser.yv12_running_avg[LAST_FRAME]);
 | 
| -
 | 
| -            if (cm->refresh_alt_ref_frame || cm->copy_buffer_to_arf)
 | 
| -            {
 | 
| -                vp8_yv12_copy_frame(
 | 
| -                        &cpi->denoiser.yv12_running_avg[LAST_FRAME],
 | 
| -                        &cpi->denoiser.yv12_running_avg[ALTREF_FRAME]);
 | 
| -            }
 | 
| -            if (cm->refresh_golden_frame || cm->copy_buffer_to_gf)
 | 
| -            {
 | 
| -                vp8_yv12_copy_frame(
 | 
| -                        &cpi->denoiser.yv12_running_avg[LAST_FRAME],
 | 
| -                        &cpi->denoiser.yv12_running_avg[GOLDEN_FRAME]);
 | 
| -            }
 | 
| -        }
 | 
| -
 | 
| -    }
 | 
| -#endif
 | 
| -
 | 
|  }
 | 
|  
 | 
|  static void encode_frame_to_data_rate
 | 
| @@ -3331,19 +3309,19 @@
 | 
|      cm->copy_buffer_to_arf = 0;
 | 
|  
 | 
|      /* Clear zbin over-quant value and mode boost values. */
 | 
| -    cpi->zbin_over_quant = 0;
 | 
| -    cpi->zbin_mode_boost = 0;
 | 
| +    cpi->mb.zbin_over_quant = 0;
 | 
| +    cpi->mb.zbin_mode_boost = 0;
 | 
|  
 | 
|      /* Enable or disable mode based tweaking of the zbin
 | 
|       * For 2 Pass Only used where GF/ARF prediction quality
 | 
|       * is above a threshold
 | 
|       */
 | 
| -    cpi->zbin_mode_boost_enabled = 1;
 | 
| +    cpi->mb.zbin_mode_boost_enabled = 1;
 | 
|      if (cpi->pass == 2)
 | 
|      {
 | 
|          if ( cpi->gfu_boost <= 400 )
 | 
|          {
 | 
| -            cpi->zbin_mode_boost_enabled = 0;
 | 
| +            cpi->mb.zbin_mode_boost_enabled = 0;
 | 
|          }
 | 
|      }
 | 
|  
 | 
| @@ -3410,7 +3388,7 @@
 | 
|          /* Reset the RD threshold multipliers to default of * 1 (128) */
 | 
|          for (i = 0; i < MAX_MODES; i++)
 | 
|          {
 | 
| -            cpi->rd_thresh_mult[i] = 128;
 | 
| +            cpi->mb.rd_thresh_mult[i] = 128;
 | 
|          }
 | 
|      }
 | 
|  
 | 
| @@ -4099,8 +4077,9 @@
 | 
|                  q_low = (Q < q_high) ? (Q + 1) : q_high;
 | 
|  
 | 
|                  /* If we are using over quant do the same for zbin_oq_low */
 | 
| -                if (cpi->zbin_over_quant > 0)
 | 
| -                    zbin_oq_low = (cpi->zbin_over_quant < zbin_oq_high) ? (cpi->zbin_over_quant + 1) : zbin_oq_high;
 | 
| +                if (cpi->mb.zbin_over_quant > 0)
 | 
| +                    zbin_oq_low = (cpi->mb.zbin_over_quant < zbin_oq_high) ?
 | 
| +                        (cpi->mb.zbin_over_quant + 1) : zbin_oq_high;
 | 
|  
 | 
|                  if (undershoot_seen)
 | 
|                  {
 | 
| @@ -4116,11 +4095,13 @@
 | 
|                       * is max)
 | 
|                       */
 | 
|                      if (Q < MAXQ)
 | 
| -                        cpi->zbin_over_quant = 0;
 | 
| +                        cpi->mb.zbin_over_quant = 0;
 | 
|                      else
 | 
|                      {
 | 
| -                        zbin_oq_low = (cpi->zbin_over_quant < zbin_oq_high) ? (cpi->zbin_over_quant + 1) : zbin_oq_high;
 | 
| -                        cpi->zbin_over_quant = (zbin_oq_high + zbin_oq_low) / 2;
 | 
| +                        zbin_oq_low = (cpi->mb.zbin_over_quant < zbin_oq_high) ?
 | 
| +                            (cpi->mb.zbin_over_quant + 1) : zbin_oq_high;
 | 
| +                        cpi->mb.zbin_over_quant =
 | 
| +                            (zbin_oq_high + zbin_oq_low) / 2;
 | 
|                      }
 | 
|                  }
 | 
|                  else
 | 
| @@ -4133,7 +4114,9 @@
 | 
|  
 | 
|                      Q = vp8_regulate_q(cpi, cpi->this_frame_target);
 | 
|  
 | 
| -                    while (((Q < q_low) || (cpi->zbin_over_quant < zbin_oq_low)) && (Retries < 10))
 | 
| +                    while (((Q < q_low) ||
 | 
| +                        (cpi->mb.zbin_over_quant < zbin_oq_low)) &&
 | 
| +                        (Retries < 10))
 | 
|                      {
 | 
|                          vp8_update_rate_correction_factors(cpi, 0);
 | 
|                          Q = vp8_regulate_q(cpi, cpi->this_frame_target);
 | 
| @@ -4146,12 +4129,13 @@
 | 
|              /* Frame is too small */
 | 
|              else
 | 
|              {
 | 
| -                if (cpi->zbin_over_quant == 0)
 | 
| +                if (cpi->mb.zbin_over_quant == 0)
 | 
|                      /* Lower q_high if not using over quant */
 | 
|                      q_high = (Q > q_low) ? (Q - 1) : q_low;
 | 
|                  else
 | 
|                      /* else lower zbin_oq_high */
 | 
| -                    zbin_oq_high = (cpi->zbin_over_quant > zbin_oq_low) ? (cpi->zbin_over_quant - 1) : zbin_oq_low;
 | 
| +                    zbin_oq_high = (cpi->mb.zbin_over_quant > zbin_oq_low) ?
 | 
| +                        (cpi->mb.zbin_over_quant - 1) : zbin_oq_low;
 | 
|  
 | 
|                  if (overshoot_seen)
 | 
|                  {
 | 
| @@ -4167,9 +4151,10 @@
 | 
|                       * is max)
 | 
|                       */
 | 
|                      if (Q < MAXQ)
 | 
| -                        cpi->zbin_over_quant = 0;
 | 
| +                        cpi->mb.zbin_over_quant = 0;
 | 
|                      else
 | 
| -                        cpi->zbin_over_quant = (zbin_oq_high + zbin_oq_low) / 2;
 | 
| +                        cpi->mb.zbin_over_quant =
 | 
| +                            (zbin_oq_high + zbin_oq_low) / 2;
 | 
|                  }
 | 
|                  else
 | 
|                  {
 | 
| @@ -4192,7 +4177,9 @@
 | 
|                          q_low = Q;
 | 
|                      }
 | 
|  
 | 
| -                    while (((Q > q_high) || (cpi->zbin_over_quant > zbin_oq_high)) && (Retries < 10))
 | 
| +                    while (((Q > q_high) ||
 | 
| +                        (cpi->mb.zbin_over_quant > zbin_oq_high)) &&
 | 
| +                        (Retries < 10))
 | 
|                      {
 | 
|                          vp8_update_rate_correction_factors(cpi, 0);
 | 
|                          Q = vp8_regulate_q(cpi, cpi->this_frame_target);
 | 
| @@ -4210,7 +4197,9 @@
 | 
|                  Q = q_low;
 | 
|  
 | 
|              /* Clamp cpi->zbin_over_quant */
 | 
| -            cpi->zbin_over_quant = (cpi->zbin_over_quant < zbin_oq_low) ? zbin_oq_low : (cpi->zbin_over_quant > zbin_oq_high) ? zbin_oq_high : cpi->zbin_over_quant;
 | 
| +            cpi->mb.zbin_over_quant = (cpi->mb.zbin_over_quant < zbin_oq_low) ?
 | 
| +                zbin_oq_low : (cpi->mb.zbin_over_quant > zbin_oq_high) ?
 | 
| +                    zbin_oq_high : cpi->mb.zbin_over_quant;
 | 
|  
 | 
|              Loop = Q != last_q;
 | 
|          }
 | 
| @@ -4292,7 +4281,6 @@
 | 
|          /* Point to beginning of MODE_INFO arrays. */
 | 
|          MODE_INFO *tmp = cm->mi;
 | 
|  
 | 
| -        cpi->inter_zz_count = 0;
 | 
|          cpi->zeromv_count = 0;
 | 
|  
 | 
|          if(cm->frame_type != KEY_FRAME)
 | 
| @@ -4301,8 +4289,6 @@
 | 
|              {
 | 
|                  for (mb_col = 0; mb_col < cm->mb_cols; mb_col ++)
 | 
|                  {
 | 
| -                    if(tmp->mbmi.mode == ZEROMV && tmp->mbmi.ref_frame == LAST_FRAME)
 | 
| -                        cpi->inter_zz_count++;
 | 
|                      if(tmp->mbmi.mode == ZEROMV)
 | 
|                          cpi->zeromv_count++;
 | 
|                      tmp++;
 | 
| @@ -4732,67 +4718,6 @@
 | 
|  
 | 
|  
 | 
|  }
 | 
| -
 | 
| -
 | 
| -static void check_gf_quality(VP8_COMP *cpi)
 | 
| -{
 | 
| -    VP8_COMMON *cm = &cpi->common;
 | 
| -    int gf_active_pct = (100 * cpi->gf_active_count) / (cm->mb_rows * cm->mb_cols);
 | 
| -    int gf_ref_usage_pct = (cpi->count_mb_ref_frame_usage[GOLDEN_FRAME] * 100) / (cm->mb_rows * cm->mb_cols);
 | 
| -    int last_ref_zz_useage = (cpi->inter_zz_count * 100) / (cm->mb_rows * cm->mb_cols);
 | 
| -
 | 
| -    /* Gf refresh is not currently being signalled */
 | 
| -    if (cpi->gf_update_recommended == 0)
 | 
| -    {
 | 
| -        if (cpi->common.frames_since_golden > 7)
 | 
| -        {
 | 
| -            /* Low use of gf */
 | 
| -            if ((gf_active_pct < 10) || ((gf_active_pct + gf_ref_usage_pct) < 15))
 | 
| -            {
 | 
| -                /* ...but last frame zero zero usage is reasonbable so a
 | 
| -                 * new gf might be appropriate
 | 
| -                 */
 | 
| -                if (last_ref_zz_useage >= 25)
 | 
| -                {
 | 
| -                    cpi->gf_bad_count ++;
 | 
| -
 | 
| -                    /* Check that the condition is stable */
 | 
| -                    if (cpi->gf_bad_count >= 8)
 | 
| -                    {
 | 
| -                        cpi->gf_update_recommended = 1;
 | 
| -                        cpi->gf_bad_count = 0;
 | 
| -                    }
 | 
| -                }
 | 
| -                else
 | 
| -                    /* Restart count as the background is not stable enough */
 | 
| -                    cpi->gf_bad_count = 0;
 | 
| -            }
 | 
| -            else
 | 
| -                /* Gf useage has picked up so reset count */
 | 
| -                cpi->gf_bad_count = 0;
 | 
| -        }
 | 
| -    }
 | 
| -    /* If the signal is set but has not been read should we cancel it. */
 | 
| -    else if (last_ref_zz_useage < 15)
 | 
| -    {
 | 
| -        cpi->gf_update_recommended = 0;
 | 
| -        cpi->gf_bad_count = 0;
 | 
| -    }
 | 
| -
 | 
| -#if 0
 | 
| -    {
 | 
| -        FILE *f = fopen("gfneeded.stt", "a");
 | 
| -        fprintf(f, "%10d %10d %10d %10d %10ld \n",
 | 
| -                cm->current_video_frame,
 | 
| -                cpi->common.frames_since_golden,
 | 
| -                gf_active_pct, gf_ref_usage_pct,
 | 
| -                cpi->gf_update_recommended);
 | 
| -        fclose(f);
 | 
| -    }
 | 
| -
 | 
| -#endif
 | 
| -}
 | 
| -
 | 
|  #if !(CONFIG_REALTIME_ONLY)
 | 
|  static void Pass2Encode(VP8_COMP *cpi, unsigned long *size, unsigned char *dest, unsigned char * dest_end, unsigned int *frame_flags)
 | 
|  {
 | 
| @@ -5096,8 +5021,6 @@
 | 
|  
 | 
|      if (cpi->compressor_speed == 2)
 | 
|      {
 | 
| -        if (cpi->oxcf.number_of_layers == 1)
 | 
| -            check_gf_quality(cpi);
 | 
|          vpx_usec_timer_start(&tsctimer);
 | 
|          vpx_usec_timer_start(&ticktimer);
 | 
|      }
 | 
| 
 |