]> granicus.if.org Git - libvpx/commitdiff
Implied skip is 0 for intra blocks
authorPieter Kapsenberg <pkapsenb@google.com>
Fri, 29 May 2015 00:09:52 +0000 (17:09 -0700)
committerPieter Kapsenberg <pkapsenb@google.com>
Tue, 2 Jun 2015 01:27:34 +0000 (18:27 -0700)
Skip flag is removed from the bitstream for all blocks coded in intra
mode. Very minor coding gain in derf and stdhd sets (0.048 and 0.1)

Change-Id: I79f03300f16d6fa84ce54405cafecab8a021cd7d

configure
vp9/decoder/vp9_decodemv.c
vp9/encoder/vp9_bitstream.c
vp9/encoder/vp9_encodeframe.c
vp9/encoder/vp9_tokenize.c

index 0f0659f95c0de0cf5495ec1bd9628822fc05eec9..3d62e93ec6b3183aeae99d773b3414746ed7ab4c 100755 (executable)
--- a/configure
+++ b/configure
@@ -300,6 +300,7 @@ EXPERIMENT_LIST="
     new_inter
     bitstream_fixes
     newmvref
+    misc_entropy
 "
 CONFIG_LIST="
     external_build
index 7394d86b8748b9c0ad26cc4669150672aa35bc04..81dd4e3ad492869664a4665d8f8253b54cce9b36 100644 (file)
@@ -196,11 +196,19 @@ static int read_inter_segment_id(VP9_COMMON *const cm, MACROBLOCKD *const xd,
   set_segment_id(cm, bsize, mi_row, mi_col, segment_id);
   return segment_id;
 }
