ref: f6255dbb530d5a07851501851a4cea4ca563030a
parent: 16c0ec711c02062d10cf9ad53e1a4978792ecb43
author: Marco <[email protected]>
date: Wed Aug 5 09:53:26 EDT 2015
Bugfix for svc. Condition usage of rc.frames_since_golden to non-svc mode. rc.frames_since_golden, which is used in non-svc mode to add second reference, was causing, under certain condiiton, the turning off of golden reference for svc case. Change-Id: Icec644d235d0471e56d8ff73d6c37278bd6ecd3b
--- a/vp9/encoder/vp9_encodeframe.c
+++ b/vp9/encoder/vp9_encodeframe.c
@@ -3925,7 +3925,9 @@
}
vp9_zero(x->zcoeff_blk);
- if (cm->frame_type != KEY_FRAME && cpi->rc.frames_since_golden == 0)
+ if (cm->frame_type != KEY_FRAME &&
+ cpi->rc.frames_since_golden == 0 &&
+ !cpi->use_svc)
cpi->ref_frame_flags &= (~VP9_GOLD_FLAG);
if (sf->partition_search_type == SOURCE_VAR_BASED_PARTITION)
--- a/vp9/encoder/vp9_pickmode.c
+++ b/vp9/encoder/vp9_pickmode.c
@@ -1157,12 +1157,11 @@
vp9_denoiser_reset_frame_stats(ctx);
#endif
- if (cpi->rc.frames_since_golden == 0) {
+ if (cpi->rc.frames_since_golden == 0 && !cpi->use_svc) {
usable_ref_frame = LAST_FRAME;
} else {
usable_ref_frame = GOLDEN_FRAME;
}
-
for (ref_frame = LAST_FRAME; ref_frame <= usable_ref_frame; ++ref_frame) {
const YV12_BUFFER_CONFIG *yv12 = get_ref_frame_buffer(cpi, ref_frame);
--- a/vp9/encoder/vp9_ratectrl.c
+++ b/vp9/encoder/vp9_ratectrl.c
@@ -1339,13 +1339,15 @@
rc->total_target_vs_actual = rc->total_actual_bits - rc->total_target_bits;
- if (is_altref_enabled(cpi) && cpi->refresh_alt_ref_frame &&
- (cm->frame_type != KEY_FRAME))
- // Update the alternate reference frame stats as appropriate.
- update_alt_ref_frame_stats(cpi);
- else
- // Update the Golden frame stats as appropriate.
- update_golden_frame_stats(cpi);
+ if (!cpi->use_svc) {
+ if (is_altref_enabled(cpi) && cpi->refresh_alt_ref_frame &&
+ (cm->frame_type != KEY_FRAME))
+ // Update the alternate reference frame stats as appropriate.
+ update_alt_ref_frame_stats(cpi);
+ else
+ // Update the Golden frame stats as appropriate.
+ update_golden_frame_stats(cpi);
+ }
if (cm->frame_type == KEY_FRAME)
rc->frames_since_key = 0;