shithub: libvpx

Download patch

ref: 16e268668204566d7f4b2d4fc6775f996773d74d
parent: 127836d11f8ad8a267b04547b8f8f4f901fddb31
parent: 6d482706ef07b0f515f167bc7b7728ff1a510700
author: John Koleszar <jkoleszar@google.com>
date: Wed Nov 14 04:39:25 EST 2012

Merge "SEG_LVL_MODE: don't code ref_frame if it's implicit" into experimental

--- a/vp9/decoder/decodemv.c
+++ b/vp9/decoder/decodemv.c
@@ -717,7 +717,11 @@
   }
 
   // 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) {
--- a/vp9/encoder/bitstream.c
+++ b/vp9/encoder/bitstream.c
@@ -863,7 +863,12 @@
         }
 
         // 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
--