vp9_onyx_if.c 130 KB
Newer Older
John Koleszar's avatar
John Koleszar committed
1
/*
2
 *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
John Koleszar's avatar
John Koleszar committed
3
 *
4
 *  Use of this source code is governed by a BSD-style license
5
6
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
7
 *  in the file PATENTS.  All contributing project authors may
8
 *  be found in the AUTHORS file in the root of the source tree.
John Koleszar's avatar
John Koleszar committed
9
10
11
 */


12
#include "vpx_config.h"
13
#include "vp9/common/vp9_filter.h"
14
#include "vp9/common/vp9_onyxc_int.h"
15
#include "vp9/common/vp9_reconinter.h"
16
#include "vp9/encoder/vp9_onyx_int.h"
17
#include "vp9/common/vp9_systemdependent.h"
18
#include "vp9/encoder/vp9_quantize.h"
19
#include "vp9/common/vp9_alloccommon.h"
20
21
22
#include "vp9/encoder/vp9_mcomp.h"
#include "vp9/encoder/vp9_firstpass.h"
#include "vp9/encoder/vp9_psnr.h"
Johann's avatar
Johann committed
23
#include "vpx_scale/vpx_scale.h"
24
#include "vp9/common/vp9_extend.h"
25
#include "vp9/encoder/vp9_ratectrl.h"
26
#include "vp9/common/vp9_quant_common.h"
27
#include "vp9/common/vp9_tile_common.h"
28
#include "vp9/encoder/vp9_segmentation.h"
29
#include "./vp9_rtcd.h"
30
#include "./vpx_scale_rtcd.h"
31
#if CONFIG_POSTPROC
32
#include "vp9/common/vp9_postproc.h"
33
#endif
John Koleszar's avatar
John Koleszar committed
34
35
#include "vpx_mem/vpx_mem.h"
#include "vpx_ports/vpx_timer.h"
36

37
#include "vp9/common/vp9_seg_common.h"
38
#include "vp9/encoder/vp9_mbgraph.h"
39
40
#include "vp9/common/vp9_pred_common.h"
#include "vp9/encoder/vp9_rdopt.h"
41
#include "vp9/encoder/vp9_bitstream.h"
42
43
#include "vp9/encoder/vp9_picklpf.h"
#include "vp9/common/vp9_mvref_common.h"
44
#include "vp9/encoder/vp9_temporal_filter.h"
Paul Wilkins's avatar
Paul Wilkins committed
45

John Koleszar's avatar
John Koleszar committed
46
47
48
49
50
#include <math.h>
#include <stdio.h>
#include <limits.h>

extern void print_tree_update_probs();
51

52
static void set_default_lf_deltas(VP9_COMP *cpi);
John Koleszar's avatar
John Koleszar committed
53

Adrian Grange's avatar
Adrian Grange committed
54
55
#define DEFAULT_INTERP_FILTER SWITCHABLE

56
57
#define SEARCH_BEST_FILTER 0            /* to search exhaustively for
                                           best filter */
58
#define RESET_FOREACH_FILTER 0          /* whether to reset the encoder state
59
60
61
62
63
64
65
66
67
                                           before trying each new filter */
#define SHARP_FILTER_QTHRESH 0          /* Q threshold for 8-tap sharp filter */

#define ALTREF_HIGH_PRECISION_MV 1      /* whether to use high precision mv
                                           for altref computation */
#define HIGH_PRECISION_MV_QTHRESH 200   /* Q threshold for use of high precision
                                           mv. Choose a very high value for
                                           now so that HIGH_PRECISION is always
                                           chosen */
68

69
#if CONFIG_INTERNAL_STATS
John Koleszar's avatar
John Koleszar committed
70
71
#include "math.h"

72
extern double vp9_calc_ssim(YV12_BUFFER_CONFIG *source,
73
74
                            YV12_BUFFER_CONFIG *dest, int lumamask,
                            double *weight);
John Koleszar's avatar
John Koleszar committed
75

76

77
extern double vp9_calc_ssimg(YV12_BUFFER_CONFIG *source,
78
79
                             YV12_BUFFER_CONFIG *dest, double *ssim_y,
                             double *ssim_u, double *ssim_v);
John Koleszar's avatar
John Koleszar committed
80
81
82
83


#endif

John Koleszar's avatar
John Koleszar committed
84
// #define OUTPUT_YUV_REC
John Koleszar's avatar
John Koleszar committed
85
86
87
88

#ifdef OUTPUT_YUV_SRC
FILE *yuv_file;
#endif
89
90
91
#ifdef OUTPUT_YUV_REC
FILE *yuv_rec_file;
#endif
John Koleszar's avatar
John Koleszar committed
92
93
94

#if 0
FILE *framepsnr;
Yaowu Xu's avatar
Yaowu Xu committed
95
FILE *kf_list;
John Koleszar's avatar
John Koleszar committed
96
97
98
99
100
FILE *keyfile;
#endif


#ifdef ENTROPY_STATS
101
102
103
extern int intra_mode_stats[VP9_INTRA_MODES]
                           [VP9_INTRA_MODES]
                           [VP9_INTRA_MODES];
John Koleszar's avatar
John Koleszar committed
104
105
#endif

106
107
108
#ifdef MODE_STATS
extern void init_tx_count_stats();
extern void write_tx_count_stats();
109
110
extern void init_switchable_interp_stats();
extern void write_switchable_interp_stats();
111
#endif
112

