diff options
Diffstat (limited to 'vp9')
-rw-r--r-- | vp9/encoder/vp9_firstpass.c | 14 | ||||
-rw-r--r-- | vp9/encoder/vp9_firstpass.h | 8 | ||||
-rw-r--r-- | vp9/simple_encode.cc | 7 | ||||
-rw-r--r-- | vp9/simple_encode.h | 7 |
4 files changed, 26 insertions, 10 deletions
diff --git a/vp9/encoder/vp9_firstpass.c b/vp9/encoder/vp9_firstpass.c index acc4be3fa..57ab583cf 100644 --- a/vp9/encoder/vp9_firstpass.c +++ b/vp9/encoder/vp9_firstpass.c @@ -3068,10 +3068,10 @@ static int test_candidate_kf(const FIRST_PASS_INFO *first_pass_info, #define MAX_KF_TOT_BOOST 5400 #endif -static int get_frames_to_next_key(const VP9EncoderConfig *oxcf, - const FRAME_INFO *frame_info, - const FIRST_PASS_INFO *first_pass_info, - int kf_show_idx, int min_gf_interval) { +int vp9_get_frames_to_next_key(const VP9EncoderConfig *oxcf, + const FRAME_INFO *frame_info, + const FIRST_PASS_INFO *first_pass_info, + int kf_show_idx, int min_gf_interval) { double recent_loop_decay[FRAMES_TO_CHECK_DECAY]; int j; int frames_to_key; @@ -3184,8 +3184,8 @@ static void find_next_key_frame(VP9_COMP *cpi, int kf_show_idx) { kf_mod_err = calc_norm_frame_score(oxcf, frame_info, keyframe_stats, mean_mod_score, av_err); - rc->frames_to_key = get_frames_to_next_key(oxcf, frame_info, first_pass_info, - kf_show_idx, rc->min_gf_interval); + rc->frames_to_key = vp9_get_frames_to_next_key( + oxcf, frame_info, first_pass_info, kf_show_idx, rc->min_gf_interval); // If there is a max kf interval set by the user we must obey it. // We already breakout of the loop above at 2x max. @@ -3648,7 +3648,7 @@ int vp9_get_coding_frame_num(const struct VP9EncoderConfig *oxcf, while (show_idx < first_pass_info->num_frames) { if (rc.frames_to_key == 0) { - rc.frames_to_key = get_frames_to_next_key( + rc.frames_to_key = vp9_get_frames_to_next_key( oxcf, frame_info, first_pass_info, show_idx, rc.min_gf_interval); arf_active_or_kf = 1; } else { diff --git a/vp9/encoder/vp9_firstpass.h b/vp9/encoder/vp9_firstpass.h index 408ff3a8b..cfbc143c3 100644 --- a/vp9/encoder/vp9_firstpass.h +++ b/vp9/encoder/vp9_firstpass.h @@ -13,9 +13,7 @@ #include <assert.h> -#if CONFIG_RATE_CTRL #include "vp9/common/vp9_onyxc_int.h" -#endif #include "vp9/encoder/vp9_lookahead.h" #include "vp9/encoder/vp9_ratectrl.h" @@ -248,8 +246,12 @@ 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); -#if CONFIG_RATE_CTRL struct VP9EncoderConfig; +int vp9_get_frames_to_next_key(const struct VP9EncoderConfig *oxcf, + const FRAME_INFO *frame_info, + const FIRST_PASS_INFO *first_pass_info, + int kf_show_idx, int min_gf_interval); +#if CONFIG_RATE_CTRL int vp9_get_coding_frame_num(const struct VP9EncoderConfig *oxcf, const FRAME_INFO *frame_info, const FIRST_PASS_INFO *first_pass_info, diff --git a/vp9/simple_encode.cc b/vp9/simple_encode.cc index f34df6801..6a35eb6bc 100644 --- a/vp9/simple_encode.cc +++ b/vp9/simple_encode.cc @@ -221,6 +221,13 @@ void SimpleEncode::EndEncode() { rewind(file_); } +int SimpleEncode::GetKeyFrameGroupSize(int key_frame_index) const { + const VP9_COMP *cpi = impl_ptr_->cpi; + return vp9_get_frames_to_next_key(&cpi->oxcf, &cpi->frame_info, + &cpi->twopass.first_pass_info, + key_frame_index, cpi->rc.min_gf_interval); +} + void SimpleEncode::EncodeFrame(EncodeFrameResult *encode_frame_result) { VP9_COMP *cpi = impl_ptr_->cpi; struct lookahead_ctx *lookahead = cpi->lookahead; diff --git a/vp9/simple_encode.h b/vp9/simple_encode.h index a05ef10cb..471b4e7a8 100644 --- a/vp9/simple_encode.h +++ b/vp9/simple_encode.h @@ -65,6 +65,13 @@ class SimpleEncode { // This function should be called after StartEncode() or EncodeFrame(). void EndEncode(); + // Given a key_frame_index, computes this key frame group's size. + // The key frame group size includes one key frame plus the number of + // following inter frames. Note that the key frame group size only counts the + // show frames. The number of no show frames like alternate refereces are not + // counted. + int GetKeyFrameGroupSize(int key_frame_index) const; + // Encodes a frame // This function should be called after StartEncode() and before EndEncode(). void EncodeFrame(EncodeFrameResult *encode_frame_result); |