Splitting out 8->16 block copy code into copy_sb8_16()

No change in output.

Change-Id: I4f0e37a879432e2647b3debe6a2c0c670a79dd6f
diff --git a/av1/common/dering.c b/av1/common/dering.c
index 4681e76..31c53e8 100644
--- a/av1/common/dering.c
+++ b/av1/common/dering.c
@@ -113,6 +113,34 @@
   }
 }
 
+/* TODO: Optimize this function for SSE. */
+static void copy_sb8_16(AV1_COMMON *cm, int16_t *dst, int dstride,
+    const uint8_t *src, int src_voffset, int src_hoffset, int sstride,
+    int vsize, int hsize)
+{
+  int r, c;
+  (void)cm;
+#if CONFIG_AOM_HIGHBITDEPTH
+  if (cm->use_highbitdepth) {
+    const uint16_t *base = &CONVERT_TO_SHORTPTR(src)[src_voffset * sstride
+                                                     + src_hoffset];
+    for (r = 0; r < vsize; r++) {
+      for (c = 0; c < hsize; c++) {
+        dst[r * dstride + c] = base[r*sstride + c];
+      }
+    }
+  } else
+#endif
+  {
+    const uint8_t *base = &src[src_voffset * sstride + src_hoffset];
+    for (r = 0; r < vsize; r++) {
+      for (c = 0; c < hsize; c++) {
+        dst[r * dstride + c] = base[r*sstride + c];
+      }
+    }
+  }
+}
+
 void av1_dering_frame(YV12_BUFFER_CONFIG *frame, AV1_COMMON *cm,
                       MACROBLOCKD *xd, int global_level) {
   int r, c;
@@ -157,28 +185,10 @@
   for (sbr = 0; sbr < nvsb; sbr++) {
     last_sbc = -1;
     for (pli = 0; pli < nplanes; pli++) {
-#if CONFIG_AOM_HIGHBITDEPTH
-      if (cm->use_highbitdepth) {
-        for (r = 0; r < OD_FILT_VBORDER; r++) {
-          for (c = 0; c < cm->mi_cols << bsize[pli]; c++) {
-            curr_linebuf[pli][r * stride + c] = CONVERT_TO_SHORTPTR(
-                xd->plane[pli].dst.buf)[((MAX_MIB_SIZE << bsize[pli]) *
-                    (sbr + 1) - OD_FILT_VBORDER + r) * xd->plane[pli].dst.stride
-                    + c];
-          }
-        }
-      } else {
-#endif
-        for (r = 0; r < OD_FILT_VBORDER; r++) {
-          for (c = 0; c < cm->mi_cols << bsize[pli]; c++) {
-            curr_linebuf[pli][r * stride + c] =
-                xd->plane[pli].dst.buf[((MAX_MIB_SIZE << bsize[pli]) * (sbr + 1)
-                    - OD_FILT_VBORDER + r) * xd->plane[pli].dst.stride + c];
-          }
-        }
-#if CONFIG_AOM_HIGHBITDEPTH
-      }
-#endif
+      copy_sb8_16(cm, curr_linebuf[pli], stride, xd->plane[pli].dst.buf,
+          (MAX_MIB_SIZE << bsize[pli]) * (sbr + 1) - OD_FILT_VBORDER, 0,
+          xd->plane[pli].dst.stride, OD_FILT_VBORDER,
+          cm->mi_cols << bsize[pli]);
       for (r = 0; r < (MAX_MIB_SIZE << bsize[pli]) + OD_FILT_VBORDER; r++) {
         for (c = 0; c < OD_FILT_HBORDER; c++) {
           colbuf[pli][r][c] = OD_DERING_VERY_LARGE;
@@ -218,28 +228,10 @@
         coffset = sbc * MAX_MIB_SIZE << bsize[pli];
         /* Copy in the pixels we need from the current superblock for
            deringing.*/
-#if CONFIG_AOM_HIGHBITDEPTH
-        if (cm->use_highbitdepth) {
-          for (r = 0; r < rend; r++) {
-            for (c = cstart; c < cend; ++c) {
-              src[(r + OD_FILT_VBORDER) * OD_FILT_BSTRIDE + c + OD_FILT_HBORDER]
-                  = CONVERT_TO_SHORTPTR(xd->plane[pli].dst.buf)[
-                  ((MAX_MIB_SIZE << bsize[pli]) * sbr + r) *
-                  xd->plane[pli].dst.stride + c + coffset];
-            }
-          }
-        } else {
-#endif
-          for (r = 0; r < rend; r++) {
-            for (c = cstart; c < cend; ++c) {
-              src[(r + OD_FILT_VBORDER) * OD_FILT_BSTRIDE + c + OD_FILT_HBORDER]
-                  = xd->plane[pli].dst.buf[((MAX_MIB_SIZE << bsize[pli]) * sbr
-                  + r) * xd->plane[pli].dst.stride + c + coffset];
-            }
-          }
-#if CONFIG_AOM_HIGHBITDEPTH
-        }
-#endif
+        copy_sb8_16(cm, &src[OD_FILT_VBORDER*OD_FILT_BSTRIDE + OD_FILT_HBORDER
+                             + cstart], OD_FILT_BSTRIDE, xd->plane[pli].dst.buf,
+            (MAX_MIB_SIZE << bsize[pli]) * sbr, coffset + cstart,
+            xd->plane[pli].dst.stride, rend, cend-cstart);
         if (sbc == nhsb - 1) {
           /* On the last superblock column, fill in the right border with
              OD_DERING_VERY_LARGE to avoid filtering with the outside. */