/* * Copyright (c) 2010 The WebM project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree.
*/
/* vp8 uses 10,000,000 ticks/second as time stamp */ #define TICKS_PER_SEC 10000000
typedefstruct { int kf_indicated; unsignedint frames_since_key; unsignedint frames_since_golden; int filter_level; int frames_till_gf_update_due; int recent_ref_frame_usage[MAX_REF_FRAMES];
MV_CONTEXT mvc[2]; int mvcosts[2][MVvals + 1];
#ifdef MODE_STATS int y_modes[5]; int uv_modes[4]; int b_modes[10]; int inter_y_modes[10]; int inter_uv_modes[4]; int inter_b_modes[10]; #endif
typedefstruct { int RD;
SEARCH_METHODS search_method; int improved_quant; int improved_dct; int auto_filter; int recode_loop; int iterative_sub_pixel; int half_pixel_search; int quarter_pixel_search; int thresh_mult[MAX_MODES]; int max_step_search_steps; int first_step; int optimize_coefficients;
int use_fastquant_for_pick; int no_skip_block4x4_search; int improved_mv_pred;
} SPEED_FEATURES;
typedefstruct {
MACROBLOCK mb; int segment_counts[MAX_MB_SEGMENTS]; int totalrate;
} MB_ROW_COMP;
unsignedint frames_till_alt_ref_frame; /* frame in src_buffers has been identified to be encoded as an alt ref */ int source_alt_ref_pending; /* an alt ref frame has been encoded and is usable */ int source_alt_ref_active; /* source of frame to encode is an exact copy of an alt ref frame */ int is_src_frame_alt_ref;
/* golden frame same as last frame ( short circuit gold searches) */ int gold_is_last; /* Alt reference frame same as last ( short circuit altref search) */ int alt_is_last; /* don't do both alt and gold search ( just do gold). */ int gold_is_alt;
int frames_since_golden; /* Count down till next GF */ int frames_till_gf_update_due;
/* GF interval chosen when we coded the last GF */ int current_gf_interval;
/* Total bits overspent because of GF boost (cumulative) */ int gf_overspend_bits;
/* Used in the few frames following a GF to recover the extra bits * spent in that GF
*/ int non_gf_bitrate_adjustment;
/* Extra bits spent on key frames that need to be recovered */ int kf_overspend_bits;
/* Current number of bit s to try and recover on each inter frame. */ int kf_bitrate_adjustment; int max_gf_interval; int baseline_gf_interval; int active_arnr_frames;
int64_t key_frame_count; int prior_key_frame_distance[KEY_FRAME_CONTEXT]; /* Current section per frame bandwidth target */ int per_frame_bandwidth; /* Average frame size target for clip */ int av_per_frame_bandwidth; /* Minimum allocation that should be used for any frame */ int min_frame_bandwidth; 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;
int worst_quality; int active_worst_quality; int best_quality; int active_best_quality;
int cq_target_quality;
int drop_frames_allowed; /* Are we permitted to drop frames? */ int drop_frame; /* Drop this frame? */ #ifdefined(DROP_UNCODED_FRAMES) int drop_frame_count; #endif
int target_bandwidth; /* bits per second */ struct vpx_codec_pkt_list *output_pkt_list;
#if 0 /* Experimental code for lagged and one pass */
ONEPASS_FRAMESTATS one_pass_frame_stats[MAX_LAG_BUFFERS]; int one_pass_frame_index; #endif
int decimation_factor; int decimation_count;
/* for real time encoding */ int avg_encode_time; /* microsecond */ int avg_pick_mode_time; /* microsecond */ int Speed; int compressor_speed;
int auto_gold; int auto_adjust_gold_quantizer; int auto_worst_q; int cpu_used; int pass;
int prob_intra_coded; int prob_last_coded; int prob_gf_coded; int prob_skip_false; int last_skip_false_probs[3]; int last_skip_probs_q[3]; int recent_ref_frame_usage[MAX_REF_FRAMES];
int this_frame_percent_intra; int last_frame_percent_intra;
int ref_frame_flags;
SPEED_FEATURES sf;
/* Count ZEROMV on all reference frames. */ int zeromv_count; int lf_zeromv_pct;
/* Video conferencing cyclic refresh mode flags. This is a mode * designed to clean up the background over time in live encoding * scenarious. It uses segmentation.
*/ int cyclic_refresh_mode_enabled; int cyclic_refresh_mode_max_mbs_perframe; int cyclic_refresh_mode_index; int cyclic_refresh_q; signedchar *cyclic_refresh_map; // Count on how many (consecutive) times a macroblock uses ZER0MV_LAST. unsignedchar *consec_zero_last; // Counter that is reset when a block is checked for a mode-bias against // ZEROMV_LASTREF. unsignedchar *consec_zero_last_mvbias;
// Frame counter for the temporal pattern. Counter is rest when the temporal // layers are changed dynamically (run-time change). unsignedint temporal_pattern_counter; // Temporal layer id. int temporal_layer_id;
// Measure of average squared difference between source and denoised signal. int mse_source_denoised;
int force_maxqp; int frames_since_last_drop_overshoot; int last_pred_err_mb;
// GF update for 1 pass cbr. int gf_update_onepass_cbr; int gf_interval_onepass_cbr; int gf_noboost_onepass_cbr;
#if CONFIG_MULTITHREAD /* multithread data */
vpx_atomic_int *mt_current_mb_col; int mt_current_mb_col_size; int mt_sync_range;
vpx_atomic_int b_multi_threaded; int encoding_thread_count; int b_lpf_running;
FRAME_CONTEXT lfc_n; /* last frame entropy */
FRAME_CONTEXT lfc_a; /* last alt ref entropy */
FRAME_CONTEXT lfc_g; /* last gold ref entropy */
struct twopass_rc { unsignedint section_intra_rating; double section_max_qfactor; unsignedint next_iiratio; unsignedint this_iiratio;
FIRSTPASS_STATS total_stats;
FIRSTPASS_STATS this_frame_stats;
FIRSTPASS_STATS *stats_in, *stats_in_end, *stats_in_start;
FIRSTPASS_STATS total_left_stats; 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 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; /* Remaining error from uncoded frames in a gf group. */ int gf_group_error_left; /* 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; /* Projected Bits available for a group including 1 GF or ARF */
int64_t gf_group_bits; /* Bits for the golden frame or ARF */ int gf_bits; int alt_extra_bits; double est_max_qcorrection_factor;
} twopass;
#if VP8_TEMPORAL_ALT_REF
YV12_BUFFER_CONFIG alt_ref_buffer;
YV12_BUFFER_CONFIG *frames[MAX_LAG_BUFFERS]; int fixed_divide[512]; #endif
#if CONFIG_MULTI_RES_ENCODING /* Number of MBs per row at lower-resolution level */ int mr_low_res_mb_cols; /* Indicate if lower-res mv info is available */ unsignedchar mr_low_res_mv_avail; #endif /* The frame number of each reference frames */ unsignedint current_ref_frames[MAX_REF_FRAMES]; // Closest reference frame to current frame.
MV_REFERENCE_FRAME closest_reference_frame;
struct rd_costs_struct { int mvcosts[2][MVvals + 1]; int mvsadcosts[2][MVfpvals + 1]; int mbmode_cost[2][MB_MODE_COUNT]; int intra_uv_mode_cost[2][MB_MODE_COUNT]; int bmode_costs[10][10][10]; int inter_bmode_costs[B_MODE_COUNT]; int token_costs[BLOCK_TYPES][COEF_BANDS][PREV_COEF_CONTEXTS]
[MAX_ENTROPY_TOKENS];
} rd_costs;
// Use the static threshold from ROI settings. int use_roi_static_threshold;
int ext_refresh_frame_flags_pending;
// Always update correction factor used for rate control after each frame for // realtime encoding. int rt_always_update_correction_factor;
// Flag to indicate frame may be dropped due to large expected overshoot, // and re-encoded on next frame at max_qp. int rt_drop_recode_on_overshoot;
} VP8_COMP;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.