-
+#if CONFIG_MISC_ENTROPY
 static int read_skip(VP9_COMMON *cm, const MACROBLOCKD *xd,
-                     int segment_id, vp9_reader *r) {
+                     int segment_id, int is_inter, vp9_reader *r) {
+#else
+  static int read_skip(VP9_COMMON *cm, const MACROBLOCKD *xd,
+                       int segment_id, vp9_reader *r) {
+#endif
   if (vp9_segfeature_active(&cm->seg, segment_id, SEG_LVL_SKIP)) {
     return 1;
+#if CONFIG_MISC_ENTROPY
+  } else if (!is_inter) {
+    return 0;
+#endif
   } else {
     const int ctx = vp9_get_skip_context(xd);
     const int skip = vp9_read(r, cm->fc.skip_probs[ctx]);
@@ -260,7 +268,11 @@ static void read_intra_frame_mode_info(VP9_COMMON *const cm,
 #endif  // CONFIG_INTRABC
 
   mbmi->segment_id = read_intra_segment_id(cm, xd, mi_row, mi_col, r);
+#if CONFIG_MISC_ENTROPY
+  mbmi->skip = 0;
+#else
   mbmi->skip = read_skip(cm, xd, mbmi->segment_id, r);
+#endif
 #if CONFIG_PALETTE
   if (bsize >= BLOCK_8X8 && cm->allow_palette_mode) {
     int palette_ctx = 0;
@@ -1344,11 +1356,16 @@ static void read_inter_frame_mode_info(VP9_COMMON *const cm,
 #if CONFIG_SUPERTX
   if (!supertx_enabled) {
 #endif
+#if !CONFIG_MISC_ENTROPY
     mbmi->skip = read_skip(cm, xd, mbmi->segment_id, r);
+#endif
 #if CONFIG_COPY_MODE
     if (mbmi->copy_mode == NOREF)
 #endif
       inter_block = read_is_inter_block(cm, xd, mbmi->segment_id, r);
+#if CONFIG_MISC_ENTROPY
+    mbmi->skip = read_skip(cm, xd, mbmi->segment_id, inter_block, r);
+#endif
 
 #if CONFIG_PALETTE
     mbmi->palette_enabled[0] = 0;
index 47199cdb6d19ba5c8ed35d82151e634aa880e1dc..50cbaa0008dd5935aef9632cc7e3ba463f83fa55 100644 (file)
@@ -190,11 +190,20 @@ static void write_selected_tx_size(const VP9_COMMON *cm,
     }
   }
 }
-
+#if CONFIG_MISC_ENTROPY
 static int write_skip(const VP9_COMMON *cm, const MACROBLOCKD *xd,
-                      int segment_id, const MODE_INFO *mi, vp9_writer *w) {
+                      int segment_id, const MODE_INFO *mi, int is_inter,
+                      vp9_writer *w) {
+#else
+  static int write_skip(const VP9_COMMON *cm, const MACROBLOCKD *xd,
+                        int segment_id, const MODE_INFO *mi, vp9_writer *w) {
+#endif
   if (vp9_segfeature_active(&cm->seg, segment_id, SEG_LVL_SKIP)) {
     return 1;
+#if CONFIG_MISC_ENTROPY
+  } else if (!is_inter && cm->frame_type == INTER_FRAME) {
+    return 0;
+#endif
   } else {
     const int skip = mi->mbmi.skip;
     vp9_write(w, skip, vp9_get_skip_prob(cm, xd));
@@ -454,14 +463,16 @@ static void pack_inter_mode_mvs(VP9_COMP *cpi, const MODE_INFO *mi,
       write_segment_id(w, seg, segment_id);
     }
   }
-
 #if CONFIG_SUPERTX
   if (supertx_enabled)
     skip = mbmi->skip;
   else
     skip = write_skip(cm, xd, segment_id, mi, w);
 #else
+#if !CONFIG_MISC_ENTROPY
   skip = write_skip(cm, xd, segment_id, mi, w);
+#endif
+
 #endif  // CONFIG_SUPERTX
 
 #if CONFIG_SUPERTX
@@ -476,6 +487,10 @@ static void pack_inter_mode_mvs(VP9_COMP *cpi, const MODE_INFO *mi,
   }
 #endif
 
+#if CONFIG_MISC_ENTROPY
+  skip = write_skip(cm, xd, segment_id, mi, is_inter, w);
+#endif
+
 #if CONFIG_PALETTE
   if (!is_inter && bsize >= BLOCK_8X8 && cm->allow_palette_mode) {
     int n, i, j, k, rows, cols, palette_ctx, color_ctx;
@@ -862,9 +877,9 @@ static void write_mb_modes_kf(const VP9_COMMON *cm,
 
   if (seg->update_map)
     write_segment_id(w, seg, mbmi->segment_id);
-
+#if !CONFIG_MISC_ENTROPY
   write_skip(cm, xd, mbmi->segment_id, mi, w);
-
+#endif
 #if CONFIG_PALETTE
   if (bsize >= BLOCK_8X8 && cm->allow_palette_mode) {
     int n, m1, m2, i, j, k, rows, cols, palette_ctx, color_ctx;
index ad5f45b9f4d984c1100ab5e56d59aa6c80aa7f89..4d1903aefc5f777293eaae5a467cf4f64bafbf7e 100644 (file)
@@ -5185,7 +5185,11 @@ static void encode_superblock(VP9_COMP *cpi, TOKENEXTRA **t, int output_enabled,
 #endif  // CONFIG_INTRABC
       ) {
     int plane;
+#if CONFIG_MISC_ENTROPY
+    mbmi->skip = 0;
+#else
     mbmi->skip = 1;
+#endif
     for (plane = 0; plane < MAX_MB_PLANE; ++plane)
       vp9_encode_intra_block_plane(x, MAX(bsize, BLOCK_8X8), plane);
     if (output_enabled)
index 1a1690285a572fb8e5210cc8932a8df236b6972a..79de4e16d41f8a3d71b55d301bc9aa1e8b009843 100644 (file)
@@ -530,6 +530,9 @@ void vp9_tokenize_sb(VP9_COMP *cpi, TOKENEXTRA **t, int dry_run,
   struct tokenize_b_args arg = {cpi, xd, t};
   if (mbmi->skip) {
     if (!dry_run)
+#if CONFIG_MISC_ENTROPY
+      if (is_inter_block(mbmi))
+#endif
       cm->counts.skip[ctx][1] += skip_inc;
     reset_skip_context(xd, bsize);
     if (dry_run)
@@ -538,6 +541,9 @@ void vp9_tokenize_sb(VP9_COMP *cpi, TOKENEXTRA **t, int dry_run,
   }
 
   if (!dry_run) {
+#if CONFIG_MISC_ENTROPY
+    if (is_inter_block(mbmi))
+#endif
     cm->counts.skip[ctx][0] += skip_inc;
 #if CONFIG_TX_SKIP
     if (mbmi->tx_skip[0] && FOR_SCREEN_CONTENT)