| Index: source/libvpx/vp8/encoder/onyx_int.h | 
| =================================================================== | 
| --- source/libvpx/vp8/encoder/onyx_int.h	(revision 96967) | 
| +++ source/libvpx/vp8/encoder/onyx_int.h	(working copy) | 
| @@ -29,6 +29,7 @@ | 
| #include "mcomp.h" | 
| #include "temporal_filter.h" | 
| #include "vp8/common/findnearmv.h" | 
| +#include "lookahead.h" | 
|  | 
| //#define SPEEDSTATS 1 | 
| #define MIN_GF_INTERVAL             4 | 
| @@ -46,8 +47,8 @@ | 
| #define MIN_THRESHMULT  32 | 
| #define MAX_THRESHMULT  512 | 
|  | 
| -#define GF_ZEROMV_ZBIN_BOOST 24 | 
| -#define LF_ZEROMV_ZBIN_BOOST 12 | 
| +#define GF_ZEROMV_ZBIN_BOOST 12 | 
| +#define LF_ZEROMV_ZBIN_BOOST 6 | 
| #define MV_ZBIN_BOOST        4 | 
| #define ZBIN_OQ_MAX 192 | 
|  | 
| @@ -179,9 +180,6 @@ | 
| int half_pixel_search; | 
| int quarter_pixel_search; | 
| int thresh_mult[MAX_MODES]; | 
| -    int full_freq[2]; | 
| -    int min_fs_radius; | 
| -    int max_fs_radius; | 
| int max_step_search_steps; | 
| int first_step; | 
| int optimize_coefficients; | 
| @@ -217,15 +215,7 @@ | 
| void *ptr1; | 
| } LPFTHREAD_DATA; | 
|  | 
| -typedef struct | 
| -{ | 
| -    INT64  source_time_stamp; | 
| -    INT64  source_end_time_stamp; | 
|  | 
| -    DECLARE_ALIGNED(16, YV12_BUFFER_CONFIG, source_buffer); | 
| -    unsigned int source_frame_flags; | 
| -} SOURCE_SAMPLE; | 
| - | 
| typedef struct VP8_ENCODER_RTCD | 
| { | 
| VP8_COMMON_RTCD            *common; | 
| @@ -247,21 +237,21 @@ | 
| BLOCK_MAX_SEGMENTS | 
| }; | 
|  | 
| -typedef struct | 
| +typedef struct VP8_COMP | 
| { | 
|  | 
| DECLARE_ALIGNED(16, short, Y1quant[QINDEX_RANGE][16]); | 
| -    DECLARE_ALIGNED(16, short, Y1quant_shift[QINDEX_RANGE][16]); | 
| +    DECLARE_ALIGNED(16, unsigned char, Y1quant_shift[QINDEX_RANGE][16]); | 
| DECLARE_ALIGNED(16, short, Y1zbin[QINDEX_RANGE][16]); | 
| DECLARE_ALIGNED(16, short, Y1round[QINDEX_RANGE][16]); | 
|  | 
| DECLARE_ALIGNED(16, short, Y2quant[QINDEX_RANGE][16]); | 
| -    DECLARE_ALIGNED(16, short, Y2quant_shift[QINDEX_RANGE][16]); | 
| +    DECLARE_ALIGNED(16, unsigned char, Y2quant_shift[QINDEX_RANGE][16]); | 
| DECLARE_ALIGNED(16, short, Y2zbin[QINDEX_RANGE][16]); | 
| DECLARE_ALIGNED(16, short, Y2round[QINDEX_RANGE][16]); | 
|  | 
| DECLARE_ALIGNED(16, short, UVquant[QINDEX_RANGE][16]); | 
| -    DECLARE_ALIGNED(16, short, UVquant_shift[QINDEX_RANGE][16]); | 
| +    DECLARE_ALIGNED(16, unsigned char, UVquant_shift[QINDEX_RANGE][16]); | 
| DECLARE_ALIGNED(16, short, UVzbin[QINDEX_RANGE][16]); | 
| DECLARE_ALIGNED(16, short, UVround[QINDEX_RANGE][16]); | 
|  | 
| @@ -280,29 +270,24 @@ | 
|  | 
| VP8_CONFIG oxcf; | 
|  | 
| +    struct lookahead_ctx    *lookahead; | 
| +    struct lookahead_entry  *source; | 
| +    struct lookahead_entry  *alt_ref_source; | 
| + | 
| YV12_BUFFER_CONFIG *Source; | 
| YV12_BUFFER_CONFIG *un_scaled_source; | 
| -    INT64 source_time_stamp; | 
| -    INT64 source_end_time_stamp; | 
| -    unsigned int source_frame_flags; | 
| YV12_BUFFER_CONFIG scaled_source; | 
|  | 
| -    int source_buffer_count;    // number of src_buffers in use for lagged encoding | 
| -    int source_encode_index;    // index of buffer in src_buffer to encode | 
| int source_alt_ref_pending; // frame in src_buffers has been identified to be encoded as an alt ref | 
| int source_alt_ref_active;  // an alt ref frame has been encoded and is usable | 
|  | 
| -    int last_alt_ref_sei;       // index into src_buffers of frame used as alt reference | 
| int is_src_frame_alt_ref;   // source of frame to encode is an exact copy of an alt ref frame | 
| -    int is_next_src_alt_ref;    // source of next frame to encode is an exact copy of an alt ref frame | 
|  | 
| int gold_is_last; // golden frame same as last frame ( short circuit gold searches) | 
| int alt_is_last;  // Alt reference frame same as last ( short circuit altref search) | 
| int gold_is_alt;  // don't do both alt and gold search ( just do gold). | 
|  | 
| //int refresh_alt_ref_frame; | 
| -    SOURCE_SAMPLE src_buffer[MAX_LAG_BUFFERS]; | 
| - | 
| YV12_BUFFER_CONFIG last_frame_uf; | 
|  | 
| TOKENEXTRA *tok; | 
| @@ -322,17 +307,9 @@ | 
| unsigned int mode_chosen_counts[MAX_MODES]; | 
| unsigned int mbs_tested_so_far; | 
|  | 
| -    unsigned int check_freq[2]; | 
| -    unsigned int do_full[2]; | 
| - | 
| int rd_thresh_mult[MAX_MODES]; | 
| int rd_baseline_thresh[MAX_MODES]; | 
| int rd_threshes[MAX_MODES]; | 
| -    int mvcostbase; | 
| -    int mvcostmultiplier; | 
| -    int subseqblockweight; | 
| -    int errthresh; | 
| -    unsigned int activity_avg; | 
|  | 
| int RDMULT; | 
| int RDDIV ; | 
| @@ -340,21 +317,11 @@ | 
| CODING_CONTEXT coding_context; | 
|  | 
| // Rate targetting variables | 
| -    long long prediction_error; | 
| -    long long last_prediction_error; | 
| -    long long intra_error; | 
| -    long long last_intra_error; | 
| +    int64_t prediction_error; | 
| +    int64_t last_prediction_error; | 
| +    int64_t intra_error; | 
| +    int64_t last_intra_error; | 
|  | 
| -#if 0 | 
| -    // Experimental RD code | 
| -    long long frame_distortion; | 
| -    long long last_frame_distortion; | 
| -#endif | 
| - | 
| -    int last_mb_distortion; | 
| - | 
| -    int frames_since_auto_filter; | 
| - | 
| int this_frame_target; | 
| int projected_frame_size; | 
| int last_q[2];                   // Separate values for Intra/Inter | 
| @@ -362,53 +329,30 @@ | 
| double rate_correction_factor; | 
| double key_frame_rate_correction_factor; | 
| double gf_rate_correction_factor; | 
| -    double est_max_qcorrection_factor; | 
|  | 
| int frames_till_gf_update_due;      // Count down till next GF | 
| int current_gf_interval;          // GF interval chosen when we coded the last GF | 
|  | 
| int gf_overspend_bits;            // Total bits overspent becasue of GF boost (cumulative) | 
|  | 
| -    int gf_group_bits;                // Projected Bits available for a group of frames including 1 GF or ARF | 
| -    int gf_bits;                     // Bits for the golden frame or ARF - 2 pass only | 
| -    int mid_gf_extra_bits;             // A few extra bits for the frame half way between two gfs. | 
| - | 
| -    // Projected total bits available for a key frame group of frames | 
| -    long long kf_group_bits; | 
| - | 
| -    // Error score of frames still to be coded in kf group | 
| -    long long kf_group_error_left; | 
| - | 
| -    // Bits for the key frame in a key frame group - 2 pass only | 
| -    int kf_bits; | 
| - | 
| int non_gf_bitrate_adjustment;     // Used in the few frames following a GF to recover the extra bits spent in that GF | 
| -    int initial_gf_use;               // percentage use of gf 2 frames after gf | 
|  | 
| -    int gf_group_error_left;           // Remaining error from uncoded frames in a gf group. Two pass use only | 
| - | 
| int kf_overspend_bits;            // Extra bits spent on key frames that need to be recovered on inter frames | 
| int kf_bitrate_adjustment;        // Current number of bit s to try and recover on each inter frame. | 
| int max_gf_interval; | 
| -    int static_scene_max_gf_interval; | 
| int baseline_gf_interval; | 
| -    int gf_decay_rate; | 
| int active_arnr_frames;           // <= cpi->oxcf.arnr_max_frames | 
|  | 
| -    INT64 key_frame_count; | 
| -    INT64 tot_key_frame_bits; | 
| -    int prior_key_frame_size[KEY_FRAME_CONTEXT]; | 
| +    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 that should be used for any frame | 
| -    int last_key_frame_size; | 
| -    int intra_frame_target; | 
| int inter_frame_target; | 
| double output_frame_rate; | 
| -    long long last_time_stamp_seen; | 
| -    long long last_end_time_stamp_seen; | 
| -    long long first_time_stamp_ever; | 
| +    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; | 
| @@ -419,7 +363,7 @@ | 
| int zbin_mode_boost; | 
| int zbin_mode_boost_enabled; | 
|  | 
| -    INT64 total_byte_count; | 
| +    int64_t total_byte_count; | 
|  | 
| int buffered_mode; | 
|  | 
| @@ -432,7 +376,7 @@ | 
| int long_rolling_target_bits; | 
| int long_rolling_actual_bits; | 
|  | 
| -    long long total_actual_bits; | 
| +    int64_t total_actual_bits; | 
| int total_target_vs_actual;        // debug stats | 
|  | 
| int worst_quality; | 
| @@ -441,8 +385,6 @@ | 
| int active_best_quality; | 
|  | 
| int cq_target_quality; | 
| -    int maxq_max_limit; | 
| -    int maxq_min_limit; | 
|  | 
| int drop_frames_allowed;          // Are we permitted to drop frames? | 
| int drop_frame;                  // Drop this frame? | 
| @@ -456,45 +398,18 @@ | 
|  | 
| unsigned int MVcount [2] [MVvals];  /* (row,col) MV cts this frame */ | 
|  | 
| -    unsigned int coef_counts [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [vp8_coef_tokens];  /* for this frame */ | 
| -    //DECLARE_ALIGNED(16, int, coef_counts_backup [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [vp8_coef_tokens]);   //not used any more | 
| +    unsigned int coef_counts [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [MAX_ENTROPY_TOKENS];  /* for this frame */ | 
| +    //DECLARE_ALIGNED(16, int, coef_counts_backup [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [MAX_ENTROPY_TOKENS]);   //not used any more | 
| //save vp8_tree_probs_from_distribution result for each frame to avoid repeat calculation | 
| -    vp8_prob frame_coef_probs [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [vp8_coef_tokens-1]; | 
| -    unsigned int frame_branch_ct [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [vp8_coef_tokens-1][2]; | 
| +    vp8_prob frame_coef_probs [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [ENTROPY_NODES]; | 
| +    unsigned int frame_branch_ct [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [ENTROPY_NODES][2]; | 
|  | 
| -    /* Second compressed data partition contains coefficient data. */ | 
| - | 
| -    unsigned char *output_partition2; | 
| -    size_t output_partition2size; | 
| - | 
| -    int frames_to_key; | 
| int gfu_boost; | 
| int kf_boost; | 
| int last_boost; | 
| -    double total_error_left; | 
| -    double total_intra_error_left; | 
| -    double total_coded_error_left; | 
| -    double start_tot_err_left; | 
| -    double min_error; | 
| -    double kf_intra_err_min; | 
| -    double gf_intra_err_min; | 
|  | 
| -    double modified_error_total; | 
| -    double modified_error_used; | 
| -    double modified_error_left; | 
| -    double clip_bpe; | 
| -    double observed_bpe; | 
| - | 
| -    double avg_iiratio; | 
| - | 
| int target_bandwidth; | 
| -    long long bits_left; | 
| -    long long clip_bits_total; | 
| -    FIRSTPASS_STATS *total_stats; | 
| -    FIRSTPASS_STATS *this_frame_stats; | 
| -    FIRSTPASS_STATS *stats_in, *stats_in_end; | 
| struct vpx_codec_pkt_list  *output_pkt_list; | 
| -    int                          first_pass_done; | 
|  | 
| #if 0 | 
| // Experimental code for lagged and one pass | 
| @@ -515,14 +430,9 @@ | 
| int interquantizer; | 
| int auto_gold; | 
| int auto_adjust_gold_quantizer; | 
| -    int goldquantizer; | 
| int goldfreq; | 
| -    int auto_adjust_key_quantizer; | 
| -    int keyquantizer; | 
| int auto_worst_q; | 
| -    int filter_type; | 
| int cpu_used; | 
| -    int chroma_boost; | 
| int horiz_scale; | 
| int vert_scale; | 
| int pass; | 
| @@ -540,31 +450,11 @@ | 
| int this_frame_percent_intra; | 
| int last_frame_percent_intra; | 
|  | 
| -    int last_key_frame_q; | 
| -    int last_kffilt_lvl; | 
| - | 
| int ref_frame_flags; | 
|  | 
| SPEED_FEATURES sf; | 
| int error_bins[1024]; | 
|  | 
| -    int inter_lvl; | 
| -    int intra_lvl; | 
| -    int motion_lvl; | 
| -    int motion_speed; | 
| -    int motion_var; | 
| -    unsigned int next_iiratio; | 
| -    unsigned int this_iiratio; | 
| -    int this_frame_modified_error; | 
| - | 
| -    double norm_intra_err_per_mb; | 
| -    double norm_inter_err_per_mb; | 
| -    double norm_iidiff_per_mb; | 
| - | 
| -    int last_best_mode_index;          // Record of mode index chosen for previous macro block. | 
| -    int last_auto_filt_val; | 
| -    int last_auto_filt_q; | 
| - | 
| // 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; | 
| @@ -572,10 +462,6 @@ | 
| int skip_true_count; | 
| int skip_false_count; | 
|  | 
| -    int alt_qcount; | 
| - | 
| -    int ready_for_new_frame; | 
| - | 
| unsigned char *segmentation_map; | 
| signed char segment_feature_data[MB_LVL_MAX][MAX_MB_SEGMENTS];            // Segment data (can be deltas or absolute values) | 
| int  segment_encode_breakout[MAX_MB_SEGMENTS];                    // segment threashold for encode breakout | 
| @@ -594,7 +480,6 @@ | 
| // multithread data | 
| int * mt_current_mb_col; | 
| int mt_sync_range; | 
| -    int processor_core_count; | 
| int b_multi_threaded; | 
| int encoding_thread_count; | 
|  | 
| @@ -613,11 +498,13 @@ | 
| #endif | 
|  | 
| TOKENLIST *tplist; | 
| +    unsigned int partition_sz[MAX_PARTITIONS]; | 
| // end of multithread data | 
|  | 
|  | 
| fractional_mv_step_fp *find_fractional_mv_step; | 
| vp8_full_search_fn_t full_search_sad; | 
| +    vp8_refining_search_fn_t refining_search_sad; | 
| vp8_diamond_search_fn_t diamond_search_sad; | 
| vp8_variance_fn_ptr_t fn_ptr[BLOCK_MAX_SEGMENTS]; | 
| unsigned int time_receive_data; | 
| @@ -625,25 +512,60 @@ | 
| unsigned int time_pick_lpf; | 
| unsigned int time_encode_mb_row; | 
|  | 
| -    unsigned int tempdata1; | 
| -    unsigned int tempdata2; | 
| - | 
| int base_skip_false_prob[128]; | 
| -    unsigned int section_intra_rating; | 
|  | 
| -    double section_max_qfactor; | 
| +    struct twopass_rc | 
| +    { | 
| +        unsigned int section_intra_rating; | 
| +        double section_max_qfactor; | 
| +        unsigned int next_iiratio; | 
| +        unsigned int this_iiratio; | 
| +        FIRSTPASS_STATS *total_stats; | 
| +        FIRSTPASS_STATS *this_frame_stats; | 
| +        FIRSTPASS_STATS *stats_in, *stats_in_end, *stats_in_start; | 
| +        int first_pass_done; | 
| +        int64_t bits_left; | 
| +        int64_t clip_bits_total; | 
| +        double avg_iiratio; | 
| +        double modified_error_total; | 
| +        double modified_error_used; | 
| +        double modified_error_left; | 
| +        double total_error_left; | 
| +        double total_intra_error_left; | 
| +        double total_coded_error_left; | 
| +        double start_tot_err_left; | 
| +        double kf_intra_err_min; | 
| +        double gf_intra_err_min; | 
| +        int frames_to_key; | 
| +        int maxq_max_limit; | 
| +        int maxq_min_limit; | 
| +        int gf_decay_rate; | 
| +        int static_scene_max_gf_interval; | 
| +        int kf_bits; | 
| +        int gf_group_error_left;           // Remaining error from uncoded frames in a gf group. Two pass use only | 
|  | 
| +        // Projected total bits available for a key frame group of frames | 
| +        int64_t kf_group_bits; | 
|  | 
| +        // Error score of frames still to be coded in kf group | 
| +        int64_t kf_group_error_left; | 
| + | 
| +        int gf_group_bits;                // Projected Bits available for a group of frames including 1 GF or ARF | 
| +        int gf_bits;                     // Bits for the golden frame or ARF - 2 pass only | 
| +        int mid_gf_extra_bits;             // A few extra bits for the frame half way between two gfs. | 
| +        double est_max_qcorrection_factor; | 
| +    } twopass; | 
| + | 
| #if CONFIG_RUNTIME_CPU_DETECT | 
| VP8_ENCODER_RTCD            rtcd; | 
| #endif | 
| #if VP8_TEMPORAL_ALT_REF | 
| -    SOURCE_SAMPLE alt_ref_buffer; | 
| +    YV12_BUFFER_CONFIG alt_ref_buffer; | 
| YV12_BUFFER_CONFIG *frames[MAX_LAG_BUFFERS]; | 
| int fixed_divide[512]; | 
| #endif | 
|  | 
| -#if CONFIG_PSNR | 
| +#if CONFIG_INTERNAL_STATS | 
| int    count; | 
| double total_y; | 
| double total_u; | 
| @@ -670,10 +592,18 @@ | 
| #endif | 
| int b_calculate_psnr; | 
|  | 
| +    // Per MB activity measurement | 
| +    unsigned int activity_avg; | 
| +    unsigned int * mb_activity_map; | 
| +    int * mb_norm_activity_map; | 
|  | 
| -    unsigned char *gf_active_flags;   // Record of which MBs still refer to last golden frame either directly or through 0,0 | 
| +    // Record of which MBs still refer to last golden frame either | 
| +    // directly or through 0,0 | 
| +    unsigned char *gf_active_flags; | 
| int gf_active_count; | 
|  | 
| +    int output_partition; | 
| + | 
| //Store last frame's MV info for next frame MV prediction | 
| int_mv *lfmv; | 
| int *lf_ref_frame_sign_bias; | 
| @@ -682,6 +612,7 @@ | 
| #if CONFIG_REALTIME_ONLY | 
| int force_next_frame_intra; /* force next frame to intra when kf_auto says so */ | 
| #endif | 
| +    int droppable; | 
| } VP8_COMP; | 
|  | 
| void control_data_rate(VP8_COMP *cpi); | 
| @@ -690,7 +621,7 @@ | 
|  | 
| void vp8_pack_bitstream(VP8_COMP *cpi, unsigned char *dest, unsigned long *size); | 
|  | 
| -unsigned int vp8_activity_masking(VP8_COMP *cpi, MACROBLOCK *x); | 
| +void vp8_activity_masking(VP8_COMP *cpi, MACROBLOCK *x); | 
|  | 
| int rd_cost_intra_mb(MACROBLOCKD *x); | 
|  | 
|  |