shithub: libvpx

Download patch

ref: 71097d9cf25c63f4a539ec4ef9c90b0872dc9682
parent: 9f528ce057e0945abd8382f551119dc2e20bfcc5
author: James Zern <jzern@google.com>
date: Thu Oct 24 12:13:50 EDT 2013

vp9/decode: add alloc_tile_storage()

Change-Id: I3ebb172d4f2ae7db73b72fb42eb93833a295fb55

--- a/vp9/decoder/vp9_decodframe.c
+++ b/vp9/decoder/vp9_decodframe.c
@@ -199,6 +199,23 @@
     xd->plane[i].dequant = cm->uv_dequant[q_index];
 }
 
+// Allocate storage for each tile column.
+// TODO(jzern): when max_threads <= 1 the same storage could be used for each
+// tile.
+static void alloc_tile_storage(VP9D_COMP *pbi, int tile_cols) {
+  VP9_COMMON *const cm = &pbi->common;
+  int tile_col;
+
+  CHECK_MEM_ERROR(cm, pbi->mi_streams,
+                  vpx_realloc(pbi->mi_streams, tile_cols *
+                              sizeof(*pbi->mi_streams)));
+  for (tile_col = 0; tile_col < tile_cols; ++tile_col) {
+    vp9_get_tile_col_offsets(cm, tile_col);
+    pbi->mi_streams[tile_col] =
+        &cm->mi[cm->mi_rows * cm->cur_tile_mi_col_start];
+  }
+}
+
 static void decode_block(int plane, int block, BLOCK_SIZE plane_bsize,
                          TX_SIZE tx_size, void *arg) {
   MACROBLOCKD* const xd = arg;
@@ -1095,7 +1112,6 @@
   const int keyframe = cm->frame_type == KEY_FRAME;
   YV12_BUFFER_CONFIG *new_fb = &cm->yv12_fb[cm->new_fb_idx];
   const int tile_cols = 1 << cm->log2_tile_cols;
-  int tile_col;
 
   if (!first_partition_size) {
     if (!keyframe) {
@@ -1126,14 +1142,7 @@
   xd->mi_8x8 = cm->mi_grid_visible;
   xd->mode_info_stride = cm->mode_info_stride;
 
-  CHECK_MEM_ERROR(cm, pbi->mi_streams,
-                  vpx_realloc(pbi->mi_streams, tile_cols *
-                              sizeof(*pbi->mi_streams)));
-  for (tile_col = 0; tile_col < tile_cols; ++tile_col) {
-    vp9_get_tile_col_offsets(cm, tile_col);
-    pbi->mi_streams[tile_col] =
-        &cm->mi[cm->mi_rows * cm->cur_tile_mi_col_start];
-  }
+  alloc_tile_storage(pbi, tile_cols);
 
   cm->fc = cm->frame_contexts[cm->frame_context_idx];