shithub: libvpx

Download patch

ref: 5fa64bdef0bf760074407b9bf853eef6d64ea089
parent: 6ce718eb180467c3e18ee648403699ed762cc187
author: Deb Mukherjee <debargha@google.com>
date: Mon Apr 22 08:43:12 EDT 2013

Bugfix from reordering frame probs patch

This fixes an intermittent mismatch issue cause by moving
the lossless mode decoding bit to after the loop filter
setup information. We need to ensure that the lossless bit
is decoded prior to loop filter setup.

Change-Id: I3faa3fff8e1013b7405dac91268350e059ed121e

--- a/vp9/decoder/vp9_decodframe.c
+++ b/vp9/decoder/vp9_decodframe.c
@@ -1613,6 +1613,8 @@
   pc->clamp_type = (CLAMP_TYPE)vp9_read_bit(&header_bc);
   pc->error_resilient_mode = vp9_read_bit(&header_bc);
 
+  xd->lossless = vp9_read_bit(&header_bc);
+
   setup_loopfilter(pc, xd, &header_bc);
 
   // Dummy read for now
@@ -1681,7 +1683,6 @@
 
   setup_pred_probs(pc, &header_bc);
 
-  xd->lossless = vp9_read_bit(&header_bc);
   pc->txfm_mode = xd->lossless ? ONLY_4X4 : read_txfm_mode(&header_bc);
   if (pc->txfm_mode == TX_MODE_SELECT) {
     pc->prob_tx[0] = vp9_read_prob(&header_bc);
--- a/vp9/encoder/vp9_bitstream.c
+++ b/vp9/encoder/vp9_bitstream.c
@@ -2614,6 +2614,9 @@
   // error resilient mode
   vp9_write_bit(&header_bc, pc->error_resilient_mode);
 
+  // lossless mode: note this needs to be before loopfilter
+  vp9_write_bit(&header_bc, cpi->mb.e_mbd.lossless);
+
   // Encode the loop filter level and type
   vp9_write_bit(&header_bc, pc->filter_type);
   vp9_write_literal(&header_bc, pc->filter_level, 6);
@@ -2883,7 +2886,6 @@
     }
   }
 
-  vp9_write_bit(&header_bc, cpi->mb.e_mbd.lossless);
   if (cpi->mb.e_mbd.lossless) {
     pc->txfm_mode = ONLY_4X4;
   } else {