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(struct loopfilter *lf);
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
241
242
static void setup_features(VP9_COMMON *cm) {
  struct loopfilter *const lf = &cm->lf;
  struct segmentation *const seg = &cm->seg;
Paul Wilkins's avatar
Paul Wilkins committed
243

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

247
248
249
  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
250

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

253
254
255
256
257
258
  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
259

260
  set_default_lf_deltas(lf);
John Koleszar's avatar
John Koleszar committed
261
262
}

263
static void dealloc_compressor_data(VP9_COMP *cpi) {
John Koleszar's avatar
John Koleszar committed
264
265
266
267
268
269
270
  // 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
271

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

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

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

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

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

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

295
296
297
// Computes a q delta (in "q index" terms) to get from a starting q value
// to a target value
// target q value
298
static int compute_qdelta(VP9_COMP *cpi, double qstart, double qtarget) {
John Koleszar's avatar
John Koleszar committed
299
300
301
302
303
304
305
  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;
306
    if (vp9_convert_qindex_to_q(i) >= qstart)
John Koleszar's avatar
John Koleszar committed
307
308
309
310
311
312
      break;
  }

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

  return target_index - start_index;
318
319
}

320
static void configure_static_seg_features(VP9_COMP *cpi) {
321
  VP9_COMMON *cm = &cpi->common;
322
  struct segmentation *seg = &cm->seg;
323

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

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

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

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

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

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

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

John Koleszar's avatar
John Koleszar committed
362
      qi_delta = compute_qdelta(cpi, cpi->avg_q, (cpi->avg_q * 0.875));
363
364
      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
365

366
367
      vp9_enable_segfeature(seg, 1, SEG_LVL_ALT_Q);
      vp9_enable_segfeature(seg, 1, SEG_LVL_ALT_LF);
368

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

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

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

John Koleszar's avatar
John Koleszar committed
384
385
        qi_delta = compute_qdelta(cpi, cpi->avg_q,
                                  (cpi->avg_q * 1.125));
386
387
        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
388

389
390
        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
391

John Koleszar's avatar
John Koleszar committed
392
393
        // Segment coding disabled for compred testing
        if (high_q || (cpi->static_mb_pct == 100)) {
394
395
396
          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
397
        }
398
399
400
401
      } else {
        // Disable segmentation and clear down features if alt ref
        // is not active for this group

402
        vp9_disable_segmentation((VP9_PTR)cpi);
Paul Wilkins's avatar
Paul Wilkins committed
403

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

406
407
        seg->update_map = 0;
        seg->update_data = 0;
Paul Wilkins's avatar
Paul Wilkins committed
408

409
        vp9_clearall_segfeatures(seg);
John Koleszar's avatar
John Koleszar committed
410
      }
411
412
413
414
    } 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
415

Paul Wilkins's avatar
Paul Wilkins committed
416
      // Enable ref frame features for segment 0 as well
417
418
      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
419

Paul Wilkins's avatar
Paul Wilkins committed
420
      // All mbs should use ALTREF_FRAME
421
422
423
424
      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
425

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

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

Paul Wilkins's avatar
Paul Wilkins committed
443
444
445
446
#ifdef ENTROPY_STATS
void vp9_update_mode_context_stats(VP9_COMP *cpi) {
  VP9_COMMON *cm = &cpi->common;
  int i, j;
447
  unsigned int (*inter_mode_counts)[VP9_INTER_MODES - 1][2] =
448
      cm->fc.inter_mode_counts;
449
  int64_t (*mv_ref_stats)[VP9_INTER_MODES - 1][2] = cpi->mv_ref_stats;
Paul Wilkins's avatar
Paul Wilkins committed
450
451
452
453
454
455
456
457
458
459
460
461
462
  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++) {
463
    for (j = 0; j < VP9_INTER_MODES - 1; j++) {
464
465
      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
466
467
468
469
470
471
472
473
474
475
476
477
478
479
    }
  }

  // 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");
480
481
482
  fprintf(
      f,
      "const int inter_mode_probs[INTER_MODE_CONTEXTS][VP9_INTER_MODES - 1] =");
