1 /*
2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * 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.
9 */
10
11
12 #ifndef VP9_ENCODER_VP9_ONYX_INT_H_
13 #define VP9_ENCODER_VP9_ONYX_INT_H_
14
15 #include <stdio.h>
16 #include "./vpx_config.h"
17 #include "vp9/common/vp9_onyx.h"
18 #include "vp9/encoder/vp9_treewriter.h"
19 #include "vp9/encoder/vp9_tokenize.h"
20 #include "vp9/common/vp9_onyxc_int.h"
21 #include "vp9/encoder/vp9_variance.h"
22 #include "vp9/encoder/vp9_encodemb.h"
23 #include "vp9/encoder/vp9_quantize.h"
24 #include "vp9/common/vp9_entropy.h"
25 #include "vp9/common/vp9_entropymode.h"
26 #include "vpx_ports/mem.h"
27 #include "vpx/internal/vpx_codec_internal.h"
28 #include "vp9/encoder/vp9_mcomp.h"
29 #include "vp9/common/vp9_findnearmv.h"
30 #include "vp9/encoder/vp9_lookahead.h"
31
32 #define DISABLE_RC_LONG_TERM_MEM 0
33
34 // #define MODE_TEST_HIT_STATS
35
36 // #define SPEEDSTATS 1
37 #if CONFIG_MULTIPLE_ARF
38 // Set MIN_GF_INTERVAL to 1 for the full decomposition.
39 #define MIN_GF_INTERVAL 2
40 #else
41 #define MIN_GF_INTERVAL 4
42 #endif
43 #define DEFAULT_GF_INTERVAL 7
44
45 #define KEY_FRAME_CONTEXT 5
46
47 #define MAX_MODES 30
48 #define MAX_REFS 6
49
50 #define MIN_THRESHMULT 32
51 #define MAX_THRESHMULT 512
52
53 #define GF_ZEROMV_ZBIN_BOOST 0
54 #define LF_ZEROMV_ZBIN_BOOST 0
55 #define MV_ZBIN_BOOST 0
56 #define SPLIT_MV_ZBIN_BOOST 0
57 #define INTRA_ZBIN_BOOST 0
58
59 typedef struct {
60 int nmvjointcost[MV_JOINTS];
61 int nmvcosts[2][MV_VALS];
62 int nmvcosts_hp[2][MV_VALS];
63
64 vp9_prob segment_pred_probs[PREDICTION_PROBS];
65
66 unsigned char *last_frame_seg_map_copy;
67
68 // 0 = Intra, Last, GF, ARF
69 signed char last_ref_lf_deltas[MAX_REF_LF_DELTAS];
70 // 0 = ZERO_MV, MV
71 signed char last_mode_lf_deltas[MAX_MODE_LF_DELTAS];
72
73 int inter_mode_counts[INTER_MODE_CONTEXTS][INTER_MODES - 1][2];
74 FRAME_CONTEXT fc;
75 } CODING_CONTEXT;
76
77 typedef struct {
78 double frame;
79 double intra_error;
80 double coded_error;
81 double sr_coded_error;
82 double ssim_weighted_pred_err;
83 double pcnt_inter;
84 double pcnt_motion;
85 double pcnt_second_ref;
86 double pcnt_neutral;
87 double MVr;
88 double mvr_abs;
89 double MVc;
90 double mvc_abs;
91 double MVrv;
92 double MVcv;
93 double mv_in_out_count;
94 double new_mv_count;
95 double duration;
96 double count;
97 } FIRSTPASS_STATS;
98
99 typedef struct {
100 int frames_so_far;
101 double frame_intra_error;
102 double frame_coded_error;
103 double frame_pcnt_inter;
104 double frame_pcnt_motion;
105 double frame_mvr;
106 double frame_mvr_abs;
107 double frame_mvc;
108 double frame_mvc_abs;
109 } ONEPASS_FRAMESTATS;
110
111 typedef struct {
112 struct {
113 int err;
114 union {
115 int_mv mv;
116 MB_PREDICTION_MODE mode;
117 } m;
118 } ref[MAX_REF_FRAMES];
119 } MBGRAPH_MB_STATS;
120
121 typedef struct {
122 MBGRAPH_MB_STATS *mb_stats;
123 } MBGRAPH_FRAME_STATS;
124
125 // This enumerator type needs to be kept aligned with the mode order in
126 // const MODE_DEFINITION vp9_mode_order[MAX_MODES] used in the rd code.
127 typedef enum {
128 THR_NEARESTMV,
129 THR_NEARESTA,
130 THR_NEARESTG,
131
132 THR_DC,
133
134 THR_NEWMV,
135 THR_NEWA,
136 THR_NEWG,
137
138 THR_NEARMV,
139 THR_NEARA,
140 THR_COMP_NEARESTLA,
141 THR_COMP_NEARESTGA,
142
143 THR_TM,
144
145 THR_COMP_NEARLA,
146 THR_COMP_NEWLA,
147 THR_NEARG,
148 THR_COMP_NEARGA,
149 THR_COMP_NEWGA,
150
151 THR_ZEROMV,
152 THR_ZEROG,
153 THR_ZEROA,
154 THR_COMP_ZEROLA,
155 THR_COMP_ZEROGA,
156
157 THR_H_PRED,
158 THR_V_PRED,
159 THR_D135_PRED,
160 THR_D207_PRED,
161 THR_D153_PRED,
162 THR_D63_PRED,
163 THR_D117_PRED,
164 THR_D45_PRED,
165 } THR_MODES;
166
167 typedef enum {
168 THR_LAST,
169 THR_GOLD,
170 THR_ALTR,
171 THR_COMP_LA,
172 THR_COMP_GA,
173 THR_INTRA,
174 } THR_MODES_SUB8X8;
175
176 typedef enum {
177 DIAMOND = 0,
178 NSTEP = 1,
179 HEX = 2,
180 BIGDIA = 3,
181 SQUARE = 4
182 } SEARCH_METHODS;
183
184 typedef enum {
185 USE_FULL_RD = 0,
186 USE_LARGESTINTRA,
187 USE_LARGESTINTRA_MODELINTER,
188 USE_LARGESTALL
189 } TX_SIZE_SEARCH_METHOD;
190
191 typedef enum {
192 // Values should be powers of 2 so that they can be selected as bits of
193 // an integer flags field
194
195 // terminate search early based on distortion so far compared to
196 // qp step, distortion in the neighborhood of the frame, etc.
197 FLAG_EARLY_TERMINATE = 1,
198
199 // skips comp inter modes if the best so far is an intra mode
200 FLAG_SKIP_COMP_BESTINTRA = 2,
201
202 // skips comp inter modes if the best single intermode so far does
203 // not have the same reference as one of the two references being
204 // tested
205 FLAG_SKIP_COMP_REFMISMATCH = 4,
206
207 // skips oblique intra modes if the best so far is an inter mode
208 FLAG_SKIP_INTRA_BESTINTER = 8,
209
210 // skips oblique intra modes at angles 27, 63, 117, 153 if the best
211 // intra so far is not one of the neighboring directions
212 FLAG_SKIP_INTRA_DIRMISMATCH = 16,
213
214 // skips intra modes other than DC_PRED if the source variance
215 // is small
216 FLAG_SKIP_INTRA_LOWVAR = 32,
217 } MODE_SEARCH_SKIP_LOGIC;
218
219 typedef enum {
220 SUBPEL_ITERATIVE = 0,
221 SUBPEL_TREE = 1,
222 // Other methods to come
223 } SUBPEL_SEARCH_METHODS;
224
225 #define ALL_INTRA_MODES 0x3FF
226 #define INTRA_DC_ONLY 0x01
227 #define INTRA_DC_TM ((1 << TM_PRED) | (1 << DC_PRED))
228 #define INTRA_DC_H_V ((1 << DC_PRED) | (1 << V_PRED) | (1 << H_PRED))
229 #define INTRA_DC_TM_H_V (INTRA_DC_TM | (1 << V_PRED) | (1 << H_PRED))
230
231 typedef enum {
232 LAST_FRAME_PARTITION_OFF = 0,
233 LAST_FRAME_PARTITION_LOW_MOTION = 1,
234 LAST_FRAME_PARTITION_ALL = 2
235 } LAST_FRAME_PARTITION_METHOD;
236
237 typedef struct {
238 int RD;
239 SEARCH_METHODS search_method;
240 int auto_filter;
241 int recode_loop;
242 SUBPEL_SEARCH_METHODS subpel_search_method;
243 int subpel_iters_per_step;
244 int thresh_mult[MAX_MODES];
245 int thresh_mult_sub8x8[MAX_REFS];
246 int max_step_search_steps;
247 int reduce_first_step_size;
248 int auto_mv_step_size;
249 int optimize_coefficients;
250 int static_segmentation;
251 int variance_adaptive_quantization;
252 int comp_inter_joint_search_thresh;
253 int adaptive_rd_thresh;
254 int skip_encode_sb;
255 int skip_encode_frame;
256 LAST_FRAME_PARTITION_METHOD use_lastframe_partitioning;
257 TX_SIZE_SEARCH_METHOD tx_size_search_method;
258 int use_lp32x32fdct;
259 int use_avoid_tested_higherror;
260 int use_one_partition_size_always;
261 int less_rectangular_check;
262 int use_square_partition_only;
263 int mode_skip_start;
264 int reference_masking;
265 BLOCK_SIZE always_this_block_size;
266 int auto_min_max_partition_size;
267 BLOCK_SIZE min_partition_size;
268 BLOCK_SIZE max_partition_size;
269 int adjust_partitioning_from_last_frame;
270 int last_partitioning_redo_frequency;
271 int disable_split_mask;
272 int using_small_partition_info;
273 // TODO(jingning): combine the related motion search speed features
274 int adaptive_motion_search;
275
276 // Implements various heuristics to skip searching modes
277 // The heuristics selected are based on flags
278 // defined in the MODE_SEARCH_SKIP_HEURISTICS enum
279 unsigned int mode_search_skip_flags;
280 // A source variance threshold below which the split mode is disabled
281 unsigned int disable_split_var_thresh;
282 // A source variance threshold below which filter search is disabled
283 // Choose a very large value (UINT_MAX) to use 8-tap always
284 unsigned int disable_filter_search_var_thresh;
285 int intra_y_mode_mask[TX_SIZES];
286 int intra_uv_mode_mask[TX_SIZES];
287 int use_rd_breakout;
288 int use_uv_intra_rd_estimate;
289 int use_fast_lpf_pick;
290 int use_fast_coef_updates; // 0: 2-loop, 1: 1-loop, 2: 1-loop reduced
291 } SPEED_FEATURES;
292
293 typedef struct VP9_COMP {
294 DECLARE_ALIGNED(16, int16_t, y_quant[QINDEX_RANGE][8]);
295 DECLARE_ALIGNED(16, int16_t, y_quant_shift[QINDEX_RANGE][8]);
296 DECLARE_ALIGNED(16, int16_t, y_zbin[QINDEX_RANGE][8]);
297 DECLARE_ALIGNED(16, int16_t, y_round[QINDEX_RANGE][8]);
298
299 DECLARE_ALIGNED(16, int16_t, uv_quant[QINDEX_RANGE][8]);
300 DECLARE_ALIGNED(16, int16_t, uv_quant_shift[QINDEX_RANGE][8]);
301 DECLARE_ALIGNED(16, int16_t, uv_zbin[QINDEX_RANGE][8]);
302 DECLARE_ALIGNED(16, int16_t, uv_round[QINDEX_RANGE][8]);
303
304 #if CONFIG_ALPHA
305 DECLARE_ALIGNED(16, int16_t, a_quant[QINDEX_RANGE][8]);
306 DECLARE_ALIGNED(16, int16_t, a_quant_shift[QINDEX_RANGE][8]);
307 DECLARE_ALIGNED(16, int16_t, a_zbin[QINDEX_RANGE][8]);
308 DECLARE_ALIGNED(16, int16_t, a_round[QINDEX_RANGE][8]);
309 #endif
310
311 MACROBLOCK mb;
312 VP9_COMMON common;
313 VP9_CONFIG oxcf;
314 struct rdcost_block_args rdcost_stack;
315 struct lookahead_ctx *lookahead;
316 struct lookahead_entry *source;
317 #if CONFIG_MULTIPLE_ARF
318 struct lookahead_entry *alt_ref_source[NUM_REF_FRAMES];
319 #else
320 struct lookahead_entry *alt_ref_source;
321 #endif
322
323 YV12_BUFFER_CONFIG *Source;
324 YV12_BUFFER_CONFIG *un_scaled_source;
325 YV12_BUFFER_CONFIG scaled_source;
326
327 unsigned int frames_till_alt_ref_frame;
328 int source_alt_ref_pending;
329 int source_alt_ref_active;
330
331 int is_src_frame_alt_ref;
332
333 int gold_is_last; // gold same as last frame ( short circuit gold searches)
334 int alt_is_last; // Alt same as last ( short circuit altref search)
335 int gold_is_alt; // don't do both alt and gold search ( just do gold).
336
337 int scaled_ref_idx[3];
338 int lst_fb_idx;
339 int gld_fb_idx;
340 int alt_fb_idx;
341
342 int current_layer;
343 int use_svc;
344
345 #if CONFIG_MULTIPLE_ARF
346 int alt_ref_fb_idx[NUM_REF_FRAMES - 3];
347 #endif
348 int refresh_last_frame;
349 int refresh_golden_frame;
350 int refresh_alt_ref_frame;
351 YV12_BUFFER_CONFIG last_frame_uf;
352
353 TOKENEXTRA *tok;
354 unsigned int tok_count[4][1 << 6];
355
356
357 unsigned int frames_since_key;
358 unsigned int key_frame_frequency;
359 unsigned int this_key_frame_forced;
360 unsigned int next_key_frame_forced;
361 #if CONFIG_MULTIPLE_ARF
362 // Position within a frame coding order (including any additional ARF frames).
363 unsigned int sequence_number;
364 // Next frame in naturally occurring order that has not yet been coded.
365 int next_frame_in_order;
366 #endif
367
368 // Ambient reconstruction err target for force key frames
369 int ambient_err;
370
371 unsigned int mode_chosen_counts[MAX_MODES];
372 unsigned int sub8x8_mode_chosen_counts[MAX_REFS];
373 int64_t mode_skip_mask;
374 int ref_frame_mask;
375 int set_ref_frame_mask;
376
377 int rd_threshes[MAX_SEGMENTS][BLOCK_SIZES][MAX_MODES];
378 int rd_thresh_freq_fact[BLOCK_SIZES][MAX_MODES];
379 int rd_thresh_sub8x8[MAX_SEGMENTS][BLOCK_SIZES][MAX_REFS];
380 int rd_thresh_freq_sub8x8[BLOCK_SIZES][MAX_REFS];
381
382 int64_t rd_comp_pred_diff[NB_PREDICTION_TYPES];
383 int64_t rd_prediction_type_threshes[4][NB_PREDICTION_TYPES];
384 unsigned int intra_inter_count[INTRA_INTER_CONTEXTS][2];
385 unsigned int comp_inter_count[COMP_INTER_CONTEXTS][2];
386 unsigned int single_ref_count[REF_CONTEXTS][2][2];
387 unsigned int comp_ref_count[REF_CONTEXTS][2];
388
389 int64_t rd_tx_select_diff[TX_MODES];
390 // FIXME(rbultje) can this overflow?
391 int rd_tx_select_threshes[4][TX_MODES];
392
393 int64_t rd_filter_diff[SWITCHABLE_FILTER_CONTEXTS];
394 int64_t rd_filter_threshes[4][SWITCHABLE_FILTER_CONTEXTS];
395 int64_t rd_filter_cache[SWITCHABLE_FILTER_CONTEXTS];
396
397 int RDMULT;
398 int RDDIV;
399
400 CODING_CONTEXT coding_context;
401
402 // Rate targetting variables
403 int this_frame_target;
404 int projected_frame_size;
405 int last_q[2]; // Separate values for Intra/Inter
406 int last_boosted_qindex; // Last boosted GF/KF/ARF q
407
408 double rate_correction_factor;
409 double key_frame_rate_correction_factor;
410 double gf_rate_correction_factor;
411
412 unsigned int frames_since_golden;
413 int frames_till_gf_update_due; // Count down till next GF
414
415 int gf_overspend_bits; // cumulative bits overspent because of GF boost
416
417 int non_gf_bitrate_adjustment; // Following GF to recover extra bits spent
418
419 int kf_overspend_bits; // Bits spent on key frames to be recovered on inters
420 int kf_bitrate_adjustment; // number of bits to recover on each inter frame.
421 int max_gf_interval;
422 int baseline_gf_interval;
423 int active_arnr_frames; // <= cpi->oxcf.arnr_max_frames
424 int active_arnr_strength; // <= cpi->oxcf.arnr_max_strength
425
426 int64_t key_frame_count;
427 int prior_key_frame_distance[KEY_FRAME_CONTEXT];
428 int per_frame_bandwidth; // Current section per frame bandwidth target
429 int av_per_frame_bandwidth; // Average frame size target for clip
430 int min_frame_bandwidth; // Minimum allocation used for any frame
431 int inter_frame_target;
432 double output_framerate;
433 int64_t last_time_stamp_seen;
434 int64_t last_end_time_stamp_seen;
435 int64_t first_time_stamp_ever;
436
437 int ni_av_qi;
438 int ni_tot_qi;
439 int ni_frames;
440 int avg_frame_qindex;
441 double tot_q;
442 double avg_q;
443
444 int zbin_mode_boost;
445 int zbin_mode_boost_enabled;
446
447 int64_t total_byte_count;
448
449 int buffered_mode;
450
451 int buffer_level;
452 int bits_off_target;
453
454 int rolling_target_bits;
455 int rolling_actual_bits;
456
457 int long_rolling_target_bits;
458 int long_rolling_actual_bits;
459
460 int64_t total_actual_bits;
461 int total_target_vs_actual; // debug stats
462
463 int worst_quality;
464 int active_worst_quality;
465 int best_quality;
466 int active_best_quality;
467
468 int cq_target_quality;
469
470 int y_mode_count[4][INTRA_MODES];
471 int y_uv_mode_count[INTRA_MODES][INTRA_MODES];
472 unsigned int partition_count[PARTITION_CONTEXTS][PARTITION_TYPES];
473
474 nmv_context_counts NMVcount;
475
476 vp9_coeff_count coef_counts[TX_SIZES][BLOCK_TYPES];
477 vp9_coeff_probs_model frame_coef_probs[TX_SIZES][BLOCK_TYPES];
478 vp9_coeff_stats frame_branch_ct[TX_SIZES][BLOCK_TYPES];
479
480 int gfu_boost;
481 int last_boost;
482 int kf_boost;
483 int kf_zeromotion_pct;
484 int gf_zeromotion_pct;
485
486 int64_t target_bandwidth;
487 struct vpx_codec_pkt_list *output_pkt_list;
488
489 #if 0
490 // Experimental code for lagged and one pass
491 ONEPASS_FRAMESTATS one_pass_frame_stats[MAX_LAG_BUFFERS];
492 int one_pass_frame_index;
493 #endif
494 MBGRAPH_FRAME_STATS mbgraph_stats[MAX_LAG_BUFFERS];
495 int mbgraph_n_frames; // number of frames filled in the above
496 int static_mb_pct; // % forced skip mbs by segmentation
497 int seg0_progress, seg0_idx, seg0_cnt;
498
499 int decimation_factor;
500 int decimation_count;
501
502 // for real time encoding
503 int speed;
504 int compressor_speed;
505
506 int auto_worst_q;
507 int cpu_used;
508 int pass;
509
510 vp9_prob last_skip_false_probs[3][MBSKIP_CONTEXTS];
511 int last_skip_probs_q[3];
512
513 int ref_frame_flags;
514
515 SPEED_FEATURES sf;
516 int error_bins[1024];
517
518 unsigned int max_mv_magnitude;
519 int mv_step_param;
520
521 unsigned char *segmentation_map;
522
523 // segment threashold for encode breakout
524 int segment_encode_breakout[MAX_SEGMENTS];
525
526 unsigned char *active_map;
527 unsigned int active_map_enabled;
528
529 fractional_mv_step_fp *find_fractional_mv_step;
530 fractional_mv_step_comp_fp *find_fractional_mv_step_comp;
531 vp9_full_search_fn_t full_search_sad;
532 vp9_refining_search_fn_t refining_search_sad;
533 vp9_diamond_search_fn_t diamond_search_sad;
534 vp9_variance_fn_ptr_t fn_ptr[BLOCK_SIZES];
535 uint64_t time_receive_data;
536 uint64_t time_compress_data;
537 uint64_t time_pick_lpf;
538 uint64_t time_encode_sb_row;
539
540 struct twopass_rc {
541 unsigned int section_intra_rating;
542 unsigned int next_iiratio;
543 unsigned int this_iiratio;
544 FIRSTPASS_STATS total_stats;
545 FIRSTPASS_STATS this_frame_stats;
546 FIRSTPASS_STATS *stats_in, *stats_in_end, *stats_in_start;
547 FIRSTPASS_STATS total_left_stats;
548 int first_pass_done;
549 int64_t bits_left;
550 int64_t clip_bits_total;
551 double avg_iiratio;
552 double modified_error_total;
553 double modified_error_used;
554 double modified_error_left;
555 double kf_intra_err_min;
556 double gf_intra_err_min;
557 int frames_to_key;
558 int maxq_max_limit;
559 int maxq_min_limit;
560 int static_scene_max_gf_interval;
561 int kf_bits;
562 // Remaining error from uncoded frames in a gf group. Two pass use only
563 int64_t gf_group_error_left;
564
565 // Projected total bits available for a key frame group of frames
566 int64_t kf_group_bits;
567
568 // Error score of frames still to be coded in kf group
569 int64_t kf_group_error_left;
570
571 // Projected Bits available for a group of frames including 1 GF or ARF
572 int64_t gf_group_bits;
573 // Bits for the golden frame or ARF - 2 pass only
574 int gf_bits;
575 int alt_extra_bits;
576
577 int sr_update_lag;
578 double est_max_qcorrection_factor;
579 } twopass;
580
581 YV12_BUFFER_CONFIG alt_ref_buffer;
582 YV12_BUFFER_CONFIG *frames[MAX_LAG_BUFFERS];
583 int fixed_divide[512];
584
585 #if CONFIG_INTERNAL_STATS
586 int count;
587 double total_y;
588 double total_u;
589 double total_v;
590 double total;
591 double total_sq_error;
592 double totalp_y;
593 double totalp_u;
594 double totalp_v;
595 double totalp;
596 double total_sq_error2;
597 int bytes;
598 double summed_quality;
599 double summed_weights;
600 double summedp_quality;
601 double summedp_weights;
602 unsigned int tot_recode_hits;
603
604
605 double total_ssimg_y;
606 double total_ssimg_u;
607 double total_ssimg_v;
608 double total_ssimg_all;
609
610 int b_calculate_ssimg;
611 #endif
612 int b_calculate_psnr;
613
614 // Per MB activity measurement
615 unsigned int activity_avg;
616 unsigned int *mb_activity_map;
617 int *mb_norm_activity_map;
618 int output_partition;
619
620 /* force next frame to intra when kf_auto says so */
621 int force_next_frame_intra;
622
623 int droppable;
624
625 int dummy_packing; /* flag to indicate if packing is dummy */
626
627 unsigned int switchable_interp_count[SWITCHABLE_FILTER_CONTEXTS]
628 [SWITCHABLE_FILTERS];
629
630 unsigned int tx_stepdown_count[TX_SIZES];
631
632 int initial_width;
633 int initial_height;
634
635 int number_spatial_layers;
636 int enable_encode_breakout; // Default value is 1. From first pass stats,
637 // encode_breakout may be disabled.
638
639 #if CONFIG_MULTIPLE_ARF
640 // ARF tracking variables.
641 int multi_arf_enabled;
642 unsigned int frame_coding_order_period;
643 unsigned int new_frame_coding_order_period;
644 int frame_coding_order[MAX_LAG_BUFFERS * 2];
645 int arf_buffer_idx[MAX_LAG_BUFFERS * 3 / 2];
646 int arf_weight[MAX_LAG_BUFFERS];
647 int arf_buffered;
648 int this_frame_weight;
649 int max_arf_level;
650 #endif
651
652 #ifdef ENTROPY_STATS
653 int64_t mv_ref_stats[INTER_MODE_CONTEXTS][INTER_MODES - 1][2];
654 #endif
655
656
657 #ifdef MODE_TEST_HIT_STATS
658 // Debug / test stats
659 int64_t mode_test_hits[BLOCK_SIZES];
660 #endif
661
662 /* Y,U,V,(A) */
663 ENTROPY_CONTEXT *above_context[MAX_MB_PLANE];
664 ENTROPY_CONTEXT left_context[MAX_MB_PLANE][16];
665
666 PARTITION_CONTEXT *above_seg_context;
667 PARTITION_CONTEXT left_seg_context[8];
668 } VP9_COMP;
669
get_ref_frame_idx(VP9_COMP * cpi,MV_REFERENCE_FRAME ref_frame)670 static int get_ref_frame_idx(VP9_COMP *cpi, MV_REFERENCE_FRAME ref_frame) {
671 if (ref_frame == LAST_FRAME) {
672 return cpi->lst_fb_idx;
673 } else if (ref_frame == GOLDEN_FRAME) {
674 return cpi->gld_fb_idx;
675 } else {
676 return cpi->alt_fb_idx;
677 }
678 }
679
get_scale_ref_frame_idx(VP9_COMP * cpi,MV_REFERENCE_FRAME ref_frame)680 static int get_scale_ref_frame_idx(VP9_COMP *cpi,
681 MV_REFERENCE_FRAME ref_frame) {
682 if (ref_frame == LAST_FRAME) {
683 return 0;
684 } else if (ref_frame == GOLDEN_FRAME) {
685 return 1;
686 } else {
687 return 2;
688 }
689 }
690
691 void vp9_encode_frame(VP9_COMP *cpi);
692
693 void vp9_pack_bitstream(VP9_COMP *cpi, unsigned char *dest,
694 unsigned long *size);
695
696 void vp9_activity_masking(VP9_COMP *cpi, MACROBLOCK *x);
697
698 void vp9_set_speed_features(VP9_COMP *cpi);
699
700 int vp9_calc_ss_err(YV12_BUFFER_CONFIG *source, YV12_BUFFER_CONFIG *dest);
701
702 void vp9_alloc_compressor_data(VP9_COMP *cpi);
703
704 int vp9_compute_qdelta(VP9_COMP *cpi, double qstart, double qtarget);
705
get_token_alloc(int mb_rows,int mb_cols)706 static int get_token_alloc(int mb_rows, int mb_cols) {
707 return mb_rows * mb_cols * (48 * 16 + 4);
708 }
709
710 #endif // VP9_ENCODER_VP9_ONYX_INT_H_
711