• Home
  • History
  • Annotate
  • 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