Increase the frame number at show frames
Make the frame number increment consistent among key frame and
regular frames.
STATS_CHANGED
Change-Id: I306b54a70570f05af100b9b1452e14afd60ef223
diff --git a/av1/encoder/encode_strategy.c b/av1/encoder/encode_strategy.c
index 31a5731..3a83b76 100644
--- a/av1/encoder/encode_strategy.c
+++ b/av1/encoder/encode_strategy.c
@@ -1395,25 +1395,3 @@
return AOM_CODEC_OK;
}
-
-// Determine whether a frame is a keyframe arf. Will return 0 for fwd kf arf.
-// Note it depends on frame_since_key and gf_group, therefore should be called
-// after the gf group is defined, or otherwise a keyframe arf may still return
-// 0.
-int av1_check_keyframe_arf(int gf_index, GF_GROUP *gf_group,
- int frame_since_key) {
- if (gf_index >= gf_group->size) return 0;
- return gf_group->update_type[gf_index] == ARF_UPDATE &&
- gf_group->update_type[gf_index + 1] == OVERLAY_UPDATE &&
- frame_since_key == 0;
-}
-
-// Determine whether a frame is a keyframe overlay (will also return 0 for fwd
-// kf overlays).
-int av1_check_keyframe_overlay(int gf_index, GF_GROUP *gf_group,
- int frame_since_key) {
- if (gf_index < 1) return 0;
- return gf_group->update_type[gf_index - 1] == ARF_UPDATE &&
- gf_group->update_type[gf_index] == OVERLAY_UPDATE &&
- frame_since_key == 0;
-}
diff --git a/av1/encoder/encode_strategy.h b/av1/encoder/encode_strategy.h
index 4bafb0a..351e8a1 100644
--- a/av1/encoder/encode_strategy.h
+++ b/av1/encoder/encode_strategy.h
@@ -84,11 +84,6 @@
int is_forced_keyframe_pending(struct lookahead_ctx *lookahead,
const int up_to_index,
const COMPRESSOR_STAGE compressor_stage);
-
-int av1_check_keyframe_arf(int gf_index, GF_GROUP *gf_group,
- int frame_since_key);
-int av1_check_keyframe_overlay(int gf_index, GF_GROUP *gf_group,
- int frame_since_key);
/*!\endcond */
#ifdef __cplusplus
} // extern "C"
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index ef97b90..d1caa1e 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -2920,12 +2920,7 @@
cm->cur_frame->buf.y_crop_height);
}
- // current_frame->frame_number is incremented already for
- // keyframe overlays.
- if (!av1_check_keyframe_overlay(cpi->gf_group.index, &cpi->gf_group,
- cpi->rc.frames_since_key))
- ++current_frame->frame_number;
-
+ ++current_frame->frame_number;
return AOM_CODEC_OK;
}
@@ -3170,16 +3165,7 @@
// A droppable frame might not be shown but it always
// takes a space in the gf group. Therefore, even when
// it is not shown, we still need update the count down.
- if (cm->show_frame) {
- // Don't increment frame counters if this is a key frame overlay
- if (!av1_check_keyframe_overlay(cpi->gf_group.index, &cpi->gf_group,
- cpi->rc.frames_since_key))
- ++current_frame->frame_number;
- } else if (av1_check_keyframe_arf(cpi->gf_group.index, &cpi->gf_group,
- cpi->rc.frames_since_key)) {
- // TODO(bohanli) Hack here: increment kf overlay before it is encoded
- ++current_frame->frame_number;
- }
+ if (cm->show_frame) ++current_frame->frame_number;
return AOM_CODEC_OK;
}
@@ -3214,14 +3200,8 @@
if (current_frame->frame_type == KEY_FRAME && !cpi->no_show_fwd_kf)
current_frame->frame_number = 0;
- if (av1_check_keyframe_overlay(cpi->gf_group.index, &cpi->gf_group,
- cpi->rc.frames_since_key)) {
- current_frame->order_hint =
- current_frame->frame_number + frame_params->order_offset - 1;
- } else {
- current_frame->order_hint =
- current_frame->frame_number + frame_params->order_offset;
- }
+ current_frame->order_hint =
+ current_frame->frame_number + frame_params->order_offset;
current_frame->display_order_hint = current_frame->order_hint;
current_frame->order_hint %=
diff --git a/av1/encoder/pass2_strategy.c b/av1/encoder/pass2_strategy.c
index 27cdf50..1e8dad7 100644
--- a/av1/encoder/pass2_strategy.c
+++ b/av1/encoder/pass2_strategy.c
@@ -2672,7 +2672,7 @@
TWO_PASS *const twopass = &cpi->twopass;
if (cpi->oxcf.rc_cfg.mode != AOM_Q && current_frame->frame_number == 0 &&
- cpi->twopass.stats_buf_ctx->total_stats &&
+ cpi->gf_group.index == 0 && cpi->twopass.stats_buf_ctx->total_stats &&
cpi->twopass.stats_buf_ctx->total_left_stats) {
if (cpi->lap_enabled) {
/*
@@ -2726,10 +2726,6 @@
log((this_frame->frame_avg_wavelet_energy / num_mbs) + 1.0);
}
- // Update the total stats remaining structure.
- if (twopass->stats_buf_ctx->total_left_stats)
- subtract_stats(twopass->stats_buf_ctx->total_left_stats, this_frame);
-
// Set the frame content type flag.
if (this_frame->intra_skip_pct >= FC_ANIMATION_THRESH)
twopass->fr_content_type = FC_GRAPHICS_ANIMATION;
@@ -2907,7 +2903,6 @@
rc->frames_till_gf_update_due = rc->baseline_gf_interval;
assert(gf_group->index == 0);
-
#if ARF_STATS_OUTPUT
{
FILE *fpfile;
@@ -2925,8 +2920,14 @@
assert(gf_group->index < gf_group->size);
if (gf_group->update_type[gf_group->index] == ARF_UPDATE ||
- gf_group->update_type[gf_group->index] == INTNL_ARF_UPDATE)
+ gf_group->update_type[gf_group->index] == INTNL_ARF_UPDATE) {
reset_fpf_position(twopass, start_pos);
+ } else {
+ // Update the total stats remaining structure.
+ if (twopass->stats_buf_ctx->total_left_stats)
+ subtract_stats(twopass->stats_buf_ctx->total_left_stats,
+ &this_frame_copy);
+ }
frame_params->frame_type = gf_group->frame_type[gf_group->index];
diff --git a/av1/encoder/tpl_model.c b/av1/encoder/tpl_model.c
index a9ad30c..aa6fa6a 100644
--- a/av1/encoder/tpl_model.c
+++ b/av1/encoder/tpl_model.c
@@ -977,11 +977,7 @@
frame_params.show_existing_frame =
frame_update_type == INTNL_OVERLAY_UPDATE ||
frame_update_type == OVERLAY_UPDATE;
- frame_params.frame_type =
- (frame_update_type == KF_UPDATE ||
- av1_check_keyframe_arf(gf_index, gf_group, cpi->rc.frames_since_key))
- ? KEY_FRAME
- : INTER_FRAME;
+ frame_params.frame_type = gf_group->frame_type[gf_index];
if (frame_update_type == LF_UPDATE)
*pframe_qindex = gf_group->q_val[gf_index];