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 {