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); |