summaryrefslogtreecommitdiff
path: root/vp9
diff options
context:
space:
mode:
Diffstat (limited to 'vp9')
-rw-r--r--vp9/encoder/vp9_firstpass.c14
-rw-r--r--vp9/encoder/vp9_firstpass.h8
-rw-r--r--vp9/simple_encode.cc7
-rw-r--r--vp9/simple_encode.h7
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);