From 6d482706ef07b0f515f167bc7b7728ff1a510700 Mon Sep 17 00:00:00 2001 From: John Koleszar <jkoleszar@google.com> Date: Tue, 13 Nov 2012 15:18:47 -0800 Subject: [PATCH] SEG_LVL_MODE: don't code ref_frame if it's implicit If the SEG_LVL_MODE is an intra mode, then the reference frame must be INTRA_FRAME. Change-Id: I2cdeeac3780c077c74b39ce89a528bc280674231 --- vp9/decoder/decodemv.c | 6 +++++- vp9/encoder/bitstream.c | 7 ++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/vp9/decoder/decodemv.c b/vp9/decoder/decodemv.c index e9f37958ce..e7560765a9 100644 --- a/vp9/decoder/decodemv.c +++ b/vp9/decoder/decodemv.c @@ -717,7 +717,11 @@ static void read_mb_modes_mv(VP9D_COMP *pbi, MODE_INFO *mi, MB_MODE_INFO *mbmi, } // Read the reference frame - mbmi->ref_frame = read_ref_frame(pbi, bc, mbmi->segment_id); + if (vp9_segfeature_active(xd, mbmi->segment_id, SEG_LVL_MODE) + && vp9_get_segdata(xd, mbmi->segment_id, SEG_LVL_MODE) < NEARESTMV) + mbmi->ref_frame = INTRA_FRAME; + else + mbmi->ref_frame = read_ref_frame(pbi, bc, mbmi->segment_id); // If reference frame is an Inter frame if (mbmi->ref_frame) { diff --git a/vp9/encoder/bitstream.c b/vp9/encoder/bitstream.c index d88cfd0554..65614a176b 100644 --- a/vp9/encoder/bitstream.c +++ b/vp9/encoder/bitstream.c @@ -863,7 +863,12 @@ static void pack_inter_mode_mvs(VP9_COMP *const cpi, vp9_writer *const bc) { } // Encode the reference frame. - encode_ref_frame(bc, pc, xd, segment_id, rf); + if (!vp9_segfeature_active(xd, segment_id, SEG_LVL_MODE) + || vp9_get_segdata(xd, segment_id, SEG_LVL_MODE) >= NEARESTMV) { + encode_ref_frame(bc, pc, xd, segment_id, rf); + } else { + assert(rf == INTRA_FRAME); + } if (rf == INTRA_FRAME) { #ifdef ENTROPY_STATS -- GitLab