ref: 93834facfb9715b1eafec761cdeca91dde1dce1b
parent: a1c0c95c8c6dbab14c1223cdfdd0dc62022c6444
author: angiebird <angiebird@google.com>
date: Wed Feb 26 11:43:50 EST 2020
Add init/update_frame_indexes() We will init and update current_video_frame and current_frame_coding_index in the functions. So it's easier to keep track of when the frame indexes are updated. Change-Id: Id6ba46643f8923348bb4f81c5dd9ace553244057
--- a/vp9/common/vp9_onyxc_int.h
+++ b/vp9/common/vp9_onyxc_int.h
@@ -226,7 +226,16 @@
unsigned int frame_context_idx; /* Context to use/update */
FRAME_COUNTS counts;
+ // TODO(angiebird): current_video_frame/current_frame_coding_index into a
+ // structure
unsigned int current_video_frame;
+#if CONFIG_RATE_CTRL
+ // Each show or no show frame is assigned with a coding index based on its
+ // coding order (starting from zero).
+
+ // Current frame's coding index.
+ int current_frame_coding_index;
+#endif
BITSTREAM_PROFILE profile;
// VPX_BITS_8 in profile 0 or 1, VPX_BITS_10 or VPX_BITS_12 in profile 2 or 3.
@@ -253,6 +262,22 @@
int lf_row;
} VP9_COMMON;
+
+static INLINE void init_frame_indexes(VP9_COMMON *cm) {
+ cm->current_video_frame = 0;
+#if CONFIG_RATE_CTRL
+ cm->current_frame_coding_index = 0;
+#endif // CONFIG_RATE_CTRL
+}
+
+static INLINE void update_frame_indexes(VP9_COMMON *cm, int show_frame) {
+ if (show_frame) {
+ ++cm->current_video_frame;
+ }
+#if CONFIG_RATE_CTRL
+ ++cm->current_frame_coding_index;
+#endif // CONFIG_RATE_CTRL
+}
typedef struct {
int frame_width;
--- a/vp9/decoder/vp9_decoder.c
+++ b/vp9/decoder/vp9_decoder.c
@@ -188,7 +188,7 @@
memset(&cm->ref_frame_map, -1, sizeof(cm->ref_frame_map));
memset(&cm->next_ref_frame_map, -1, sizeof(cm->next_ref_frame_map));
- cm->current_video_frame = 0;
+ init_frame_indexes(cm);
pbi->ready_for_new_data = 1;
pbi->common.buffer_pool = pool;
--- a/vp9/encoder/vp9_encoder.c
+++ b/vp9/encoder/vp9_encoder.c
@@ -2311,7 +2311,7 @@
vp9_rc_init(&cpi->oxcf, oxcf->pass, &cpi->rc);
- cm->current_video_frame = 0;
+ init_frame_indexes(cm);
cpi->partition_search_skippable_frame = 0;
cpi->tile_data = NULL;
@@ -5342,7 +5342,7 @@
vp9_swap_mi_and_prev_mi(cm);
// Don't increment frame counters if this was an altref buffer
// update not a real frame
- ++cm->current_video_frame;
+ update_frame_indexes(cm, cm->show_frame);
if (cpi->use_svc) vp9_inc_frame_in_layer(cpi);
}
--- a/vp9/encoder/vp9_firstpass.c
+++ b/vp9/encoder/vp9_firstpass.c
@@ -1478,7 +1478,8 @@
fclose(recon_file);
}
- ++cm->current_video_frame;
+ // In the first pass, every frame is considered as a show frame.
+ update_frame_indexes(cm, /*show_frame=*/1);
if (cpi->use_svc) vp9_inc_frame_in_layer(cpi);
}