shithub: libvpx

Download patch

ref: ec6cf519d1435b9db2296d55541a5a02fc229424
parent: 73a4824c346e23939ce8c22c35aa373c66f452cf
parent: 3e345cd4d8760fc6343c5606cbf6d867f1c3f0e7
author: Ronald S. Bultje <rbultje@google.com>
date: Thu May 2 05:08:33 EDT 2013

Merge "Fix some more offset errors in sb8x8." into experimental

--- a/vp9/common/vp9_blockd.h
+++ b/vp9/common/vp9_blockd.h
@@ -502,6 +502,12 @@
   int above = 0, left = 0, i;
   int boffset = mi_width_log2(BLOCK_SIZE_SB64X64) - bsl;
 
+#if CONFIG_SB8X8
+  bs = 1 << (bsl - 1);
+#else
+  bs = 1 << bsl;
+#endif
+
   assert(mi_width_log2(sb_type) == mi_height_log2(sb_type));
   assert(bsl >= 0);
   assert(boffset >= 0);
--- a/vp9/common/vp9_reconintra.c
+++ b/vp9/common/vp9_reconintra.c
@@ -545,8 +545,8 @@
 
 void vp9_build_intra_predictors_sby_s(MACROBLOCKD *xd,
                                       BLOCK_SIZE_TYPE bsize) {
-  const int bwl = mi_width_log2(bsize),  bw = MI_SIZE << bwl;
-  const int bhl = mi_height_log2(bsize), bh = MI_SIZE << bhl;
+  const int bwl = b_width_log2(bsize),  bw = 4 << bwl;
+  const int bhl = b_height_log2(bsize), bh = 4 << bhl;
 
   vp9_build_intra_predictors(xd->plane[0].dst.buf, xd->plane[0].dst.stride,
                              xd->plane[0].dst.buf, xd->plane[0].dst.stride,
@@ -558,8 +558,8 @@
 
 void vp9_build_intra_predictors_sbuv_s(MACROBLOCKD *xd,
                                        BLOCK_SIZE_TYPE bsize) {
-  const int bwl = mi_width_log2(bsize), bw = MI_UV_SIZE << bwl;
-  const int bhl = mi_height_log2(bsize), bh = MI_UV_SIZE << bhl;
+  const int bwl = b_width_log2(bsize), bw = 2 << bwl;
+  const int bhl = b_height_log2(bsize), bh = 2 << bhl;
 
   vp9_build_intra_predictors(xd->plane[1].dst.buf, xd->plane[1].dst.stride,
                              xd->plane[1].dst.buf, xd->plane[1].dst.stride,
--- a/vp9/encoder/vp9_encodeframe.c
+++ b/vp9/encoder/vp9_encodeframe.c
@@ -1071,8 +1071,8 @@
           xd->b_index = k;
 
           // try 8x8 coding
-          pick_sb_modes(cpi, mi_row + y_idx_m + (k & 1),
-                        mi_col + x_idx_m + (k >> 1),
+          pick_sb_modes(cpi, mi_row + y_idx_m + (k >> 1),
+                        mi_col + x_idx_m + (k & 1),
                         tp, &r, &d, BLOCK_SIZE_SB8X8,
                         &x->sb8_context[xd->sb_index][xd->mb_index]
                                        [xd->b_index]);
@@ -1082,7 +1082,8 @@
                                            [xd->b_index],
                        BLOCK_SIZE_SB8X8, 0);
           encode_superblock(cpi, tp,
-                            0, mi_row + y_idx_m, mi_col + x_idx_m,
+                            0, mi_row + y_idx_m + (k >> 1),
+                            mi_col + x_idx_m + (k & 1),
                             BLOCK_SIZE_SB8X8);
         }
         set_partition_seg_context(cpi, mi_row + y_idx_m, mi_col + x_idx_m);
@@ -2430,7 +2431,8 @@
     vp9_subtract_sbuv(x, bsize);
     vp9_transform_sbuv_4x4(x, bsize);
     vp9_quantize_sbuv_4x4(x, bsize);
-    vp9_optimize_sbuv(cm, x, bsize);
+    if (x->optimize)
+      vp9_optimize_sbuv(cm, x, bsize);
     vp9_inverse_transform_sbuv_4x4(xd, bsize);
     vp9_recon_sbuv(xd, bsize);