diff options
author | Yunqing Wang <yunqingwang@google.com> | 2019-07-11 15:07:17 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2019-07-11 15:07:17 +0000 |
commit | 1c875f11f2efacf13ba4a00cdb98642379feaac8 (patch) | |
tree | 70af1c3734a99fa4b720995a8a9cda04ef1124b2 /vp9/encoder | |
parent | 2d63dacfa022fc04b2a9c115f215652e6a840b7e (diff) | |
parent | bd775bfda96d8a3675859bda13cb860079b4daf4 (diff) | |
download | libvpx-1c875f11f2efacf13ba4a00cdb98642379feaac8.tar libvpx-1c875f11f2efacf13ba4a00cdb98642379feaac8.tar.gz libvpx-1c875f11f2efacf13ba4a00cdb98642379feaac8.tar.bz2 libvpx-1c875f11f2efacf13ba4a00cdb98642379feaac8.zip |
Merge "Modify frame context index"
Diffstat (limited to 'vp9/encoder')
-rw-r--r-- | vp9/encoder/vp9_encoder.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/vp9/encoder/vp9_encoder.c b/vp9/encoder/vp9_encoder.c index 904492e6e..ec7baf0a7 100644 --- a/vp9/encoder/vp9_encoder.c +++ b/vp9/encoder/vp9_encoder.c @@ -822,8 +822,28 @@ static void setup_frame(VP9_COMP *cpi) { // layer ARF case as well. if (cpi->multi_layer_arf && !cpi->use_svc) { GF_GROUP *const gf_group = &cpi->twopass.gf_group; - cm->frame_context_idx = clamp(gf_group->layer_depth[gf_group->index] - 1, 0, - FRAME_CONTEXTS - 1); + const int gf_group_index = gf_group->index; + const int boost_frame = + !cpi->rc.is_src_frame_alt_ref && + (cpi->refresh_golden_frame || cpi->refresh_alt_ref_frame); + + // frame_context_idx Frame Type + // 0 Intra only frame, base layer ARF + // 1 ARFs with layer depth = 2,3 + // 2 ARFs with layer depth > 3 + // 3 Non-boosted frames + if (frame_is_intra_only(cm)) { + cm->frame_context_idx = 0; + } else if (boost_frame) { + if (gf_group->rf_level[gf_group_index] == GF_ARF_STD) + cm->frame_context_idx = 0; + else if (gf_group->layer_depth[gf_group_index] <= 3) + cm->frame_context_idx = 1; + else + cm->frame_context_idx = 2; + } else { + cm->frame_context_idx = 3; + } } if (cm->frame_type == KEY_FRAME) { |