• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #ifndef VPX_VP8_ENCODER_ONYX_INT_H_
12 #define VPX_VP8_ENCODER_ONYX_INT_H_
13 
14 #include <stdio.h>
15 #include "vpx_config.h"
16 #include "vp8/common/onyx.h"
17 #include "treewriter.h"
18 #include "tokenize.h"
19 #include "vp8/common/onyxc_int.h"
20 #include "vpx_dsp/variance.h"
21 #include "encodemb.h"
22 #include "vp8/encoder/quantize.h"
23 #include "vp8/common/entropy.h"
24 #include "vp8/common/threading.h"
25 #include "vpx_ports/mem.h"
26 #include "vpx/internal/vpx_codec_internal.h"
27 #include "vpx/vp8.h"
28 #include "mcomp.h"
29 #include "vp8/common/findnearmv.h"
30 #include "lookahead.h"
31 #if CONFIG_TEMPORAL_DENOISING
32 #include "vp8/encoder/denoising.h"
33 #endif
34 
35 #ifdef __cplusplus
36 extern "C" {
37 #endif
38 
39 #define MIN_GF_INTERVAL 4
40 #define DEFAULT_GF_INTERVAL 7
41 
42 #define KEY_FRAME_CONTEXT 5
43 
44 #define MAX_LAG_BUFFERS (CONFIG_REALTIME_ONLY ? 1 : 25)
45 
46 #define AF_THRESH 25
47 #define AF_THRESH2 100
48 #define ARF_DECAY_THRESH 12
49 
50 #define MIN_THRESHMULT 32
51 #define MAX_THRESHMULT 512
52 
53 #define GF_ZEROMV_ZBIN_BOOST 12
54 #define LF_ZEROMV_ZBIN_BOOST 6
55 #define MV_ZBIN_BOOST 4
56 #define ZBIN_OQ_MAX 192
57 
58 #define VP8_TEMPORAL_ALT_REF !CONFIG_REALTIME_ONLY
59 
60 typedef struct {
61   int kf_indicated;
62   unsigned int frames_since_key;
63   unsigned int frames_since_golden;
64   int filter_level;
65   int frames_till_gf_update_due;
66   int recent_ref_frame_usage[MAX_REF_FRAMES];
67 
68   MV_CONTEXT mvc[2];
69   int mvcosts[2][MVvals + 1];
70 
71 #ifdef MODE_STATS
72   int y_modes[5];
73   int uv_modes[4];
74   int b_modes[10];
75   int inter_y_modes[10];
76   int inter_uv_modes[4];
77   int inter_b_modes[10];
78 #endif
79 
80   vp8_prob ymode_prob[4], uv_mode_prob[3]; /* interframe intra mode probs */
81   vp8_prob kf_ymode_prob[4], kf_uv_mode_prob[3]; /* keyframe "" */
82 
83   int ymode_count[5], uv_mode_count[4]; /* intra MB type cts this frame */
84 
85   int count_mb_ref_frame_usage[MAX_REF_FRAMES];
86 
87   int this_frame_percent_intra;
88   int last_frame_percent_intra;
89 
90 } CODING_CONTEXT;
91 
92 typedef struct {
93   double frame;
94   double intra_error;
95   double coded_error;
96   double ssim_weighted_pred_err;
97   double pcnt_inter;
98   double pcnt_motion;
99   double pcnt_second_ref;
100   double pcnt_neutral;
101   double MVr;
102   double mvr_abs;
103   double MVc;
104   double mvc_abs;
105   double MVrv;
106   double MVcv;
107   double mv_in_out_count;
108   double new_mv_count;
109   double duration;
110   double count;
111 } FIRSTPASS_STATS;
112 
113 typedef struct {
114   int frames_so_far;
115   double frame_intra_error;
116   double frame_coded_error;
117   double frame_pcnt_inter;
118   double frame_pcnt_motion;
119   double frame_mvr;
120   double frame_mvr_abs;
121   double frame_mvc;
122   double frame_mvc_abs;
123 
124 } ONEPASS_FRAMESTATS;
125 
126 typedef enum {
127   THR_ZERO1 = 0,
128   THR_DC = 1,
129 
130   THR_NEAREST1 = 2,
131   THR_NEAR1 = 3,
132 
133   THR_ZERO2 = 4,
134   THR_NEAREST2 = 5,
135 
136   THR_ZERO3 = 6,
137   THR_NEAREST3 = 7,
138 
139   THR_NEAR2 = 8,
140   THR_NEAR3 = 9,
141 
142   THR_V_PRED = 10,
143   THR_H_PRED = 11,
144   THR_TM = 12,
145 
146   THR_NEW1 = 13,
147   THR_NEW2 = 14,
148   THR_NEW3 = 15,
149 
150   THR_SPLIT1 = 16,
151   THR_SPLIT2 = 17,
152   THR_SPLIT3 = 18,
153 
154   THR_B_PRED = 19
155 } THR_MODES;
156 
157 typedef enum { DIAMOND = 0, NSTEP = 1, HEX = 2 } SEARCH_METHODS;
158 
159 typedef struct {
160   int RD;
161   SEARCH_METHODS search_method;
162   int improved_quant;
163   int improved_dct;
164   int auto_filter;
165   int recode_loop;
166   int iterative_sub_pixel;
167   int half_pixel_search;
168   int quarter_pixel_search;
169   int thresh_mult[MAX_MODES];
170   int max_step_search_steps;
171   int first_step;
172   int optimize_coefficients;
173 
174   int use_fastquant_for_pick;
175   int no_skip_block4x4_search;
176   int improved_mv_pred;
177 
178 } SPEED_FEATURES;
179 
180 typedef struct {
181   MACROBLOCK mb;
182   int segment_counts[MAX_MB_SEGMENTS];
183   int totalrate;
184 } MB_ROW_COMP;
185 
186 typedef struct {
187   TOKENEXTRA *start;
188   TOKENEXTRA *stop;
189 } TOKENLIST;
190 
191 typedef struct {
192   int ithread;
193   void *ptr1;
194   void *ptr2;
195 } ENCODETHREAD_DATA;
196 typedef struct {
197   int ithread;
198   void *ptr1;
199 } LPFTHREAD_DATA;
200 
201 enum {
202   BLOCK_16X8,
203   BLOCK_8X16,
204   BLOCK_8X8,
205   BLOCK_4X4,
206   BLOCK_16X16,
207   BLOCK_MAX_SEGMENTS
208 };
209 
210 typedef struct {
211   /* Layer configuration */
212   double framerate;
213   int target_bandwidth;
214 
215   /* Layer specific coding parameters */
216   int64_t starting_buffer_level;
217   int64_t optimal_buffer_level;
218   int64_t maximum_buffer_size;
219   int64_t starting_buffer_level_in_ms;
220   int64_t optimal_buffer_level_in_ms;
221   int64_t maximum_buffer_size_in_ms;
222 
223   int avg_frame_size_for_layer;
224 
225   int64_t buffer_level;
226   int64_t bits_off_target;
227 
228   int64_t total_actual_bits;
229   int total_target_vs_actual;
230 
231   int worst_quality;
232   int active_worst_quality;
233   int best_quality;
234   int active_best_quality;
235 
236   int ni_av_qi;
237   int ni_tot_qi;
238   int ni_frames;
239   int avg_frame_qindex;
240 
241   double rate_correction_factor;
242   double key_frame_rate_correction_factor;
243   double gf_rate_correction_factor;
244 
245   int zbin_over_quant;
246 
247   int inter_frame_target;
248   int64_t total_byte_count;
249 
250   int filter_level;
251 
252   int frames_since_last_drop_overshoot;
253 
254   int force_maxqp;
255 
256   int last_frame_percent_intra;
257 
258   int count_mb_ref_frame_usage[MAX_REF_FRAMES];
259 
260 } LAYER_CONTEXT;
261 
262 typedef struct VP8_COMP {
263   DECLARE_ALIGNED(16, short, Y1quant[QINDEX_RANGE][16]);
264   DECLARE_ALIGNED(16, short, Y1quant_shift[QINDEX_RANGE][16]);
265   DECLARE_ALIGNED(16, short, Y1zbin[QINDEX_RANGE][16]);
266   DECLARE_ALIGNED(16, short, Y1round[QINDEX_RANGE][16]);
267 
268   DECLARE_ALIGNED(16, short, Y2quant[QINDEX_RANGE][16]);
269   DECLARE_ALIGNED(16, short, Y2quant_shift[QINDEX_RANGE][16]);
270   DECLARE_ALIGNED(16, short, Y2zbin[QINDEX_RANGE][16]);
271   DECLARE_ALIGNED(16, short, Y2round[QINDEX_RANGE][16]);
272 
273   DECLARE_ALIGNED(16, short, UVquant[QINDEX_RANGE][16]);
274   DECLARE_ALIGNED(16, short, UVquant_shift[QINDEX_RANGE][16]);
275   DECLARE_ALIGNED(16, short, UVzbin[QINDEX_RANGE][16]);
276   DECLARE_ALIGNED(16, short, UVround[QINDEX_RANGE][16]);
277 
278   DECLARE_ALIGNED(16, short, zrun_zbin_boost_y1[QINDEX_RANGE][16]);
279   DECLARE_ALIGNED(16, short, zrun_zbin_boost_y2[QINDEX_RANGE][16]);
280   DECLARE_ALIGNED(16, short, zrun_zbin_boost_uv[QINDEX_RANGE][16]);
281   DECLARE_ALIGNED(16, short, Y1quant_fast[QINDEX_RANGE][16]);
282   DECLARE_ALIGNED(16, short, Y2quant_fast[QINDEX_RANGE][16]);
283   DECLARE_ALIGNED(16, short, UVquant_fast[QINDEX_RANGE][16]);
284 
285   MACROBLOCK mb;
286   VP8_COMMON common;
287   vp8_writer bc[9]; /* one boolcoder for each partition */
288 
289   VP8_CONFIG oxcf;
290 
291   struct lookahead_ctx *lookahead;
292   struct lookahead_entry *source;
293   struct lookahead_entry *alt_ref_source;
294   struct lookahead_entry *last_source;
295 
296   YV12_BUFFER_CONFIG *Source;
297   YV12_BUFFER_CONFIG *un_scaled_source;
298   YV12_BUFFER_CONFIG scaled_source;
299   YV12_BUFFER_CONFIG *last_frame_unscaled_source;
300 
301   unsigned int frames_till_alt_ref_frame;
302   /* frame in src_buffers has been identified to be encoded as an alt ref */
303   int source_alt_ref_pending;
304   /* an alt ref frame has been encoded and is usable */
305   int source_alt_ref_active;
306   /* source of frame to encode is an exact copy of an alt ref frame */
307   int is_src_frame_alt_ref;
308 
309   /* golden frame same as last frame ( short circuit gold searches) */
310   int gold_is_last;
311   /* Alt reference frame same as last ( short circuit altref search) */
312   int alt_is_last;
313   /* don't do both alt and gold search ( just do gold). */
314   int gold_is_alt;
315 
316   YV12_BUFFER_CONFIG pick_lf_lvl_frame;
317 
318   TOKENEXTRA *tok;
319   unsigned int tok_count;
320 
321   unsigned int frames_since_key;
322   unsigned int key_frame_frequency;
323   unsigned int this_key_frame_forced;
324   unsigned int next_key_frame_forced;
325 
326   /* Ambient reconstruction err target for force key frames */
327   int ambient_err;
328 
329   unsigned int mode_check_freq[MAX_MODES];
330 
331   int rd_baseline_thresh[MAX_MODES];
332 
333   int RDMULT;
334   int RDDIV;
335 
336   CODING_CONTEXT coding_context;
337 
338   /* Rate targetting variables */
339   int64_t last_prediction_error;
340   int64_t last_intra_error;
341 
342   int this_frame_target;
343   int projected_frame_size;
344   int last_q[2]; /* Separate values for Intra/Inter */
345 
346   double rate_correction_factor;
347   double key_frame_rate_correction_factor;
348   double gf_rate_correction_factor;
349 
350   int frames_since_golden;
351   /* Count down till next GF */
352   int frames_till_gf_update_due;
353 
354   /* GF interval chosen when we coded the last GF */
355   int current_gf_interval;
356 
357   /* Total bits overspent becasue of GF boost (cumulative) */
358   int gf_overspend_bits;
359 
360   /* Used in the few frames following a GF to recover the extra bits
361    * spent in that GF
362    */
363   int non_gf_bitrate_adjustment;
364 
365   /* Extra bits spent on key frames that need to be recovered */
366   int kf_overspend_bits;
367 
368   /* Current number of bit s to try and recover on each inter frame. */
369   int kf_bitrate_adjustment;
370   int max_gf_interval;
371   int baseline_gf_interval;
372   int active_arnr_frames;
373 
374   int64_t key_frame_count;
375   int prior_key_frame_distance[KEY_FRAME_CONTEXT];
376   /* Current section per frame bandwidth target */
377   int per_frame_bandwidth;
378   /* Average frame size target for clip */
379   int av_per_frame_bandwidth;
380   /* Minimum allocation that should be used for any frame */
381   int min_frame_bandwidth;
382   int inter_frame_target;
383   double output_framerate;
384   int64_t last_time_stamp_seen;
385   int64_t last_end_time_stamp_seen;
386   int64_t first_time_stamp_ever;
387 
388   int ni_av_qi;
389   int ni_tot_qi;
390   int ni_frames;
391   int avg_frame_qindex;
392 
393   int64_t total_byte_count;
394 
395   int buffered_mode;
396 
397   double framerate;
398   double ref_framerate;
399   int64_t buffer_level;
400   int64_t bits_off_target;
401 
402   int rolling_target_bits;
403   int rolling_actual_bits;
404 
405   int long_rolling_target_bits;
406   int long_rolling_actual_bits;
407 
408   int64_t total_actual_bits;
409   int total_target_vs_actual; /* debug stats */
410 
411   int worst_quality;
412   int active_worst_quality;
413   int best_quality;
414   int active_best_quality;
415 
416   int cq_target_quality;
417 
418   int drop_frames_allowed; /* Are we permitted to drop frames? */
419   int drop_frame;          /* Drop this frame? */
420 #if defined(DROP_UNCODED_FRAMES)
421   int drop_frame_count;
422 #endif
423 
424   vp8_prob frame_coef_probs[BLOCK_TYPES][COEF_BANDS][PREV_COEF_CONTEXTS]
425                            [ENTROPY_NODES];
426   char update_probs[BLOCK_TYPES][COEF_BANDS][PREV_COEF_CONTEXTS][ENTROPY_NODES];
427 
428   unsigned int frame_branch_ct[BLOCK_TYPES][COEF_BANDS][PREV_COEF_CONTEXTS]
429                               [ENTROPY_NODES][2];
430 
431   int gfu_boost;
432   int kf_boost;
433   int last_boost;
434 
435   int target_bandwidth;
436   struct vpx_codec_pkt_list *output_pkt_list;
437 
438 #if 0
439     /* Experimental code for lagged and one pass */
440     ONEPASS_FRAMESTATS one_pass_frame_stats[MAX_LAG_BUFFERS];
441     int one_pass_frame_index;
442 #endif
443 
444   int decimation_factor;
445   int decimation_count;
446 
447   /* for real time encoding */
448   int avg_encode_time;    /* microsecond */
449   int avg_pick_mode_time; /* microsecond */
450   int Speed;
451   int compressor_speed;
452 
453   int auto_gold;
454   int auto_adjust_gold_quantizer;
455   int auto_worst_q;
456   int cpu_used;
457   int pass;
458 
459   int prob_intra_coded;
460   int prob_last_coded;
461   int prob_gf_coded;
462   int prob_skip_false;
463   int last_skip_false_probs[3];
464   int last_skip_probs_q[3];
465   int recent_ref_frame_usage[MAX_REF_FRAMES];
466 
467   int this_frame_percent_intra;
468   int last_frame_percent_intra;
469 
470   int ref_frame_flags;
471 
472   SPEED_FEATURES sf;
473 
474   /* Count ZEROMV on all reference frames. */
475   int zeromv_count;
476   int lf_zeromv_pct;
477 
478   unsigned char *skin_map;
479 
480   unsigned char *segmentation_map;
481   signed char segment_feature_data[MB_LVL_MAX][MAX_MB_SEGMENTS];
482   int segment_encode_breakout[MAX_MB_SEGMENTS];
483 
484   unsigned char *active_map;
485   unsigned int active_map_enabled;
486 
487   /* Video conferencing cyclic refresh mode flags. This is a mode
488    * designed to clean up the background over time in live encoding
489    * scenarious. It uses segmentation.
490    */
491   int cyclic_refresh_mode_enabled;
492   int cyclic_refresh_mode_max_mbs_perframe;
493   int cyclic_refresh_mode_index;
494   int cyclic_refresh_q;
495   signed char *cyclic_refresh_map;
496   // Count on how many (consecutive) times a macroblock uses ZER0MV_LAST.
497   unsigned char *consec_zero_last;
498   // Counter that is reset when a block is checked for a mode-bias against
499   // ZEROMV_LASTREF.
500   unsigned char *consec_zero_last_mvbias;
501 
502   // Frame counter for the temporal pattern. Counter is rest when the temporal
503   // layers are changed dynamically (run-time change).
504   unsigned int temporal_pattern_counter;
505   // Temporal layer id.
506   int temporal_layer_id;
507 
508   // Measure of average squared difference between source and denoised signal.
509   int mse_source_denoised;
510 
511   int force_maxqp;
512   int frames_since_last_drop_overshoot;
513 
514   // GF update for 1 pass cbr.
515   int gf_update_onepass_cbr;
516   int gf_interval_onepass_cbr;
517   int gf_noboost_onepass_cbr;
518 
519 #if CONFIG_MULTITHREAD
520   /* multithread data */
521   vpx_atomic_int *mt_current_mb_col;
522   int mt_sync_range;
523   vpx_atomic_int b_multi_threaded;
524   int encoding_thread_count;
525   int b_lpf_running;
526 
527   pthread_t *h_encoding_thread;
528   pthread_t h_filter_thread;
529 
530   MB_ROW_COMP *mb_row_ei;
531   ENCODETHREAD_DATA *en_thread_data;
532   LPFTHREAD_DATA lpf_thread_data;
533 
534   /* events */
535   sem_t *h_event_start_encoding;
536   sem_t *h_event_end_encoding;
537   sem_t h_event_start_lpf;
538   sem_t h_event_end_lpf;
539 #endif
540 
541   TOKENLIST *tplist;
542   unsigned int partition_sz[MAX_PARTITIONS];
543   unsigned char *partition_d[MAX_PARTITIONS];
544   unsigned char *partition_d_end[MAX_PARTITIONS];
545 
546   fractional_mv_step_fp *find_fractional_mv_step;
547   vp8_full_search_fn_t full_search_sad;
548   vp8_refining_search_fn_t refining_search_sad;
549   vp8_diamond_search_fn_t diamond_search_sad;
550   vp8_variance_fn_ptr_t fn_ptr[BLOCK_MAX_SEGMENTS];
551   uint64_t time_receive_data;
552   uint64_t time_compress_data;
553   uint64_t time_pick_lpf;
554   uint64_t time_encode_mb_row;
555 
556   int base_skip_false_prob[128];
557 
558   FRAME_CONTEXT lfc_n; /* last frame entropy */
559   FRAME_CONTEXT lfc_a; /* last alt ref entropy */
560   FRAME_CONTEXT lfc_g; /* last gold ref entropy */
561 
562   struct twopass_rc {
563     unsigned int section_intra_rating;
564     double section_max_qfactor;
565     unsigned int next_iiratio;
566     unsigned int this_iiratio;
567     FIRSTPASS_STATS total_stats;
568     FIRSTPASS_STATS this_frame_stats;
569     FIRSTPASS_STATS *stats_in, *stats_in_end, *stats_in_start;
570     FIRSTPASS_STATS total_left_stats;
571     int first_pass_done;
572     int64_t bits_left;
573     int64_t clip_bits_total;
574     double avg_iiratio;
575     double modified_error_total;
576     double modified_error_used;
577     double modified_error_left;
578     double kf_intra_err_min;
579     double gf_intra_err_min;
580     int frames_to_key;
581     int maxq_max_limit;
582     int maxq_min_limit;
583     int gf_decay_rate;
584     int static_scene_max_gf_interval;
585     int kf_bits;
586     /* Remaining error from uncoded frames in a gf group. */
587     int gf_group_error_left;
588     /* Projected total bits available for a key frame group of frames */
589     int64_t kf_group_bits;
590     /* Error score of frames still to be coded in kf group */
591     int64_t kf_group_error_left;
592     /* Projected Bits available for a group including 1 GF or ARF */
593     int64_t gf_group_bits;
594     /* Bits for the golden frame or ARF */
595     int gf_bits;
596     int alt_extra_bits;
597     double est_max_qcorrection_factor;
598   } twopass;
599 
600 #if VP8_TEMPORAL_ALT_REF
601   YV12_BUFFER_CONFIG alt_ref_buffer;
602   YV12_BUFFER_CONFIG *frames[MAX_LAG_BUFFERS];
603   int fixed_divide[512];
604 #endif
605 
606 #if CONFIG_INTERNAL_STATS
607   int count;
608   double total_y;
609   double total_u;
610   double total_v;
611   double total;
612   double total_sq_error;
613   double totalp_y;
614   double totalp_u;
615   double totalp_v;
616   double totalp;
617   double total_sq_error2;
618   int bytes;
619   double summed_quality;
620   double summed_weights;
621   unsigned int tot_recode_hits;
622 
623   int b_calculate_ssimg;
624 #endif
625   int b_calculate_psnr;
626 
627   /* Per MB activity measurement */
628   unsigned int activity_avg;
629   unsigned int *mb_activity_map;
630 
631   /* Record of which MBs still refer to last golden frame either
632    * directly or through 0,0
633    */
634   unsigned char *gf_active_flags;
635   int gf_active_count;
636 
637   int output_partition;
638 
639   /* Store last frame's MV info for next frame MV prediction */
640   int_mv *lfmv;
641   int *lf_ref_frame_sign_bias;
642   int *lf_ref_frame;
643 
644   /* force next frame to intra when kf_auto says so */
645   int force_next_frame_intra;
646 
647   int droppable;
648 
649   int initial_width;
650   int initial_height;
651 
652 #if CONFIG_TEMPORAL_DENOISING
653   VP8_DENOISER denoiser;
654 #endif
655 
656   /* Coding layer state variables */
657   unsigned int current_layer;
658   LAYER_CONTEXT layer_context[VPX_TS_MAX_LAYERS];
659 
660   int64_t frames_in_layer[VPX_TS_MAX_LAYERS];
661   int64_t bytes_in_layer[VPX_TS_MAX_LAYERS];
662   double sum_psnr[VPX_TS_MAX_LAYERS];
663   double sum_psnr_p[VPX_TS_MAX_LAYERS];
664   double total_error2[VPX_TS_MAX_LAYERS];
665   double total_error2_p[VPX_TS_MAX_LAYERS];
666   double sum_ssim[VPX_TS_MAX_LAYERS];
667   double sum_weights[VPX_TS_MAX_LAYERS];
668 
669   double total_ssimg_y_in_layer[VPX_TS_MAX_LAYERS];
670   double total_ssimg_u_in_layer[VPX_TS_MAX_LAYERS];
671   double total_ssimg_v_in_layer[VPX_TS_MAX_LAYERS];
672   double total_ssimg_all_in_layer[VPX_TS_MAX_LAYERS];
673 
674 #if CONFIG_MULTI_RES_ENCODING
675   /* Number of MBs per row at lower-resolution level */
676   int mr_low_res_mb_cols;
677   /* Indicate if lower-res mv info is available */
678   unsigned char mr_low_res_mv_avail;
679 #endif
680   /* The frame number of each reference frames */
681   unsigned int current_ref_frames[MAX_REF_FRAMES];
682   // Closest reference frame to current frame.
683   MV_REFERENCE_FRAME closest_reference_frame;
684 
685   struct rd_costs_struct {
686     int mvcosts[2][MVvals + 1];
687     int mvsadcosts[2][MVfpvals + 1];
688     int mbmode_cost[2][MB_MODE_COUNT];
689     int intra_uv_mode_cost[2][MB_MODE_COUNT];
690     int bmode_costs[10][10][10];
691     int inter_bmode_costs[B_MODE_COUNT];
692     int token_costs[BLOCK_TYPES][COEF_BANDS][PREV_COEF_CONTEXTS]
693                    [MAX_ENTROPY_TOKENS];
694   } rd_costs;
695 
696   // Use the static threshold from ROI settings.
697   int use_roi_static_threshold;
698 } VP8_COMP;
699 
700 void vp8_initialize_enc(void);
701 
702 void vp8_alloc_compressor_data(VP8_COMP *cpi);
703 int vp8_reverse_trans(int x);
704 void vp8_new_framerate(VP8_COMP *cpi, double framerate);
705 void vp8_loopfilter_frame(VP8_COMP *cpi, VP8_COMMON *cm);
706 
707 void vp8_pack_bitstream(VP8_COMP *cpi, unsigned char *dest,
708                         unsigned char *dest_end, size_t *size);
709 
710 void vp8_tokenize_mb(VP8_COMP *, MACROBLOCK *, TOKENEXTRA **);
711 
712 void vp8_set_speed_features(VP8_COMP *cpi);
713 
714 #if CONFIG_DEBUG
715 #define CHECK_MEM_ERROR(lval, expr)                                         \
716   do {                                                                      \
717     lval = (expr);                                                          \
718     if (!lval)                                                              \
719       vpx_internal_error(&cpi->common.error, VPX_CODEC_MEM_ERROR,           \
720                          "Failed to allocate " #lval " at %s:%d", __FILE__, \
721                          __LINE__);                                         \
722   } while (0)
723 #else
724 #define CHECK_MEM_ERROR(lval, expr)                               \
725   do {                                                            \
726     lval = (expr);                                                \
727     if (!lval)                                                    \
728       vpx_internal_error(&cpi->common.error, VPX_CODEC_MEM_ERROR, \
729                          "Failed to allocate " #lval);            \
730   } while (0)
731 #endif
732 #ifdef __cplusplus
733 }  // extern "C"
734 #endif
735 
736 #endif  // VPX_VP8_ENCODER_ONYX_INT_H_
737