]> granicus.if.org Git - libvpx/commitdiff
Support up to 1024 row/column tiles in bit-stream syntax
authorJingning Han <jingning@google.com>
Tue, 19 May 2015 22:41:57 +0000 (15:41 -0700)
committerJingning Han <jingning@google.com>
Wed, 20 May 2015 00:20:36 +0000 (17:20 -0700)
Add syntax support to allow up to 1024 row/column tiles
respectively.

Change-Id: I84278589364b658d6c4dd05f0771795f732ad68f

vp9/decoder/vp9_decodeframe.c
vp9/encoder/vp9_bitstream.c
vp9/encoder/vp9_picklpf.c

index 44d6710f0b07c9b9e7e4c0070b4a1c5bc120861d..b887031bf4a2a7304a9bcbe86b964336d6decd5d 100644 (file)
@@ -1869,7 +1869,7 @@ static void setup_tile_info(VP9_COMMON *cm, struct vp9_read_bit_buffer *rb) {
   max_ones = max_log2_tiles - min_log2_tiles;
   cm->log2_tile_cols = min_log2_tiles;
   while (max_ones-- && vp9_rb_read_bit(rb))
-    cm->log2_tile_cols++;
+    ++cm->log2_tile_cols;
 
   if (cm->log2_tile_cols > 10)
     vpx_internal_error(&cm->error, VPX_CODEC_CORRUPT_FRAME,
@@ -1877,6 +1877,12 @@ static void setup_tile_info(VP9_COMMON *cm, struct vp9_read_bit_buffer *rb) {
 
   // rows
 #if CONFIG_ROW_TILE
+  vp9_get_tile_n_bits(cm->mi_rows, &min_log2_tiles, &max_log2_tiles);
+  max_ones = max_log2_tiles - min_log2_tiles;
+  cm->log2_tile_rows = min_log2_tiles;
+  while (max_ones-- && vp9_rb_read_bit(rb))
+    ++cm->log2_tile_rows;
+
   if (cm->log2_tile_rows > 10)
     vpx_internal_error(&cm->error, VPX_CODEC_CORRUPT_FRAME,
                        "Invalid number of tile columns");
index bcc2c2201e2b6e04bdd8c48cd7ba35b41a2a5e3a..b312a743bb129ce2fc41a538d0def3264c1e0709 100644 (file)
@@ -1866,21 +1866,31 @@ static void fix_interp_filter(VP9_COMMON *cm) {
 
 static void write_tile_info(const VP9_COMMON *const cm,
                             struct vp9_write_bit_buffer *wb) {
-  int min_log2_tile_cols, max_log2_tile_cols, ones;
-  vp9_get_tile_n_bits(cm->mi_cols, &min_log2_tile_cols, &max_log2_tile_cols);
+  int min_log2_tiles, max_log2_tiles, ones;
+  vp9_get_tile_n_bits(cm->mi_cols, &min_log2_tiles, &max_log2_tiles);
 
   // columns
-  ones = cm->log2_tile_cols - min_log2_tile_cols;
+  ones = cm->log2_tile_cols - min_log2_tiles;
   while (ones--)
     vp9_wb_write_bit(wb, 1);
 
-  if (cm->log2_tile_cols < max_log2_tile_cols)
+  if (cm->log2_tile_cols < max_log2_tiles)
     vp9_wb_write_bit(wb, 0);
 
   // rows
+#if CONFIG_ROW_TILE
+  vp9_get_tile_n_bits(cm->mi_rows, &min_log2_tiles, &max_log2_tiles);
+  ones = cm->log2_tile_rows - min_log2_tiles;
+  while (ones--)
+    vp9_wb_write_bit(wb, 1);
+
+  if (cm->log2_tile_rows < max_log2_tiles)
+    vp9_wb_write_bit(wb, 0);
+#else
   vp9_wb_write_bit(wb, cm->log2_tile_rows != 0);
   if (cm->log2_tile_rows != 0)
     vp9_wb_write_bit(wb, cm->log2_tile_rows != 1);
+#endif
 }
 
 static int get_refresh_mask(VP9_COMP *cpi) {
index 8d0b522bba7672e0c662bc62a7f83ef3421a724e..34f88f0317507cc5d81b21340067d873c5bd2b89 100644 (file)
@@ -373,4 +373,8 @@ void vp9_pick_filter_level(const YV12_BUFFER_CONFIG *sd, VP9_COMP *cpi,
         sd, cpi, method == LPF_PICK_FROM_SUBIMAGE);
 #endif  // CONFIG_LOOP_POSTFILTER
   }
+
+#if CONFIG_ROW_TILE
+  lf->filter_level = 0;
+#endif
 }