shithub: libvpx

Download patch

ref: 03349d2ba227098cf2906026f0923556695807dd
parent: 2b58730aec646e8e0a6203984b70e7d2154d7d84
author: Dmitry Kovalev <dkovalev@google.com>
date: Tue Mar 25 11:12:28 EDT 2014

Moving dqcoeff array to MACROBLOCKD in decoder.

Change-Id: I3e20c0cdb9d2437bddf21afb255855f2dead8e02

--- a/vp9/common/vp9_blockd.h
+++ b/vp9/common/vp9_blockd.h
@@ -235,7 +235,8 @@
 
   int corrupted;
 
-  /* Y,U,V,(A) */
+  DECLARE_ALIGNED(16, int16_t, dqcoeff[MAX_MB_PLANE][64 * 64]);
+
   ENTROPY_CONTEXT *above_context[MAX_MB_PLANE];
   ENTROPY_CONTEXT left_context[MAX_MB_PLANE][16];
 
@@ -243,7 +244,12 @@
   PARTITION_CONTEXT left_seg_context[8];
 } MACROBLOCKD;
 
+static INLINE void init_macroblockd(MACROBLOCKD *xd) {
+  int i;
 
+  for (i = 0; i < MAX_MB_PLANE; ++i)
+    xd->plane[i].dqcoeff = xd->dqcoeff[i];
+}
 
 static INLINE BLOCK_SIZE get_subsize(BLOCK_SIZE bsize,
                                      PARTITION_TYPE partition) {
--- a/vp9/decoder/vp9_decodeframe.c
+++ b/vp9/decoder/vp9_decodeframe.c
@@ -853,17 +853,6 @@
   return end;
 }
 
-static void setup_tile_macroblockd(TileWorkerData *const tile_data) {
-  MACROBLOCKD *xd = &tile_data->xd;
-  struct macroblockd_plane *const pd = xd->plane;
-  int i;
-
-  for (i = 0; i < MAX_MB_PLANE; ++i) {
-    pd[i].dqcoeff = tile_data->dqcoeff[i];
-    vpx_memset(xd->plane[i].dqcoeff, 0, 64 * 64 * sizeof(int16_t));
-  }
-}
-
 static int tile_worker_hook(void *arg1, void *arg2) {
   TileWorkerData *const tile_data = (TileWorkerData*)arg1;
   const TileInfo *const tile = (TileInfo*)arg2;
@@ -990,8 +979,10 @@
 
       setup_token_decoder(buf->data, data_end, buf->size, &cm->error,
                           &tile_data->bit_reader);
+
       setup_tile_context(cm, &tile_data->xd, 0, buf->col);
-      setup_tile_macroblockd(tile_data);
+      init_macroblockd(&tile_data->xd);
+      vp9_zero(tile_data->xd.dqcoeff);
 
       worker->had_error = 0;
       if (i == num_workers - 1 || n == tile_cols - 1) {
@@ -1281,7 +1272,6 @@
 int vp9_decode_frame(VP9D_COMP *pbi,
                      const uint8_t *data, const uint8_t *data_end,
                      const uint8_t **p_data_end) {
-  int i;
   VP9_COMMON *const cm = &pbi->common;
   MACROBLOCKD *const xd = &pbi->mb;
 
@@ -1330,8 +1320,7 @@
 
   cm->fc = cm->frame_contexts[cm->frame_context_idx];
   vp9_zero(cm->counts);
-  for (i = 0; i < MAX_MB_PLANE; ++i)
-    vpx_memset(xd->plane[i].dqcoeff, 0, 64 * 64 * sizeof(int16_t));
+  vp9_zero(xd->dqcoeff);
 
   xd->corrupted = 0;
   new_fb->corrupted = read_compressed_header(pbi, data, first_partition_size);
--- a/vp9/decoder/vp9_decoder.c
+++ b/vp9/decoder/vp9_decoder.c
@@ -110,15 +110,6 @@
   }
 }
 
-static void init_macroblockd(VP9D_COMP *const pbi) {
-  MACROBLOCKD *xd = &pbi->mb;
-  struct macroblockd_plane *const pd = xd->plane;
-  int i;
-
-  for (i = 0; i < MAX_MB_PLANE; ++i)
-    pd[i].dqcoeff = pbi->dqcoeff[i];
-}
-
 VP9D_COMP *vp9_create_decompressor(const VP9D_CONFIG *oxcf) {
   VP9D_COMP *const pbi = vpx_memalign(32, sizeof(VP9D_COMP));
   VP9_COMMON *const cm = pbi ? &pbi->common : NULL;
@@ -156,7 +147,7 @@
   cm->error.setjmp = 0;
   pbi->decoded_key_frame = 0;
 
-  init_macroblockd(pbi);
+  init_macroblockd(&pbi->mb);
 
   vp9_worker_init(&pbi->lf_worker);
 
--- a/vp9/decoder/vp9_decoder.h
+++ b/vp9/decoder/vp9_decoder.h
@@ -40,8 +40,6 @@
 
   DECLARE_ALIGNED(16, VP9_COMMON, common);
 
-  DECLARE_ALIGNED(16, int16_t,  dqcoeff[MAX_MB_PLANE][64 * 64]);
-
   VP9D_CONFIG oxcf;
 
   int64_t last_time_stamp;
--- a/vp9/decoder/vp9_dthread.h
+++ b/vp9/decoder/vp9_dthread.h
@@ -24,7 +24,6 @@
   struct VP9Common *cm;
   vp9_reader bit_reader;
   DECLARE_ALIGNED(16, struct macroblockd, xd);
-  DECLARE_ALIGNED(16, int16_t, dqcoeff[MAX_MB_PLANE][64 * 64]);
 
   // Row-based parallel loopfilter data
   LFWorkerData lfdata;