From: Marco Date: Fri, 20 Nov 2015 16:44:19 +0000 (-0800) Subject: vp9-svc: Fix the setting of is_key_frame. X-Git-Tag: v1.6.0~541^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=80a3e2615ae5da48c09a71be6bce106e24c2bcf5;p=libvpx vp9-svc: Fix the setting of is_key_frame. Change on affects 1 pass CBR. On key frame, temporal layer_id is reset to 0 for 1 pass CBR, but since "layer" is reset, the svc.layer_context[layer].is_key_frame was not correspondingly set properly. Change-Id: I08f6da0a55ac7429ccfbaddfb7be14479e43543b --- diff --git a/vp9/encoder/vp9_ratectrl.c b/vp9/encoder/vp9_ratectrl.c index 0377cb5c2..fdff36315 100644 --- a/vp9/encoder/vp9_ratectrl.c +++ b/vp9/encoder/vp9_ratectrl.c @@ -1558,7 +1558,7 @@ void vp9_rc_get_svc_params(VP9_COMP *cpi) { VP9_COMMON *const cm = &cpi->common; RATE_CONTROL *const rc = &cpi->rc; int target = rc->avg_frame_bandwidth; - const int layer = LAYER_IDS_TO_IDX(cpi->svc.spatial_layer_id, + int layer = LAYER_IDS_TO_IDX(cpi->svc.spatial_layer_id, cpi->svc.temporal_layer_id, cpi->svc.number_temporal_layers); if ((cm->current_video_frame == 0) || @@ -1573,8 +1573,10 @@ void vp9_rc_get_svc_params(VP9_COMP *cpi) { cpi->ref_frame_flags &= (~VP9_LAST_FLAG & ~VP9_GOLD_FLAG & ~VP9_ALT_FLAG); } else if (is_one_pass_cbr_svc(cpi)) { - cpi->svc.layer_context[layer].is_key_frame = 1; reset_temporal_layer_to_zero(cpi); + layer = LAYER_IDS_TO_IDX(cpi->svc.spatial_layer_id, + cpi->svc.temporal_layer_id, cpi->svc.number_temporal_layers); + cpi->svc.layer_context[layer].is_key_frame = 1; cpi->ref_frame_flags &= (~VP9_LAST_FLAG & ~VP9_GOLD_FLAG & ~VP9_ALT_FLAG); // Assumption here is that LAST_FRAME is being updated for a keyframe.