From: John Koleszar Date: Tue, 13 Nov 2012 23:18:47 +0000 (-0800) Subject: SEG_LVL_MODE: don't code ref_frame if it's implicit X-Git-Tag: v1.3.0~1217^2~103^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6d482706ef07b0f515f167bc7b7728ff1a510700;p=libvpx 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 --- diff --git a/vp9/decoder/decodemv.c b/vp9/decoder/decodemv.c index e9f37958c..e7560765a 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 d88cfd055..65614a176 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