X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fthird_party%2Flibvpx%2Fsource%2Flibvpx%2Fvp9%2Fencoder%2Fvp9_ratectrl.h;h=b1cc676091fabc8ff46b721f51102c7ef74416d9;hb=004985e17e624662a4c85c76a7654039dc83f028;hp=5dbc7d138d7ebe77cae6cb576de8930b23c65b1a;hpb=2f108dbacb161091e42a3479f4e171339b7e7623;p=platform%2Fframework%2Fweb%2Fcrosswalk.git diff --git a/src/third_party/libvpx/source/libvpx/vp9/encoder/vp9_ratectrl.h b/src/third_party/libvpx/source/libvpx/vp9/encoder/vp9_ratectrl.h index 5dbc7d1..b1cc676 100644 --- a/src/third_party/libvpx/source/libvpx/vp9/encoder/vp9_ratectrl.h +++ b/src/third_party/libvpx/source/libvpx/vp9/encoder/vp9_ratectrl.h @@ -12,15 +12,22 @@ #ifndef VP9_ENCODER_VP9_RATECTRL_H_ #define VP9_ENCODER_VP9_RATECTRL_H_ +#include "vpx/vpx_integer.h" + +#include "vp9/common/vp9_blockd.h" + #ifdef __cplusplus extern "C" { #endif -#define FRAME_OVERHEAD_BITS 200 +// Bits Per MB at different Q (Multiplied by 512) +#define BPER_MB_NORMBITS 9 typedef struct { // Rate targetting variables - int this_frame_target; + int base_frame_target; // A baseline frame target before adjustment + // for previous under or over shoot. + int this_frame_target; // Actual frame target after rc adjustment. int projected_frame_size; int sb64_target_rate; int last_q[3]; // Separate values for Intra/Inter/ARF-GF @@ -37,6 +44,7 @@ typedef struct { int frames_since_golden; int frames_till_gf_update_due; int max_gf_interval; + int static_scene_max_gf_interval; int baseline_gf_interval; int frames_to_key; int frames_since_key; @@ -46,19 +54,20 @@ typedef struct { int source_alt_ref_active; int is_src_frame_alt_ref; - int av_per_frame_bandwidth; // Average frame size target for clip - int min_frame_bandwidth; // Minimum allocation used for any frame - int max_frame_bandwidth; // Maximum burst rate allowed for a frame. + int avg_frame_bandwidth; // Average frame size target for clip + int min_frame_bandwidth; // Minimum allocation used for any frame + int max_frame_bandwidth; // Maximum burst rate allowed for a frame. int ni_av_qi; int ni_tot_qi; int ni_frames; - int avg_frame_qindex[3]; // 0 - KEY, 1 - INTER, 2 - ARF/GF + int avg_frame_qindex[3]; // 0 - KEY, 1 - INTER, 2 - ARF/GF double tot_q; double avg_q; int64_t buffer_level; int64_t bits_off_target; + int64_t vbr_bits_off_target; int decimation_factor; int decimation_count; @@ -70,7 +79,8 @@ typedef struct { int long_rolling_actual_bits; int64_t total_actual_bits; - int total_target_vs_actual; // debug stats + int64_t total_target_bits; + int64_t total_target_vs_actual; int worst_quality; int best_quality; @@ -78,17 +88,14 @@ typedef struct { } RATE_CONTROL; struct VP9_COMP; +struct VP9EncoderConfig; -void vp9_save_coding_context(struct VP9_COMP *cpi); -void vp9_restore_coding_context(struct VP9_COMP *cpi); - -void vp9_setup_key_frame(struct VP9_COMP *cpi); -void vp9_setup_inter_frame(struct VP9_COMP *cpi); +void vp9_rc_init(const struct VP9EncoderConfig *oxcf, int pass, + RATE_CONTROL *rc); double vp9_convert_qindex_to_q(int qindex); -// initialize luts for minq -void vp9_rc_init_minq_luts(void); +void vp9_rc_init_minq_luts(); // Generally at the high level, the following flow is expected // to be enforced for rate control: @@ -120,8 +127,7 @@ void vp9_rc_get_svc_params(struct VP9_COMP *cpi); // Post encode update of the rate control parameters based // on bytes used -void vp9_rc_postencode_update(struct VP9_COMP *cpi, - uint64_t bytes_used); +void vp9_rc_postencode_update(struct VP9_COMP *cpi, uint64_t bytes_used); // Post encode update of the rate control parameters for dropped frames void vp9_rc_postencode_update_drop_frame(struct VP9_COMP *cpi); @@ -161,6 +167,17 @@ int vp9_rc_clamp_pframe_target_size(const struct VP9_COMP *const cpi, // This function is called only from the vp9_rc_get_..._params() functions. void vp9_rc_set_frame_target(struct VP9_COMP *cpi, int target); +// Computes a q delta (in "q index" terms) to get from a starting q value +// to a target q value +int vp9_compute_qdelta(const RATE_CONTROL *rc, double qstart, double qtarget); + +// Computes a q delta (in "q index" terms) to get from a starting q value +// to a value that should equate to the given rate ratio. +int vp9_compute_qdelta_by_rate(const RATE_CONTROL *rc, FRAME_TYPE frame_type, + int qindex, double rate_target_ratio); + +void vp9_rc_update_framerate(struct VP9_COMP *cpi); + #ifdef __cplusplus } // extern "C" #endif