/* * 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.
*/
typedefstruct { double intra_factor; double brightness_factor;
int64_t coded_error;
int64_t sr_coded_error;
int64_t frame_noise_energy;
int64_t intra_error; int intercount; int second_ref_count; double neutral_count; double intra_count_low; // Coded intra but low variance double intra_count_high; // Coded intra high variance int intra_skip_count; int image_data_start_row; int mvcount; int sum_mvr; int sum_mvr_abs; int sum_mvc; int sum_mvc_abs;
int64_t sum_mvrs;
int64_t sum_mvcs; int sum_in_vectors; int intra_smooth_count; int new_mv_count;
} FIRSTPASS_DATA;
int frame_start; int frame_end; // TODO(jingning): The array size of arf_stack could be reduced. int arf_index_stack[MAX_LAG_BUFFERS * 2]; int top_arf_idx; int stack_size; int gf_group_size; int max_layer_depth; int allowed_max_layer_depth; int group_noise_energy;
// Structure to store the reference information from external RC. // Used to override reference frame decisions in libvpx.
ExternalRcReference ext_rc_ref[MAX_STATIC_GF_GROUP_LENGTH + 2]; int ref_frame_list[MAX_STATIC_GF_GROUP_LENGTH + 2][REFS_PER_FRAME];
} GF_GROUP;
typedefstruct { const FIRSTPASS_STATS *stats; int num_frames;
} FIRST_PASS_INFO;
// An indication of the content type of the current frame
FRAME_CONTENT_TYPE fr_content_type;
// 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 double kf_group_error_left;
double bpm_factor; int rolling_arf_group_target_bits; int rolling_arf_group_actual_bits;
int sr_update_lag; int kf_zeromotion_pct; int last_kfgroup_zeromotion_pct; int active_worst_quality; int baseline_active_worst_quality; int extend_minq; int extend_maxq; int extend_minq_fast; int arnr_strength_adjustment; int last_qindex_of_arf_layer[MAX_ARF_LAYERS];
GF_GROUP gf_group;
// Vizeir project experimental two pass rate control parameters. // When |use_vizier_rc_params| is 1, the following parameters will // be overwritten by pass in values. Otherwise, they are initialized // by default values. int use_vizier_rc_params; double active_wq_factor; double err_per_mb; double sr_default_decay_limit; double sr_diff_factor; double kf_err_per_mb; double kf_frame_min_boost; double kf_frame_max_boost_first; // Max for first kf in a chunk. double kf_frame_max_boost_subs; // Max for subsequent mid chunk kfs. double kf_max_total_boost; double gf_max_total_boost; double gf_frame_max_boost; double zm_factor;
} TWO_PASS;
// Post encode update of the rate control parameters for 2-pass void vp9_twopass_postencode_update(struct VP9_COMP *cpi);
void calculate_coded_size(struct VP9_COMP *cpi, int *scaled_frame_width, int *scaled_frame_height);
struct VP9EncoderConfig; int vp9_get_frames_to_next_key(conststruct VP9EncoderConfig *oxcf, const TWO_PASS *const twopass, int kf_show_idx, int min_gf_interval); #if CONFIG_RATE_CTRL /* Call this function to get info about the next group of pictures. * This function should be called after vp9_create_compressor() when encoding * starts or after vp9_get_compressed_data() when the encoding process of * the last group of pictures is just finished.
*/ void vp9_get_next_group_of_picture(conststruct VP9_COMP *cpi, int *first_is_key_frame, int *use_alt_ref, int *coding_frame_count, int *first_show_idx, int *last_gop_use_alt_ref);
/*!\brief Call this function before coding a new group of pictures to get * information about it. * \param[in] oxcf Encoder config * \param[in] twopass Twopass info * \param[in] frame_info Frame info * \param[in] rc Rate control state * \param[in] show_idx Show index of the first frame in the group * \param[in] multi_layer_arf Is multi-layer alternate reference used * \param[in] allow_alt_ref Is alternate reference allowed * \param[in] first_is_key_frame Is the first frame in the group a key frame * \param[in] last_gop_use_alt_ref Does the last group use alternate reference * * \param[out] use_alt_ref Does this group use alternate reference * * \return Returns coding frame count
*/ int vp9_get_gop_coding_frame_count(conststruct VP9EncoderConfig *oxcf, const TWO_PASS *const twopass, const FRAME_INFO *frame_info, const RATE_CONTROL *rc, int show_idx, int multi_layer_arf, int allow_alt_ref, int first_is_key_frame, int last_gop_use_alt_ref, int *use_alt_ref);
int vp9_get_coding_frame_num(conststruct VP9EncoderConfig *oxcf, const TWO_PASS *const twopass, const FRAME_INFO *frame_info, int multi_layer_arf, int allow_alt_ref);
/*!\brief Compute a key frame binary map indicates whether key frames appear * in the corresponding positions. The passed in key_frame_map must point to an * integer array with length equal to twopass->first_pass_info.num_frames, * which is the number of show frames in the video.
*/ void vp9_get_key_frame_map(conststruct VP9EncoderConfig *oxcf, const TWO_PASS *const twopass, int *key_frame_map); #endif// CONFIG_RATE_CTRL
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.