Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Unified Diff: source/libvpx/vp8/encoder/onyx_int.h

Issue 7671004: Update libvpx snapshot to v0.9.7-p1 (Cayuga). (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/libvpx/
Patch Set: '' Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « source/libvpx/vp8/encoder/onyx_if.c ('k') | source/libvpx/vp8/encoder/parms.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« no previous file with comments | « source/libvpx/vp8/encoder/onyx_if.c ('k') | source/libvpx/vp8/encoder/parms.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698