| Index: source/libvpx/vp9/encoder/vp9_onyx_int.h
|
| ===================================================================
|
| --- source/libvpx/vp9/encoder/vp9_onyx_int.h (revision 240950)
|
| +++ source/libvpx/vp9/encoder/vp9_onyx_int.h (working copy)
|
| @@ -29,13 +29,7 @@
|
| #include "vp9/common/vp9_findnearmv.h"
|
| #include "vp9/encoder/vp9_lookahead.h"
|
|
|
| -// Experimental rate control switches
|
| -#if CONFIG_ONESHOTQ
|
| -#define ONE_SHOT_Q_ESTIMATE 0
|
| -#define STRICT_ONE_SHOT_Q 0
|
| -#endif
|
| #define DISABLE_RC_LONG_TERM_MEM 0
|
| -
|
| // #define MODE_TEST_HIT_STATS
|
|
|
| // #define SPEEDSTATS 1
|
| @@ -253,7 +247,6 @@
|
| int auto_mv_step_size;
|
| int optimize_coefficients;
|
| int static_segmentation;
|
| - int variance_adaptive_quantization;
|
| int comp_inter_joint_search_thresh;
|
| int adaptive_rd_thresh;
|
| int skip_encode_sb;
|
| @@ -277,6 +270,7 @@
|
| int using_small_partition_info;
|
| // TODO(jingning): combine the related motion search speed features
|
| int adaptive_motion_search;
|
| + int adaptive_pred_filter_type;
|
|
|
| // Implements various heuristics to skip searching modes
|
| // The heuristics selected are based on flags
|
| @@ -295,6 +289,59 @@
|
| int use_fast_coef_updates; // 0: 2-loop, 1: 1-loop, 2: 1-loop reduced
|
| } SPEED_FEATURES;
|
|
|
| +typedef struct {
|
| + // Rate targetting variables
|
| + int this_frame_target;
|
| + int projected_frame_size;
|
| + int sb64_target_rate;
|
| + int last_q[2]; // Separate values for Intra/Inter
|
| + int last_boosted_qindex; // Last boosted GF/KF/ARF q
|
| +
|
| + int gfu_boost;
|
| + int last_boost;
|
| + int kf_boost;
|
| +
|
| + double rate_correction_factor;
|
| + double key_frame_rate_correction_factor;
|
| + double gf_rate_correction_factor;
|
| +
|
| + unsigned int frames_since_golden;
|
| + int frames_till_gf_update_due; // Count down till next GF
|
| +
|
| + int max_gf_interval;
|
| + int baseline_gf_interval;
|
| +
|
| + int64_t key_frame_count;
|
| + int prior_key_frame_distance[KEY_FRAME_CONTEXT];
|
| + int per_frame_bandwidth; // Current section per frame bandwidth target
|
| + int av_per_frame_bandwidth; // Average frame size target for clip
|
| + int min_frame_bandwidth; // Minimum allocation used for any frame
|
| +
|
| + int ni_av_qi;
|
| + int ni_tot_qi;
|
| + int ni_frames;
|
| + int avg_frame_qindex;
|
| + double tot_q;
|
| + double avg_q;
|
| +
|
| + int buffer_level;
|
| + int bits_off_target;
|
| +
|
| + int rolling_target_bits;
|
| + int rolling_actual_bits;
|
| +
|
| + int long_rolling_target_bits;
|
| + int long_rolling_actual_bits;
|
| +
|
| + int64_t total_actual_bits;
|
| + int total_target_vs_actual; // debug stats
|
| +
|
| + int worst_quality;
|
| + int active_worst_quality;
|
| + int best_quality;
|
| + // int active_best_quality;
|
| +} RATE_CONTROL;
|
| +
|
| typedef struct VP9_COMP {
|
| DECLARE_ALIGNED(16, int16_t, y_quant[QINDEX_RANGE][8]);
|
| DECLARE_ALIGNED(16, int16_t, y_quant_shift[QINDEX_RANGE][8]);
|
| @@ -317,11 +364,10 @@
|
| VP9_COMMON common;
|
| VP9_CONFIG oxcf;
|
| struct rdcost_block_args rdcost_stack;
|
| -
|
| struct lookahead_ctx *lookahead;
|
| struct lookahead_entry *source;
|
| #if CONFIG_MULTIPLE_ARF
|
| - struct lookahead_entry *alt_ref_source[NUM_REF_FRAMES];
|
| + struct lookahead_entry *alt_ref_source[REF_FRAMES];
|
| #else
|
| struct lookahead_entry *alt_ref_source;
|
| #endif
|
| @@ -349,7 +395,7 @@
|
| int use_svc;
|
|
|
| #if CONFIG_MULTIPLE_ARF
|
| - int alt_ref_fb_idx[NUM_REF_FRAMES - 3];
|
| + int alt_ref_fb_idx[REF_FRAMES - 3];
|
| #endif
|
| int refresh_last_frame;
|
| int refresh_golden_frame;
|
| @@ -385,8 +431,8 @@
|
| int rd_thresh_sub8x8[MAX_SEGMENTS][BLOCK_SIZES][MAX_REFS];
|
| int rd_thresh_freq_sub8x8[BLOCK_SIZES][MAX_REFS];
|
|
|
| - int64_t rd_comp_pred_diff[NB_PREDICTION_TYPES];
|
| - int64_t rd_prediction_type_threshes[4][NB_PREDICTION_TYPES];
|
| + int64_t rd_comp_pred_diff[REFERENCE_MODES];
|
| + int64_t rd_prediction_type_threshes[4][REFERENCE_MODES];
|
| unsigned int intra_inter_count[INTRA_INTER_CONTEXTS][2];
|
| unsigned int comp_inter_count[COMP_INTER_CONTEXTS][2];
|
| unsigned int single_ref_count[REF_CONTEXTS][2][2];
|
| @@ -405,87 +451,29 @@
|
|
|
| CODING_CONTEXT coding_context;
|
|
|
| - // Rate targetting variables
|
| - int this_frame_target;
|
| - int projected_frame_size;
|
| - int last_q[2]; // Separate values for Intra/Inter
|
| - int last_boosted_qindex; // Last boosted GF/KF/ARF q
|
| -
|
| - double rate_correction_factor;
|
| - double key_frame_rate_correction_factor;
|
| - double gf_rate_correction_factor;
|
| -
|
| - unsigned int frames_since_golden;
|
| - int frames_till_gf_update_due; // Count down till next GF
|
| -
|
| - int gf_overspend_bits; // cumulative bits overspent because of GF boost
|
| -
|
| - int non_gf_bitrate_adjustment; // Following GF to recover extra bits spent
|
| -
|
| - int kf_overspend_bits; // Bits spent on key frames to be recovered on inters
|
| - int kf_bitrate_adjustment; // number of bits to recover on each inter frame.
|
| - int max_gf_interval;
|
| - int baseline_gf_interval;
|
| + int zbin_mode_boost;
|
| + int zbin_mode_boost_enabled;
|
| int active_arnr_frames; // <= cpi->oxcf.arnr_max_frames
|
| int active_arnr_strength; // <= cpi->oxcf.arnr_max_strength
|
|
|
| - int64_t key_frame_count;
|
| - int prior_key_frame_distance[KEY_FRAME_CONTEXT];
|
| - int per_frame_bandwidth; // Current section per frame bandwidth target
|
| - int av_per_frame_bandwidth; // Average frame size target for clip
|
| - int min_frame_bandwidth; // Minimum allocation used for any frame
|
| - int inter_frame_target;
|
| double output_framerate;
|
| int64_t last_time_stamp_seen;
|
| int64_t last_end_time_stamp_seen;
|
| int64_t first_time_stamp_ever;
|
|
|
| - int ni_av_qi;
|
| - int ni_tot_qi;
|
| - int ni_frames;
|
| - int avg_frame_qindex;
|
| - double tot_q;
|
| - double avg_q;
|
| + RATE_CONTROL rc;
|
|
|
| - int zbin_mode_boost;
|
| - int zbin_mode_boost_enabled;
|
| -
|
| - int64_t total_byte_count;
|
| -
|
| - int buffered_mode;
|
| -
|
| - int buffer_level;
|
| - int bits_off_target;
|
| -
|
| - int rolling_target_bits;
|
| - int rolling_actual_bits;
|
| -
|
| - int long_rolling_target_bits;
|
| - int long_rolling_actual_bits;
|
| -
|
| - int64_t total_actual_bits;
|
| - int total_target_vs_actual; // debug stats
|
| -
|
| - int worst_quality;
|
| - int active_worst_quality;
|
| - int best_quality;
|
| - int active_best_quality;
|
| -
|
| int cq_target_quality;
|
|
|
| int y_mode_count[4][INTRA_MODES];
|
| int y_uv_mode_count[INTRA_MODES][INTRA_MODES];
|
| - unsigned int partition_count[PARTITION_CONTEXTS][PARTITION_TYPES];
|
|
|
| nmv_context_counts NMVcount;
|
|
|
| - vp9_coeff_count coef_counts[TX_SIZES][BLOCK_TYPES];
|
| - vp9_coeff_probs_model frame_coef_probs[TX_SIZES][BLOCK_TYPES];
|
| - vp9_coeff_stats frame_branch_ct[TX_SIZES][BLOCK_TYPES];
|
| + vp9_coeff_count coef_counts[TX_SIZES][PLANE_TYPES];
|
| + vp9_coeff_probs_model frame_coef_probs[TX_SIZES][PLANE_TYPES];
|
| + vp9_coeff_stats frame_branch_ct[TX_SIZES][PLANE_TYPES];
|
|
|
| - int gfu_boost;
|
| - int last_boost;
|
| - int kf_boost;
|
| int kf_zeromotion_pct;
|
| int gf_zeromotion_pct;
|
|
|
| @@ -506,15 +494,9 @@
|
| int decimation_count;
|
|
|
| // for real time encoding
|
| - int avg_encode_time; // microsecond
|
| - int avg_pick_mode_time; // microsecond
|
| int speed;
|
| - unsigned int cpu_freq; // Mhz
|
| int compressor_speed;
|
|
|
| - int interquantizer;
|
| - int goldfreq;
|
| - int auto_worst_q;
|
| int cpu_used;
|
| int pass;
|
|
|
| @@ -529,17 +511,13 @@
|
| unsigned int max_mv_magnitude;
|
| int mv_step_param;
|
|
|
| - // Data used for real time conferencing mode to help determine if it
|
| - // would be good to update the gf
|
| - int inter_zz_count;
|
| - int gf_bad_count;
|
| - int gf_update_recommended;
|
| -
|
| unsigned char *segmentation_map;
|
|
|
| // segment threashold for encode breakout
|
| int segment_encode_breakout[MAX_SEGMENTS];
|
|
|
| + unsigned char *complexity_map;
|
| +
|
| unsigned char *active_map;
|
| unsigned int active_map_enabled;
|
|
|
| @@ -592,7 +570,6 @@
|
| int alt_extra_bits;
|
|
|
| int sr_update_lag;
|
| - double est_max_qcorrection_factor;
|
| } twopass;
|
|
|
| YV12_BUFFER_CONFIG alt_ref_buffer;
|
| @@ -707,8 +684,7 @@
|
|
|
| void vp9_encode_frame(VP9_COMP *cpi);
|
|
|
| -void vp9_pack_bitstream(VP9_COMP *cpi, unsigned char *dest,
|
| - unsigned long *size);
|
| +void vp9_pack_bitstream(VP9_COMP *cpi, uint8_t *dest, size_t *size);
|
|
|
| void vp9_activity_masking(VP9_COMP *cpi, MACROBLOCK *x);
|
|
|
| @@ -718,7 +694,7 @@
|
|
|
| void vp9_alloc_compressor_data(VP9_COMP *cpi);
|
|
|
| -int vp9_compute_qdelta(VP9_COMP *cpi, double qstart, double qtarget);
|
| +int vp9_compute_qdelta(const VP9_COMP *cpi, double qstart, double qtarget);
|
|
|
| static int get_token_alloc(int mb_rows, int mb_cols) {
|
| return mb_rows * mb_cols * (48 * 16 + 4);
|
|
|