John Koleszar's avatar
John Koleszar committed
113
114
115
116
#ifdef SPEEDSTATS
unsigned int frames_at_speed[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
#endif

117
118
119
#if defined(SECTIONBITS_OUTPUT)
extern unsigned __int64 Sectionbits[500];
#endif
John Koleszar's avatar
John Koleszar committed
120

121
extern void vp9_init_quantizer(VP9_COMP *cpi);
Paul Wilkins's avatar
Paul Wilkins committed
122

123
// Tables relating active max Q to active min Q
124
125
126
127
128
129
static int kf_low_motion_minq[QINDEX_RANGE];
static int kf_high_motion_minq[QINDEX_RANGE];
static int gf_low_motion_minq[QINDEX_RANGE];
static int gf_high_motion_minq[QINDEX_RANGE];
static int inter_minq[QINDEX_RANGE];

130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
static INLINE void Scale2Ratio(int mode, int *hr, int *hs) {
  switch (mode) {
    case NORMAL:
      *hr = 1;
      *hs = 1;
      break;
    case FOURFIVE:
      *hr = 4;
      *hs = 5;
      break;
    case THREEFIVE:
      *hr = 3;
      *hs = 5;
    break;
    case ONETWO:
      *hr = 1;
      *hs = 2;
    break;
    default:
      *hr = 1;
      *hs = 1;
       assert(0);
      break;
  }
}

156
157
158
159
// Functions to compute the active minq lookup table entries based on a
// formulaic approach to facilitate easier adjustment of the Q tables.
// The formulae were derived from computing a 3rd order polynomial best
// fit to the original data (after plotting real maxq vs minq (not q index))
160
static int calculate_minq_index(double maxq,
Dmitry Kovalev's avatar
Dmitry Kovalev committed
161
                                double x3, double x2, double x1, double c) {
John Koleszar's avatar
John Koleszar committed
162
  int i;
Dmitry Kovalev's avatar
Dmitry Kovalev committed
163
164
  const double minqtarget = MIN(((x3 * maxq + x2) * maxq + x1) * maxq + c,
                                maxq);
John Koleszar's avatar
John Koleszar committed
165

Paul Wilkins's avatar
Paul Wilkins committed
166
167
168
169
170
  // Special case handling to deal with the step from q2.0
  // down to lossless mode represented by q 1.0.
  if (minqtarget <= 2.0)
    return 0;

John Koleszar's avatar
John Koleszar committed
171
  for (i = 0; i < QINDEX_RANGE; i++) {
172
    if (minqtarget <= vp9_convert_qindex_to_q(i))
John Koleszar's avatar
John Koleszar committed
173
174
      return i;
  }
Dmitry Kovalev's avatar
Dmitry Kovalev committed
175

John Koleszar's avatar
John Koleszar committed
176
  return QINDEX_RANGE - 1;
177
}
178

179
static void init_minq_luts(void) {
John Koleszar's avatar
John Koleszar committed
180
181
182
  int i;

  for (i = 0; i < QINDEX_RANGE; i++) {
Dmitry Kovalev's avatar
Dmitry Kovalev committed
183
    const double maxq = vp9_convert_qindex_to_q(i);
John Koleszar's avatar
John Koleszar committed
184
185
186


    kf_low_motion_minq[i] = calculate_minq_index(maxq,
187
188
189
                                                 0.000001,
                                                 -0.0004,
                                                 0.15,
John Koleszar's avatar
John Koleszar committed
190
191
                                                 0.0);
    kf_high_motion_minq[i] = calculate_minq_index(maxq,
192
193
194
                                                  0.000002,
                                                  -0.0012,
                                                  0.5,
John Koleszar's avatar
John Koleszar committed
195
                                                  0.0);
196

John Koleszar's avatar
John Koleszar committed
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
    gf_low_motion_minq[i] = calculate_minq_index(maxq,
                                                 0.0000015,
                                                 -0.0009,
                                                 0.33,
                                                 0.0);
    gf_high_motion_minq[i] = calculate_minq_index(maxq,
                                                  0.0000021,
                                                  -0.00125,
                                                  0.45,
                                                  0.0);
    inter_minq[i] = calculate_minq_index(maxq,
                                         0.00000271,
                                         -0.00113,
                                         0.697,
                                         0.0);

  }
214
}
215

216
217
218
219
220
221
222
223
224
static void set_mvcost(MACROBLOCK *mb) {
  if (mb->e_mbd.allow_high_precision_mv) {
    mb->mvcost = mb->nmvcost_hp;
    mb->mvsadcost = mb->nmvsadcost_hp;
  } else {
    mb->mvcost = mb->nmvcost;
    mb->mvsadcost = mb->nmvsadcost;
  }
}
Paul Wilkins's avatar
Paul Wilkins committed
225

226
void vp9_initialize_enc() {
John Koleszar's avatar
John Koleszar committed
227
228
229
  static int init_done = 0;

  if (!init_done) {
230
    vp9_initialize_common();
231
    vp9_tokenize_initialize();
232
    vp9_init_quant_tables();
233
    vp9_init_me_luts();
John Koleszar's avatar
John Koleszar committed
234
    init_minq_luts();
Deb Mukherjee's avatar
Deb Mukherjee committed
235
    // init_base_skip_probs();
John Koleszar's avatar
John Koleszar committed
236
237
    init_done = 1;
  }
John Koleszar's avatar
John Koleszar committed
238
239
}

240
static void setup_features(VP9_COMP *cpi) {
John Koleszar's avatar
John Koleszar committed
241
  MACROBLOCKD *xd = &cpi->mb.e_mbd;
242
243
  struct loopfilter *const lf = &xd->lf;
  struct segmentation *const seg = &xd->seg;
Paul Wilkins's avatar
Paul Wilkins committed
244

John Koleszar's avatar
John Koleszar committed
245
  // Set up default state for MB feature flags
246
  seg->enabled = 0;
247

248
249
250
  seg->update_map = 0;
  seg->update_data = 0;
  vpx_memset(seg->tree_probs, 255, sizeof(seg->tree_probs));
Paul Wilkins's avatar
Paul Wilkins committed
251

252
  vp9_clearall_segfeatures(seg);
Paul Wilkins's avatar
Paul Wilkins committed
253

254
255
256
257
258
259
  lf->mode_ref_delta_enabled = 0;
  lf->mode_ref_delta_update = 0;
  vp9_zero(lf->ref_deltas);
  vp9_zero(lf->mode_deltas);
  vp9_zero(lf->last_ref_deltas);
  vp9_zero(lf->last_mode_deltas);
John Koleszar's avatar
John Koleszar committed
260

John Koleszar's avatar
John Koleszar committed
261
  set_default_lf_deltas(cpi);
John Koleszar's avatar
John Koleszar committed
262
263
}

264
static void dealloc_compressor_data(VP9_COMP *cpi) {
John Koleszar's avatar
John Koleszar committed
265
266
267
268
269
270
271
  // Delete sementation map
  vpx_free(cpi->segmentation_map);
  cpi->segmentation_map = 0;
  vpx_free(cpi->common.last_frame_seg_map);
  cpi->common.last_frame_seg_map = 0;
  vpx_free(cpi->coding_context.last_frame_seg_map_copy);
  cpi->coding_context.last_frame_seg_map_copy = 0;
John Koleszar's avatar
John Koleszar committed
272

John Koleszar's avatar
John Koleszar committed
273
274
  vpx_free(cpi->active_map);
  cpi->active_map = 0;
John Koleszar's avatar
John Koleszar committed
275

Dmitry Kovalev's avatar
Dmitry Kovalev committed
276
  vp9_free_frame_buffers(&cpi->common);
John Koleszar's avatar
John Koleszar committed
277

278
279
280
  vp9_free_frame_buffer(&cpi->last_frame_uf);
  vp9_free_frame_buffer(&cpi->scaled_source);
  vp9_free_frame_buffer(&cpi->alt_ref_buffer);
281
  vp9_lookahead_destroy(cpi->lookahead);
John Koleszar's avatar
John Koleszar committed
282

John Koleszar's avatar
John Koleszar committed
283
284
  vpx_free(cpi->tok);
  cpi->tok = 0;
John Koleszar's avatar
John Koleszar committed
285

John Koleszar's avatar
John Koleszar committed
286
287
288
289
290
  // 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;
291

John Koleszar's avatar
John Koleszar committed
292
293
  vpx_free(cpi->mb.pip);
  cpi->mb.pip = 0;
John Koleszar's avatar
John Koleszar committed
294
295
}

296
297
298
// Computes a q delta (in "q index" terms) to get from a starting q value
// to a target value
// target q value
299
static int compute_qdelta(VP9_COMP *cpi, double qstart, double qtarget) {
John Koleszar's avatar
John Koleszar committed
300
301
302
303
304
305
306
  int i;
  int start_index = cpi->worst_quality;
  int target_index = cpi->worst_quality;

  // Convert the average q value to an index.
  for (i = cpi->best_quality; i < cpi->worst_quality; i++) {
    start_index = i;
307
    if (vp9_convert_qindex_to_q(i) >= qstart)
John Koleszar's avatar
John Koleszar committed
308
309
310
311
312
313
      break;
  }

  // Convert the q target to an index
  for (i = cpi->best_quality; i < cpi->worst_quality; i++) {
    target_index = i;
314
    if (vp9_convert_qindex_to_q(i) >= qtarget)
John Koleszar's avatar
John Koleszar committed
315
316
317
318
      break;
  }

  return target_index - start_index;
319
320
}

321
static void configure_static_seg_features(VP9_COMP *cpi) {
322
  VP9_COMMON *cm = &cpi->common;
John Koleszar's avatar
John Koleszar committed
323
  MACROBLOCKD *xd = &cpi->mb.e_mbd;
324
  struct segmentation *seg = &xd->seg;
325

John Koleszar's avatar
John Koleszar committed
326
327
  int high_q = (int)(cpi->avg_q > 48.0);
  int qi_delta;
328

John Koleszar's avatar
John Koleszar committed
329
330
331
  // Disable and clear down for KF
  if (cm->frame_type == KEY_FRAME) {
    // Clear down the global segmentation map
332
    vpx_memset(cpi->segmentation_map, 0, cm->mi_rows * cm->mi_cols);
333
334
    seg->update_map = 0;
    seg->update_data = 0;
John Koleszar's avatar
John Koleszar committed
335
    cpi->static_mb_pct = 0;
336

John Koleszar's avatar
John Koleszar committed
337
    // Disable segmentation
338
    vp9_disable_segmentation((VP9_PTR)cpi);
Paul Wilkins's avatar
Paul Wilkins committed
339

John Koleszar's avatar
John Koleszar committed
340
    // Clear down the segment features.
341
    vp9_clearall_segfeatures(seg);
342
343
  } else if (cpi->refresh_alt_ref_frame) {
    // If this is an alt ref frame
John Koleszar's avatar
John Koleszar committed
344
    // Clear down the global segmentation map
345
    vpx_memset(cpi->segmentation_map, 0, cm->mi_rows * cm->mi_cols);
346
347
    seg->update_map = 0;
    seg->update_data = 0;
John Koleszar's avatar
John Koleszar committed
348
    cpi->static_mb_pct = 0;
Paul Wilkins's avatar
Paul Wilkins committed
349

John Koleszar's avatar
John Koleszar committed
350
    // Disable segmentation and individual segment features by default
351
    vp9_disable_segmentation((VP9_PTR)cpi);
352
    vp9_clearall_segfeatures(seg);
Paul Wilkins's avatar
Paul Wilkins committed
353

John Koleszar's avatar
John Koleszar committed
354
355
    // Scan frames from current to arf frame.
    // This function re-enables segmentation if appropriate.
356
    vp9_update_mbgraph_stats(cpi);
Paul Wilkins's avatar
Paul Wilkins committed
357

John Koleszar's avatar
John Koleszar committed
358
359
    // If segmentation was enabled set those features needed for the
    // arf itself.
360
361
362
    if (seg->enabled) {
      seg->update_map = 1;
      seg->update_data = 1;
Paul Wilkins's avatar
Paul Wilkins committed
363

John Koleszar's avatar
John Koleszar committed
364
      qi_delta = compute_qdelta(cpi, cpi->avg_q, (cpi->avg_q * 0.875));
365
366
      vp9_set_segdata(seg, 1, SEG_LVL_ALT_Q, (qi_delta - 2));
      vp9_set_segdata(seg, 1, SEG_LVL_ALT_LF, -2);
Paul Wilkins's avatar
Paul Wilkins committed
367

368
369
      vp9_enable_segfeature(seg, 1, SEG_LVL_ALT_Q);
      vp9_enable_segfeature(seg, 1, SEG_LVL_ALT_LF);
370

John Koleszar's avatar
John Koleszar committed
371
      // Where relevant assume segment data is delta data
372
      seg->abs_delta = SEGMENT_DELTADATA;
Paul Wilkins's avatar
Paul Wilkins committed
373

374
    }
375
  } else if (seg->enabled) {
376
377
    // All other frames if segmentation has been enabled

John Koleszar's avatar
John Koleszar committed
378
    // First normal frame in a valid gf or alt ref group
379
    if (cpi->frames_since_golden == 0) {
Paul Wilkins's avatar
Paul Wilkins committed
380
      // Set up segment features for normal frames in an arf group
John Koleszar's avatar
John Koleszar committed
381
      if (cpi->source_alt_ref_active) {
382
383
384
        seg->update_map = 0;
        seg->update_data = 1;
        seg->abs_delta = SEGMENT_DELTADATA;
Paul Wilkins's avatar
Paul Wilkins committed
385

John Koleszar's avatar
John Koleszar committed
386
387
        qi_delta = compute_qdelta(cpi, cpi->avg_q,
                                  (cpi->avg_q * 1.125));
388
389
        vp9_set_segdata(seg, 1, SEG_LVL_ALT_Q, (qi_delta + 2));
        vp9_enable_segfeature(seg, 1, SEG_LVL_ALT_Q);
Paul Wilkins's avatar
Paul Wilkins committed
390

391
392
        vp9_set_segdata(seg, 1, SEG_LVL_ALT_LF, -2);
        vp9_enable_segfeature(seg, 1, SEG_LVL_ALT_LF);
Paul Wilkins's avatar
Paul Wilkins committed
393

John Koleszar's avatar
John Koleszar committed
394
395
        // Segment coding disabled for compred testing
        if (high_q || (cpi->static_mb_pct == 100)) {
396
397
398
          vp9_set_segdata(seg, 1, SEG_LVL_REF_FRAME, ALTREF_FRAME);
          vp9_enable_segfeature(seg, 1, SEG_LVL_REF_FRAME);
          vp9_enable_segfeature(seg, 1, SEG_LVL_SKIP);
John Koleszar's avatar
John Koleszar committed
399
        }
400
401
402
403
      } else {
        // Disable segmentation and clear down features if alt ref
        // is not active for this group

404
        vp9_disable_segmentation((VP9_PTR)cpi);
Paul Wilkins's avatar
Paul Wilkins committed
405

406
        vpx_memset(cpi->segmentation_map, 0, cm->mi_rows * cm->mi_cols);
Paul Wilkins's avatar
Paul Wilkins committed
407

408
409
        seg->update_map = 0;
        seg->update_data = 0;
Paul Wilkins's avatar
Paul Wilkins committed
410

411
        vp9_clearall_segfeatures(seg);
John Koleszar's avatar
John Koleszar committed
412
      }
413
414
415
416
    } else if (cpi->is_src_frame_alt_ref) {
      // Special case where we are coding over the top of a previous
      // alt ref frame.
      // Segment coding disabled for compred testing
John Koleszar's avatar
John Koleszar committed
417

Paul Wilkins's avatar
Paul Wilkins committed
418
      // Enable ref frame features for segment 0 as well
419
420
      vp9_enable_segfeature(seg, 0, SEG_LVL_REF_FRAME);
      vp9_enable_segfeature(seg, 1, SEG_LVL_REF_FRAME);
John Koleszar's avatar
John Koleszar committed
421

Paul Wilkins's avatar
Paul Wilkins committed
422
      // All mbs should use ALTREF_FRAME
423
424
425
426
      vp9_clear_segdata(seg, 0, SEG_LVL_REF_FRAME);
      vp9_set_segdata(seg, 0, SEG_LVL_REF_FRAME, ALTREF_FRAME);
      vp9_clear_segdata(seg, 1, SEG_LVL_REF_FRAME);
      vp9_set_segdata(seg, 1, SEG_LVL_REF_FRAME, ALTREF_FRAME);
John Koleszar's avatar
John Koleszar committed
427

Paul Wilkins's avatar
Paul Wilkins committed
428
      // Skip all MBs if high Q (0,0 mv and skip coeffs)
John Koleszar's avatar
John Koleszar committed
429
      if (high_q) {
430
431
          vp9_enable_segfeature(seg, 0, SEG_LVL_SKIP);
          vp9_enable_segfeature(seg, 1, SEG_LVL_SKIP);
John Koleszar's avatar
John Koleszar committed
432
      }
Adrian Grange's avatar
Adrian Grange committed
433
      // Enable data update
434
      seg->update_data = 1;
435
436
437
    } else {
      // All other frames.

John Koleszar's avatar
John Koleszar committed
438
      // No updates.. leave things as they are.
439
440
      seg->update_map = 0;
      seg->update_data = 0;
John Koleszar's avatar
John Koleszar committed
441
442
    }
  }
443
444
}

Paul Wilkins's avatar
Paul Wilkins committed
445
446
447
448
#ifdef ENTROPY_STATS
void vp9_update_mode_context_stats(VP9_COMP *cpi) {
  VP9_COMMON *cm = &cpi->common;
  int i, j;
449
  unsigned int (*inter_mode_counts)[VP9_INTER_MODES - 1][2] =
450
      cm->fc.inter_mode_counts;
451
  int64_t (*mv_ref_stats)[VP9_INTER_MODES - 1][2] = cpi->mv_ref_stats;
Paul Wilkins's avatar
Paul Wilkins committed
452
453
454
455
456
457
458
459
460
461
462
463
464
  FILE *f;

  // Read the past stats counters
  f = fopen("mode_context.bin",  "rb");
  if (!f) {
    vpx_memset(cpi->mv_ref_stats, 0, sizeof(cpi->mv_ref_stats));
  } else {
    fread(cpi->mv_ref_stats, sizeof(cpi->mv_ref_stats), 1, f);
    fclose(f);
  }

  // Add in the values for this frame
  for (i = 0; i < INTER_MODE_CONTEXTS; i++) {
465
    for (j = 0; j < VP9_INTER_MODES - 1; j++) {
466
467
      mv_ref_stats[i][j][0] += (int64_t)inter_mode_counts[i][j][0];
      mv_ref_stats[i][j][1] += (int64_t)inter_mode_counts[i][j][1];
Paul Wilkins's avatar
Paul Wilkins committed
468
469
470
471
472
473
474
475
476
477
478
479
480
481
    }
  }

  // Write back the accumulated stats
  f = fopen("mode_context.bin",  "wb");
  fwrite(cpi->mv_ref_stats, sizeof(cpi->mv_ref_stats), 1, f);
  fclose(f);
}

void print_mode_context(VP9_COMP *cpi) {
  FILE *f = fopen("vp9_modecont.c", "a");
  int i, j;

  fprintf(f, "#include \"vp9_entropy.h\"\n");
482
483
484
  fprintf(
      f,
      "const int inter_mode_probs[INTER_MODE_CONTEXTS][VP9_INTER_MODES - 1] =");
Paul Wilkins's avatar
Paul Wilkins committed
485
486
487
488
  fprintf(f, "{\n");
  for (j = 0; j < INTER_MODE_CONTEXTS; j++) {
    fprintf(f, "  {/* %d */ ", j);
    fprintf(f, "    ");
489
    for (i = 0; i < VP9_INTER_MODES - 1; i++) {
Paul Wilkins's avatar
Paul Wilkins committed
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
      int this_prob;
      int64_t count = cpi->mv_ref_stats[j][i][0] + cpi->mv_ref_stats[j][i][1];
      if (count)
        this_prob = ((cpi->mv_ref_stats[j][i][0] * 256) + (count >> 1)) / count;
      else
        this_prob = 128;

      // context probs
      fprintf(f, "%5d, ", this_prob);
    }
    fprintf(f, "  },\n");
  }

  fprintf(f, "};\n");
  fclose(f);
}
#endif  // ENTROPY_STATS

508
// DEBUG: Print out the segment id of each MB in the current frame.
509
510
static void print_seg_map(VP9_COMP *cpi) {
  VP9_COMMON *cm = &cpi->common;
John Koleszar's avatar
John Koleszar committed
511
512
  int row, col;
  int map_index = 0;
Dmitry Kovalev's avatar
Dmitry Kovalev committed
513
  FILE *statsfile = fopen("segmap.stt", "a");
514

Dmitry Kovalev's avatar
Dmitry Kovalev committed
515
  fprintf(statsfile, "%10d\n", cm->current_video_frame);
516

517
518
  for (row = 0; row < cpi->common.mi_rows; row++) {
    for (col = 0; col < cpi->common.mi_cols; col++) {
Dmitry Kovalev's avatar
Dmitry Kovalev committed
519
      fprintf(statsfile, "%10d", cpi->segmentation_map[map_index]);
John Koleszar's avatar
John Koleszar committed
520
      map_index++;
521
522
    }
    fprintf(statsfile, "\n");
John Koleszar's avatar
John Koleszar committed
523
524
  }
  fprintf(statsfile, "\n");
525

John Koleszar's avatar
John Koleszar committed
526
  fclose(statsfile);
527
528
}

529
static void update_reference_segmentation_map(VP9_COMP *cpi) {
Ronald S. Bultje's avatar
Ronald S. Bultje committed
530
531
532
533
534
  VP9_COMMON *const cm = &cpi->common;
  int row, col;
  MODE_INFO *mi, *mi_ptr = cm->mi;
  uint8_t *cache_ptr = cm->last_frame_seg_map, *cache;

535
  for (row = 0; row < cm->mi_rows; row++) {
Ronald S. Bultje's avatar
Ronald S. Bultje committed
536
537
    mi = mi_ptr;
    cache = cache_ptr;
538
    for (col = 0; col < cm->mi_cols; col++, mi++, cache++)
Ronald S. Bultje's avatar
Ronald S. Bultje committed
539
540
      cache[0] = mi->mbmi.segment_id;
    mi_ptr += cm->mode_info_stride;
541
    cache_ptr += cm->mi_cols;
Ronald S. Bultje's avatar
Ronald S. Bultje committed
542
543
544
  }
}

545
static void set_default_lf_deltas(VP9_COMP *cpi) {
546
  struct loopfilter *lf = &cpi->mb.e_mbd.lf;
John Koleszar's avatar
John Koleszar committed
547

548
549
550
551
552
  lf->mode_ref_delta_enabled = 1;
  lf->mode_ref_delta_update = 1;

  vp9_zero(lf->ref_deltas);
  vp9_zero(lf->mode_deltas);
John Koleszar's avatar
John Koleszar committed
553

John Koleszar's avatar
John Koleszar committed
554
  // Test of ref frame deltas
555
556
557
558
  lf->ref_deltas[INTRA_FRAME] = 2;
  lf->ref_deltas[LAST_FRAME] = 0;
  lf->ref_deltas[GOLDEN_FRAME] = -2;
  lf->ref_deltas[ALTREF_FRAME] = -2;
John Koleszar's avatar
John Koleszar committed
559

560
561
  lf->mode_deltas[0] = 0;   // Zero
  lf->mode_deltas[1] = 0;   // New mv
John Koleszar's avatar
John Koleszar committed
562
563
}

564
565
static void set_rd_speed_thresholds(VP9_COMP *cpi, int mode, int speed) {
  SPEED_FEATURES *sf = &cpi->sf;
566
  int speed_multiplier = speed + 1;
567
568
569
  int i;

  // Set baseline threshold values
570
571
  for (i = 0; i < MAX_MODES; ++i)
    sf->thresh_mult[i] = mode == 0 ? -500 : 0;
572
573

  sf->thresh_mult[THR_NEARESTMV] = 0;
574
575
576
  sf->thresh_mult[THR_NEARESTG] = 0;
  sf->thresh_mult[THR_NEARESTA] = 0;

Paul Wilkins's avatar
Paul Wilkins committed
577
578
  sf->thresh_mult[THR_NEWMV] += speed_multiplier * 1000;
  sf->thresh_mult[THR_COMP_NEARESTLA] += speed_multiplier * 1000;
579
  sf->thresh_mult[THR_NEARMV] += speed_multiplier * 1000;
Paul Wilkins's avatar
Paul Wilkins committed
580
  sf->thresh_mult[THR_COMP_NEARESTGA] += speed_multiplier * 1000;
581

Paul Wilkins's avatar
Paul Wilkins committed
582
  sf->thresh_mult[THR_DC] += speed_multiplier * 1000;
583

Paul Wilkins's avatar
Paul Wilkins committed
584
585
586
  sf->thresh_mult[THR_NEWG] += speed_multiplier * 1000;
  sf->thresh_mult[THR_NEWA] += speed_multiplier * 1000;
  sf->thresh_mult[THR_NEARA] += speed_multiplier * 1000;
587

Paul Wilkins's avatar
Paul Wilkins committed
588
  sf->thresh_mult[THR_TM] += speed_multiplier * 1000;
589

590
  sf->thresh_mult[THR_COMP_NEARLA] += speed_multiplier * 1500;
Paul Wilkins's avatar
Paul Wilkins committed
591
592
  sf->thresh_mult[THR_COMP_NEWLA] += speed_multiplier * 2000;
  sf->thresh_mult[THR_NEARG] += speed_multiplier * 1000;
593
  sf->thresh_mult[THR_COMP_NEARGA] += speed_multiplier * 1500;
Paul Wilkins's avatar
Paul Wilkins committed
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
  sf->thresh_mult[THR_COMP_NEWGA] += speed_multiplier * 2000;

  sf->thresh_mult[THR_SPLITMV] += speed_multiplier * 2500;
  sf->thresh_mult[THR_SPLITG] += speed_multiplier * 2500;
  sf->thresh_mult[THR_SPLITA] += speed_multiplier * 2500;
  sf->thresh_mult[THR_COMP_SPLITLA] += speed_multiplier * 4500;
  sf->thresh_mult[THR_COMP_SPLITGA] += speed_multiplier * 4500;

  sf->thresh_mult[THR_ZEROMV] += speed_multiplier * 2000;
  sf->thresh_mult[THR_ZEROG] += speed_multiplier * 2000;
  sf->thresh_mult[THR_ZEROA] += speed_multiplier * 2000;
  sf->thresh_mult[THR_COMP_ZEROLA] += speed_multiplier * 2500;
  sf->thresh_mult[THR_COMP_ZEROGA] += speed_multiplier * 2500;

  sf->thresh_mult[THR_B_PRED] += speed_multiplier * 2500;
  sf->thresh_mult[THR_H_PRED] += speed_multiplier * 2000;
  sf->thresh_mult[THR_V_PRED] += speed_multiplier * 2000;
  sf->thresh_mult[THR_D45_PRED ] += speed_multiplier * 2500;
  sf->thresh_mult[THR_D135_PRED] += speed_multiplier * 2500;
  sf->thresh_mult[THR_D117_PRED] += speed_multiplier * 2500;
  sf->thresh_mult[THR_D153_PRED] += speed_multiplier * 2500;
  sf->thresh_mult[THR_D27_PRED] += speed_multiplier * 2500;
  sf->thresh_mult[THR_D63_PRED] += speed_multiplier * 2500;
617

618
  if (cpi->sf.skip_lots_of_modes) {
Jim Bankoski's avatar
Jim Bankoski committed
619
620
621
    for (i = 0; i < MAX_MODES; ++i)
      sf->thresh_mult[i] = INT_MAX;

Paul Wilkins's avatar
Paul Wilkins committed
622
623
    sf->thresh_mult[THR_DC] = 2000;
    sf->thresh_mult[THR_TM] = 2000;
Jim Bankoski's avatar
Jim Bankoski committed
624
625
626
    sf->thresh_mult[THR_NEWMV] = 4000;
    sf->thresh_mult[THR_NEWG] = 4000;
    sf->thresh_mult[THR_NEWA] = 4000;
Jim Bankoski's avatar
Jim Bankoski committed
627
    sf->thresh_mult[THR_NEARESTMV] = 0;
Jim Bankoski's avatar
Jim Bankoski committed
628
629
630
631
632
    sf->thresh_mult[THR_NEARESTG] = 0;
    sf->thresh_mult[THR_NEARESTA] = 0;
    sf->thresh_mult[THR_NEARMV] = 2000;
    sf->thresh_mult[THR_NEARG] = 2000;
    sf->thresh_mult[THR_NEARA] = 2000;
Jim Bankoski's avatar
Jim Bankoski committed
633
    sf->thresh_mult[THR_COMP_NEARESTLA] = 2000;
Jim Bankoski's avatar
Jim Bankoski committed
634
635
636
    sf->thresh_mult[THR_SPLITMV] = 2500;
    sf->thresh_mult[THR_SPLITG] = 2500;
    sf->thresh_mult[THR_SPLITA] = 2500;
Jim Bankoski's avatar
Jim Bankoski committed
637
638
639
    sf->recode_loop = 0;
  }

640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
  /* disable frame modes if flags not set */
  if (!(cpi->ref_frame_flags & VP9_LAST_FLAG)) {
    sf->thresh_mult[THR_NEWMV    ] = INT_MAX;
    sf->thresh_mult[THR_NEARESTMV] = INT_MAX;
    sf->thresh_mult[THR_ZEROMV   ] = INT_MAX;
    sf->thresh_mult[THR_NEARMV   ] = INT_MAX;
    sf->thresh_mult[THR_SPLITMV  ] = INT_MAX;
  }
  if (!(cpi->ref_frame_flags & VP9_GOLD_FLAG)) {
    sf->thresh_mult[THR_NEARESTG ] = INT_MAX;
    sf->thresh_mult[THR_ZEROG    ] = INT_MAX;
    sf->thresh_mult[THR_NEARG    ] = INT_MAX;
    sf->thresh_mult[THR_NEWG     ] = INT_MAX;
    sf->thresh_mult[THR_SPLITG   ] = INT_MAX;
  }
  if (!(cpi->ref_frame_flags & VP9_ALT_FLAG)) {
    sf->thresh_mult[THR_NEARESTA ] = INT_MAX;
    sf->thresh_mult[THR_ZEROA    ] = INT_MAX;
    sf->thresh_mult[THR_NEARA    ] = INT_MAX;
    sf->thresh_mult[THR_NEWA     ] = INT_MAX;
    sf->thresh_mult[THR_SPLITA   ] = INT_MAX;
  }

  if ((cpi->ref_frame_flags & (VP9_LAST_FLAG | VP9_ALT_FLAG)) !=
      (VP9_LAST_FLAG | VP9_ALT_FLAG)) {
    sf->thresh_mult[THR_COMP_ZEROLA   ] = INT_MAX;
    sf->thresh_mult[THR_COMP_NEARESTLA] = INT_MAX;
    sf->thresh_mult[THR_COMP_NEARLA   ] = INT_MAX;
    sf->thresh_mult[THR_COMP_NEWLA    ] = INT_MAX;
    sf->thresh_mult[THR_COMP_SPLITLA  ] = INT_MAX;
  }
  if ((cpi->ref_frame_flags & (VP9_GOLD_FLAG | VP9_ALT_FLAG)) !=
      (VP9_GOLD_FLAG | VP9_ALT_FLAG)) {
    sf->thresh_mult[THR_COMP_ZEROGA   ] = INT_MAX;
    sf->thresh_mult[THR_COMP_NEARESTGA] = INT_MAX;
    sf->thresh_mult[THR_COMP_NEARGA   ] = INT_MAX;
    sf->thresh_mult[THR_COMP_NEWGA    ] = INT_MAX;
    sf->thresh_mult[THR_COMP_SPLITGA  ] = INT_MAX;
  }
679
680
681
682
683
684
685
686
687

  if (sf->disable_splitmv == 1) {
    sf->thresh_mult[THR_SPLITMV  ] = INT_MAX;
    sf->thresh_mult[THR_SPLITG   ] = INT_MAX;
    sf->thresh_mult[THR_SPLITA   ] = INT_MAX;

    sf->thresh_mult[THR_COMP_SPLITLA  ] = INT_MAX;
    sf->thresh_mult[THR_COMP_SPLITGA  ] = INT_MAX;
  }
688
689
}

690
void vp9_set_speed_features(VP9_COMP *cpi) {
John Koleszar's avatar
John Koleszar committed
691
  SPEED_FEATURES *sf = &cpi->sf;
692
  int mode = cpi->compressor_speed;
693
  int speed = cpi->speed;
John Koleszar's avatar
John Koleszar committed
694
  int i;
695

John Koleszar's avatar
John Koleszar committed
696
  // Only modes 0 and 1 supported for now in experimental code basae
697
698
  if (mode > 1)
    mode = 1;
John Koleszar's avatar
John Koleszar committed
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714

  // Initialise default mode frequency sampling variables
  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;
  }

  // best quality defaults
  sf->RD = 1;
  sf->search_method = NSTEP;
  sf->auto_filter = 1;
  sf->recode_loop = 1;
  sf->quarter_pixel_search = 1;
  sf->half_pixel_search = 1;
  sf->iterative_sub_pixel = 1;
715
  sf->optimize_coefficients = !cpi->oxcf.lossless;
716
  sf->reduce_first_step_size = 0;
Paul Wilkins's avatar
Paul Wilkins committed
717
  sf->auto_mv_step_size = 0;
John Koleszar's avatar
John Koleszar committed
718
  sf->max_step_search_steps = MAX_MVSEARCH_STEPS;
719
  sf->comp_inter_joint_search_thresh = BLOCK_SIZE_AB4X4;
720
  sf->adaptive_rd_thresh = 0;
Jim Bankoski's avatar
Jim Bankoski committed
721
  sf->use_lastframe_partitioning = 0;
Deb Mukherjee's avatar
Deb Mukherjee committed
722
  sf->tx_size_search_method = USE_FULL_RD;
723
724
  sf->use_8tap_always = 0;
  sf->use_avoid_tested_higherror = 0;
Paul Wilkins's avatar
Paul Wilkins committed
725
  sf->reference_masking = 0;
726
  sf->skip_lots_of_modes = 0;
727
  sf->adjust_thresholds_by_speed = 0;
728
  sf->partition_by_variance = 0;
729
  sf->use_one_partition_size_always = 0;
Yaowu Xu's avatar
Yaowu Xu committed
730
  sf->less_rectangular_check = 0;
731
  sf->use_square_partition_only = 0;
732
733
734
  sf->auto_min_max_partition_size = 0;
  sf->auto_min_max_partition_interval = 0;
  sf->auto_min_max_partition_count = 0;
735
  // sf->use_max_partition_size = 0;
736
  sf->max_partition_size = BLOCK_64X64;
737
  // sf->use_min_partition_size = 0;
738
  sf->min_partition_size = BLOCK_4X4;
739
740
  sf->adjust_partitioning_from_last_frame = 0;
  sf->last_partitioning_redo_frequency = 4;
741
  sf->disable_splitmv = 0;
742
  sf->mode_search_skip_flags = 0;
743
  sf->last_chroma_intra_mode = TM_PRED;
744
  sf->use_rd_breakout = 0;
745
  sf->skip_encode_sb = 0;
746
  sf->use_uv_intra_rd_estimate = 0;
747
  sf->using_small_partition_info = 0;
Paul Wilkins's avatar
Paul Wilkins committed
748
749
750
751
  // Skip any mode not chosen at size < X for all sizes > X
  // Hence BLOCK_SIZE_SB64X64 (skip is off)
  sf->unused_mode_skip_lvl = BLOCK_SIZE_SB64X64;

752
753
754
755
#if CONFIG_MULTIPLE_ARF
  // Switch segmentation off.
  sf->static_segmentation = 0;
#else
756
  sf->static_segmentation = 0;
757
#endif
John Koleszar's avatar
John Koleszar committed
758

759
  switch (mode) {
John Koleszar's avatar
John Koleszar committed
760
    case 0: // best quality mode
John Koleszar's avatar
John Koleszar committed
761
762
763
      sf->search_best_filter = SEARCH_BEST_FILTER;
      break;

764
    case 1:
765
766
767
#if CONFIG_MULTIPLE_ARF
      // Switch segmentation off.
      sf->static_segmentation = 0;
768
#else
Paul Wilkins's avatar
Paul Wilkins committed
769
      sf->static_segmentation = 0;
770
#endif
771
772
      sf->use_avoid_tested_higherror = 1;
      sf->adaptive_rd_thresh = 1;
Yaowu Xu's avatar
Yaowu Xu committed
773
      if (speed == 1) {
774
        sf->comp_inter_joint_search_thresh = BLOCK_SIZE_TYPES;
Yaowu Xu's avatar
Yaowu Xu committed
775
        sf->less_rectangular_check  = 1;
Deb Mukherjee's avatar
Deb Mukherjee committed
776
777
778
779
        sf->tx_size_search_method = ((cpi->common.frame_type == KEY_FRAME ||
                                      cpi->common.intra_only ||
                                      cpi->common.show_frame == 0) ?
                                     USE_FULL_RD :
780
781
782
783
                                     USE_LARGESTALL);
        sf->use_square_partition_only = !(cpi->common.frame_type == KEY_FRAME ||
                                   cpi->common.intra_only ||
                                   cpi->common.show_frame == 0);
784
785
        sf->disable_splitmv =
            (MIN(cpi->common.width, cpi->common.height) >= 720)? 1 : 0;
Paul Wilkins's avatar
Paul Wilkins committed
786
        sf->unused_mode_skip_lvl = BLOCK_SIZE_SB32X32;
787
788
789
        sf->mode_search_skip_flags = FLAG_SKIP_INTRA_DIRMISMATCH |
                                     FLAG_SKIP_INTRA_BESTINTER |
                                     FLAG_SKIP_COMP_BESTINTRA;
790
        sf->use_uv_intra_rd_estimate = 1;
791
        sf->use_rd_breakout = 1;
792
        sf->skip_encode_sb = 1;
793
        sf->auto_mv_step_size = 1;
794
795

        sf->auto_min_max_partition_size = 1;
796
797
        // sf->use_max_partition_size = 1;
        // sf->use_min_partition_size = 1;
798
        sf->auto_min_max_partition_interval = 1;
Jim Bankoski's avatar
Jim Bankoski committed
799
      }
800
      if (speed == 2) {
Paul Wilkins's avatar
Paul Wilkins committed
801
        sf->adjust_thresholds_by_speed = 1;
Yaowu Xu's avatar
Yaowu Xu committed
802
        sf->less_rectangular_check  = 1;
803
        sf->use_square_partition_only = 1;
Paul Wilkins's avatar
Paul Wilkins committed
804
        sf->comp_inter_joint_search_thresh = BLOCK_SIZE_TYPES;
Jim Bankoski's avatar
Jim Bankoski committed
805
        sf->use_lastframe_partitioning = 1;
806
807
        sf->adjust_partitioning_from_last_frame = 1;
        sf->last_partitioning_redo_frequency = 3;
Paul Wilkins's avatar
Paul Wilkins committed
808
        sf->unused_mode_skip_lvl = BLOCK_SIZE_SB32X32;
809
810
811
812
813
814
815
816
817
        sf->tx_size_search_method = ((cpi->common.frame_type == KEY_FRAME ||
                                      cpi->common.intra_only ||
                                      cpi->common.show_frame == 0) ?
                                     USE_FULL_RD :
                                     USE_LARGESTALL);
        sf->mode_search_skip_flags = FLAG_SKIP_INTRA_DIRMISMATCH |
                                     FLAG_SKIP_INTRA_BESTINTER |
                                     FLAG_SKIP_COMP_BESTINTRA |
                                     FLAG_SKIP_COMP_REFMISMATCH;
818
        sf->last_chroma_intra_mode = DC_PRED;
819
        sf->use_uv_intra_rd_estimate = 1;
820
        sf->use_rd_breakout = 1;
821
        sf->skip_encode_sb = 1;
822
        sf->using_small_partition_info = 1;
823
824
        sf->disable_splitmv =
            (MIN(cpi->common.width, cpi->common.height) >= 720)? 1 : 0;
825
        sf->auto_mv_step_size = 1;
826
      }
827
      if (speed == 3) {
Paul Wilkins's avatar
Paul Wilkins committed
828
        sf->comp_inter_joint_search_thresh = BLOCK_SIZE_TYPES;
829
        sf->partition_by_variance = 1;
Deb Mukherjee's avatar
Deb Mukherjee committed
830
831
832
833
834
        sf->tx_size_search_method = ((cpi->common.frame_type == KEY_FRAME ||
                                      cpi->common.intra_only ||
                                      cpi->common.show_frame == 0) ?
                                     USE_FULL_RD :
                                     USE_LARGESTALL);
835
836
837
838
        sf->mode_search_skip_flags = FLAG_SKIP_INTRA_DIRMISMATCH |
                                     FLAG_SKIP_INTRA_BESTINTER |
                                     FLAG_SKIP_COMP_BESTINTRA |
                                     FLAG_SKIP_COMP_REFMISMATCH;
839
        sf->use_rd_breakout = 1;
840
        sf->skip_encode_sb = 1;
841
        sf->disable_splitmv = 1;
842
        sf->auto_mv_step_size = 1;
843
      }
844
      if (speed == 4) {
Paul Wilkins's avatar
Paul Wilkins committed
845
        sf->comp_inter_joint_search_thresh = BLOCK_SIZE_TYPES;
846
847
        sf->use_one_partition_size_always = 1;
        sf->always_this_block_size = BLOCK_SIZE_MB16X16;
Deb Mukherjee's avatar
Deb Mukherjee committed
848
849
850
851
852
        sf->tx_size_search_method = ((cpi->common.frame_type == KEY_FRAME ||
                                      cpi->common.intra_only ||
                                      cpi->common.show_frame == 0) ?
                                     USE_FULL_RD :
                                     USE_LARGESTALL);
853
854
855
856
        sf->mode_search_skip_flags = FLAG_SKIP_INTRA_DIRMISMATCH |
                                     FLAG_SKIP_INTRA_BESTINTER |
                                     FLAG_SKIP_COMP_BESTINTRA |
                                     FLAG_SKIP_COMP_REFMISMATCH;
857
        sf->use_rd_breakout = 1;
Paul Wilkins's avatar
Paul Wilkins committed
858
        sf->optimize_coefficients = 0;
859
        sf->auto_mv_step_size = 1;
Paul Wilkins's avatar
Paul Wilkins committed
860
861
        // sf->reduce_first_step_size = 1;
        // sf->reference_masking = 1;
862
863

        sf->disable_splitmv = 1;
864
      }
865
866
867
      /*
      if (speed == 2) {
        sf->first_step = 0;
868
        sf->comp_inter_joint_search_thresh = BLOCK_SIZE_SB8X8;
869
870
        sf->use_max_partition_size = 1;
        sf->max_partition_size = BLOCK_SIZE_MB16X16;
871
872
      }
      if (speed == 3) {
873
        sf->first_step = 0;
874
        sf->comp_inter_joint_search_thresh = BLOCK_SIZE_SB8X8;
875
876
        sf->use_min_partition_size = 1;
        sf->min_partition_size = BLOCK_SIZE_SB8X8;
877
878
      }
      */
879

Deb Mukherjee's avatar
Deb Mukherjee committed
880
      break;
John Koleszar's avatar
John Koleszar committed
881

John Koleszar's avatar
John Koleszar committed
882
  }; /* switch */
883

884
  // Set rd thresholds based on mode and speed setting
885
886
887
888
  if (cpi->sf.adjust_thresholds_by_speed)
    set_rd_speed_thresholds(cpi, mode, speed);
  else
    set_rd_speed_thresholds(cpi, mode, 0);
John Koleszar's avatar
John Koleszar committed
889
890
891
892
893
894

  // Slow quant, dct and trellis not worthwhile for first pass
  // so make sure they are always turned off.
  if (cpi->pass == 1) {
    sf->optimize_coefficients = 0;
  }
895

Yaowu Xu's avatar
Yaowu Xu committed
896
897
898
899
  cpi->mb.fwd_txm16x16  = vp9_short_fdct16x16;
  cpi->mb.fwd_txm8x8    = vp9_short_fdct8x8;
  cpi->mb.fwd_txm8x4    = vp9_short_fdct8x4;
  cpi->mb.fwd_txm4x4    = vp9_short_fdct4x4;
Yaowu Xu's avatar
Yaowu Xu committed
900
  if (cpi->oxcf.lossless || cpi->mb.e_mbd.lossless) {
Yaowu Xu's avatar
Yaowu Xu committed
901
902
    cpi->mb.fwd_txm8x4    = vp9_short_walsh8x4;
    cpi->mb.fwd_txm4x4    = vp9_short_walsh4x4;
John Koleszar's avatar
John Koleszar committed
903
  }
John Koleszar's avatar
John Koleszar committed
904

905
  cpi->mb.quantize_b_4x4      = vp9_regular_quantize_b_4x4;
Paul Wilkins's avatar
Paul Wilkins committed
906

John Koleszar's avatar
John Koleszar committed
907
  if (cpi->sf.iterative_sub_pixel == 1) {