Paul Wilkins's avatar
Paul Wilkins committed
483
484
485
486
  fprintf(f, "{\n");
  for (j = 0; j < INTER_MODE_CONTEXTS; j++) {
    fprintf(f, "  {/* %d */ ", j);
    fprintf(f, "    ");
487
    for (i = 0; i < VP9_INTER_MODES - 1; i++) {
Paul Wilkins's avatar
Paul Wilkins committed
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
      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

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

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

515
516
  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
517
      fprintf(statsfile, "%10d", cpi->segmentation_map[map_index]);
John Koleszar's avatar
John Koleszar committed
518
      map_index++;
519
520
    }
    fprintf(statsfile, "\n");
John Koleszar's avatar
John Koleszar committed
521
522
  }
  fprintf(statsfile, "\n");
523

John Koleszar's avatar
John Koleszar committed
524
  fclose(statsfile);
525
526
}

527
static void update_reference_segmentation_map(VP9_COMP *cpi) {
Ronald S. Bultje's avatar
Ronald S. Bultje committed
528
529
530
531
532
  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;

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

543
static void set_default_lf_deltas(struct loopfilter *lf) {
544
545
546
547
548
  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
549

John Koleszar's avatar
John Koleszar committed
550
  // Test of ref frame deltas
551
552
553
554
  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
555

556
557
  lf->mode_deltas[0] = 0;   // Zero
  lf->mode_deltas[1] = 0;   // New mv
John Koleszar's avatar
John Koleszar committed
558
559
}

560
561
static void set_rd_speed_thresholds(VP9_COMP *cpi, int mode, int speed) {
  SPEED_FEATURES *sf = &cpi->sf;
562
  int speed_multiplier = speed + 1;
563
564
565
  int i;

  // Set baseline threshold values
566
567
  for (i = 0; i < MAX_MODES; ++i)
    sf->thresh_mult[i] = mode == 0 ? -500 : 0;
568
569

  sf->thresh_mult[THR_NEARESTMV] = 0;
570
571
572
  sf->thresh_mult[THR_NEARESTG] = 0;
  sf->thresh_mult[THR_NEARESTA] = 0;

Paul Wilkins's avatar
Paul Wilkins committed
573
574
  sf->thresh_mult[THR_NEWMV] += speed_multiplier * 1000;
  sf->thresh_mult[THR_COMP_NEARESTLA] += speed_multiplier * 1000;
575
  sf->thresh_mult[THR_NEARMV] += speed_multiplier * 1000;
Paul Wilkins's avatar
Paul Wilkins committed
576
  sf->thresh_mult[THR_COMP_NEARESTGA] += speed_multiplier * 1000;
577

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

Paul Wilkins's avatar
Paul Wilkins committed
580
581
582
  sf->thresh_mult[THR_NEWG] += speed_multiplier * 1000;
  sf->thresh_mult[THR_NEWA] += speed_multiplier * 1000;
  sf->thresh_mult[THR_NEARA] += speed_multiplier * 1000;
583

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

586
  sf->thresh_mult[THR_COMP_NEARLA] += speed_multiplier * 1500;
Paul Wilkins's avatar
Paul Wilkins committed
587
588
  sf->thresh_mult[THR_COMP_NEWLA] += speed_multiplier * 2000;
  sf->thresh_mult[THR_NEARG] += speed_multiplier * 1000;
589
  sf->thresh_mult[THR_COMP_NEARGA] += speed_multiplier * 1500;
Paul Wilkins's avatar
Paul Wilkins committed
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
  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;
613

614
  if (cpi->sf.skip_lots_of_modes) {
Jim Bankoski's avatar
Jim Bankoski committed
615
616
617
    for (i = 0; i < MAX_MODES; ++i)
      sf->thresh_mult[i] = INT_MAX;

Paul Wilkins's avatar
Paul Wilkins committed
618
619
    sf->thresh_mult[THR_DC] = 2000;
    sf->thresh_mult[THR_TM] = 2000;
Jim Bankoski's avatar
Jim Bankoski committed
620
621
622
    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
623
    sf->thresh_mult[THR_NEARESTMV] = 0;
Jim Bankoski's avatar
Jim Bankoski committed
624
625
626
627
628
    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
629
    sf->thresh_mult[THR_COMP_NEARESTLA] = 2000;
Jim Bankoski's avatar
Jim Bankoski committed
630
631
632
    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
633
634
635
    sf->recode_loop = 0;
  }

636
637
638
639
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
  /* 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;
  }
675
676
677
678
679
680
681
682
683

  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;
  }
684
685
}

686
void vp9_set_speed_features(VP9_COMP *cpi) {
John Koleszar's avatar
John Koleszar committed
687
  SPEED_FEATURES *sf = &cpi->sf;
688
  int mode = cpi->compressor_speed;
689
  int speed = cpi->speed;
John Koleszar's avatar
John Koleszar committed
690
  int i;
691

John Koleszar's avatar
John Koleszar committed
692
  // Only modes 0 and 1 supported for now in experimental code basae
693
694
  if (mode > 1)
    mode = 1;
John Koleszar's avatar
John Koleszar committed
695
696
697
698
699
700
701
702
703
704
705
706
707

  // 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;
708
709
  sf->subpel_search_method = SUBPEL_TREE;
  sf->subpel_iters_per_step = 2;
710
  sf->optimize_coefficients = !cpi->oxcf.lossless;
711
  sf->reduce_first_step_size = 0;
Paul Wilkins's avatar
Paul Wilkins committed
712
  sf->auto_mv_step_size = 0;
John Koleszar's avatar
John Koleszar committed
713
  sf->max_step_search_steps = MAX_MVSEARCH_STEPS;
714
  sf->comp_inter_joint_search_thresh = BLOCK_4X4;
715
  sf->adaptive_rd_thresh = 0;
Jim Bankoski's avatar
Jim Bankoski committed
716
  sf->use_lastframe_partitioning = 0;
Deb Mukherjee's avatar
Deb Mukherjee committed
717
  sf->tx_size_search_method = USE_FULL_RD;
718
  sf->use_lp32x32fdct = 0;
719
720
  sf->use_8tap_always = 0;
  sf->use_avoid_tested_higherror = 0;
Paul Wilkins's avatar
Paul Wilkins committed
721
  sf->reference_masking = 0;
722
  sf->skip_lots_of_modes = 0;
723
  sf->adjust_thresholds_by_speed = 0;
724
  sf->partition_by_variance = 0;
725
  sf->use_one_partition_size_always = 0;
Yaowu Xu's avatar
Yaowu Xu committed
726
  sf->less_rectangular_check = 0;
727
  sf->use_square_partition_only = 0;
728
729
730
731
732
  sf->auto_min_max_partition_size = 0;
  sf->auto_min_max_partition_interval = 0;
  sf->auto_min_max_partition_count = 0;
  sf->max_partition_size = BLOCK_64X64;
  sf->min_partition_size = BLOCK_4X4;
733
734
  sf->adjust_partitioning_from_last_frame = 0;
  sf->last_partitioning_redo_frequency = 4;
735
  sf->disable_splitmv = 0;
736
  sf->mode_search_skip_flags = 0;
737
  sf->disable_split_var_thresh = 0;
738
  sf->last_chroma_intra_mode = TM_PRED;
739
  sf->use_rd_breakout = 0;
740
  sf->skip_encode_sb = 0;
741
  sf->use_uv_intra_rd_estimate = 0;
742
  sf->use_fast_lpf_pick = 0;
743
  sf->using_small_partition_info = 0;
Paul Wilkins's avatar
Paul Wilkins committed
744
  // Skip any mode not chosen at size < X for all sizes > X
745
746
  // Hence BLOCK_64X64 (skip is off)
  sf->unused_mode_skip_lvl = BLOCK_64X64;
Paul Wilkins's avatar
Paul Wilkins committed
747

748
749
750
751
#if CONFIG_MULTIPLE_ARF
  // Switch segmentation off.
  sf->static_segmentation = 0;
#else
752
  sf->static_segmentation = 0;
753
#endif
John Koleszar's avatar
John Koleszar committed
754

755
  switch (mode) {
John Koleszar's avatar
John Koleszar committed
756
    case 0: // best quality mode
John Koleszar's avatar
John Koleszar committed
757
758
759
      sf->search_best_filter = SEARCH_BEST_FILTER;
      break;

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

        sf->auto_min_max_partition_size = 1;
        sf->auto_min_max_partition_interval = 1;
795
        sf->disable_split_var_thresh = 32;
Jim Bankoski's avatar
Jim Bankoski committed
796
      }
797
      if (speed == 2) {
Paul Wilkins's avatar
Paul Wilkins committed
798
        sf->adjust_thresholds_by_speed = 1;
Yaowu Xu's avatar
Yaowu Xu committed
799
        sf->less_rectangular_check  = 1;
800
        sf->use_square_partition_only = 1;
801
        sf->comp_inter_joint_search_thresh = BLOCK_SIZES;
Jim Bankoski's avatar
Jim Bankoski committed
802
        sf->use_lastframe_partitioning = 1;
803
804
        sf->adjust_partitioning_from_last_frame = 1;
        sf->last_partitioning_redo_frequency = 3;
805
        sf->unused_mode_skip_lvl = BLOCK_32X32;
806
807
808
809
810
811
812
813
        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 |
814
815
816
                                     FLAG_SKIP_COMP_REFMISMATCH |
                                     FLAG_SKIP_INTRA_LOWVAR |
                                     FLAG_EARLY_TERMINATE;
817
        sf->last_chroma_intra_mode = DC_PRED;
818
        sf->use_uv_intra_rd_estimate = 1;
819
        sf->use_rd_breakout = 1;
820
        sf->skip_encode_sb = 1;
821
        sf->use_lp32x32fdct = 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
        sf->search_method = SQUARE;
827
        sf->subpel_iters_per_step = 1;
828
        sf->use_fast_lpf_pick = 1;
829
        sf->disable_split_var_thresh = 64;
830
      }
831
      if (speed == 3) {
832
        sf->comp_inter_joint_search_thresh = BLOCK_SIZES;
833
        sf->partition_by_variance = 1;
Deb Mukherjee's avatar
Deb Mukherjee committed
834
835
836
837
838
        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);
839
840
841
        sf->mode_search_skip_flags = FLAG_SKIP_INTRA_DIRMISMATCH |
                                     FLAG_SKIP_INTRA_BESTINTER |
                                     FLAG_SKIP_COMP_BESTINTRA |
842
843
844
                                     FLAG_SKIP_COMP_REFMISMATCH |
                                     FLAG_SKIP_INTRA_LOWVAR |
                                     FLAG_EARLY_TERMINATE;
845
        sf->use_rd_breakout = 1;
846
        sf->skip_encode_sb = 1;
847
        sf->use_lp32x32fdct = 1;
848
        sf->disable_splitmv = 1;
849
        sf->auto_mv_step_size = 1;
850
        sf->search_method = BIGDIA;
851
        sf->subpel_iters_per_step = 1;
852
        sf->disable_split_var_thresh = 64;
853
      }
854
      if (speed == 4) {
855
        sf->comp_inter_joint_search_thresh = BLOCK_SIZES;
856
        sf->use_one_partition_size_always = 1;
857
        sf->always_this_block_size = BLOCK_16X16;
Deb Mukherjee's avatar
Deb Mukherjee committed
858
859
860
861
862
        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);
863
864
865
        sf->mode_search_skip_flags = FLAG_SKIP_INTRA_DIRMISMATCH |
                                     FLAG_SKIP_INTRA_BESTINTER |
                                     FLAG_SKIP_COMP_BESTINTRA |
866
867
868
                                     FLAG_SKIP_COMP_REFMISMATCH |
                                     FLAG_SKIP_INTRA_LOWVAR |
                                     FLAG_EARLY_TERMINATE;
869
        sf->use_rd_breakout = 1;
870
        sf->use_lp32x32fdct = 1;
Paul Wilkins's avatar
Paul Wilkins committed
871
        sf->optimize_coefficients = 0;
872
        sf->auto_mv_step_size = 1;
Paul Wilkins's avatar
Paul Wilkins committed
873
874
        // sf->reduce_first_step_size = 1;
        // sf->reference_masking = 1;
875
876

        sf->disable_splitmv = 1;
877
        sf->search_method = HEX;
878
        sf->subpel_iters_per_step = 1;
879
        sf->disable_split_var_thresh = 64;
880
      }
881
882
883
      /*
      if (speed == 2) {
        sf->first_step = 0;
884
885
        sf->comp_inter_joint_search_thresh = BLOCK_8X8;
        sf->max_partition_size = BLOCK_16X16;
886
887
      }
      if (speed == 3) {
888
        sf->first_step = 0;
889
890
        sf->comp_inter_joint_search_thresh = BLOCK_B8X8;
        sf->min_partition_size = BLOCK_8X8;
891
892
      }
      */
893

Deb Mukherjee's avatar
Deb Mukherjee committed
894
      break;
John Koleszar's avatar
John Koleszar committed
895

John Koleszar's avatar
John Koleszar committed
896
  }; /* switch */
897

898