Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/videolan/dav1d.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRonald S. Bultje <rsbultje@gmail.com>2019-08-29 02:17:05 +0300
committerRonald S. Bultje <rsbultje@gmail.com>2019-08-29 02:26:12 +0300
commit37a03fc77223a6d60554876fae4596734bbea79b (patch)
treedbc9b8928d2b2cdd1fb0e65f8e7c0096b0021ca6
parent2c1467b4d22259192dfaa55484689e321919518a (diff)
Check absolute tile positions in sb-to-tile_idx table generation
Otherwise the table can get out of sync when the frame size and tile count stays the same, but the tile coordinates change. Fixes #266.
-rw-r--r--src/decode.c12
-rw-r--r--src/internal.h3
2 files changed, 10 insertions, 5 deletions
diff --git a/src/decode.c b/src/decode.c
index 24f1af6..200d42d 100644
--- a/src/decode.c
+++ b/src/decode.c
@@ -2595,8 +2595,10 @@ int dav1d_decode_frame(Dav1dFrameContext *const f) {
f->tile_thread.titsati_sz = titsati_sz;
}
if (f->tile_thread.titsati_init[0] != f->frame_hdr->tiling.cols ||
- f->tile_thread.titsati_init[1] != f->sbh ||
- f->tile_thread.titsati_init[2] != f->frame_hdr->tiling.rows)
+ f->tile_thread.titsati_init[1] != f->frame_hdr->tiling.rows ||
+ memcmp(f->frame_hdr->tiling.row_start_sb, f->tile_thread.titsati_index_rows,
+ sizeof(*f->tile_thread.titsati_index_rows) *
+ (f->frame_hdr->tiling.rows + 1)))
{
for (int tile_row = 0, tile_idx = 0;
tile_row < f->frame_hdr->tiling.rows; tile_row++)
@@ -2614,8 +2616,10 @@ int dav1d_decode_frame(Dav1dFrameContext *const f) {
}
}
f->tile_thread.titsati_init[0] = f->frame_hdr->tiling.cols;
- f->tile_thread.titsati_init[1] = f->sbh;
- f->tile_thread.titsati_init[2] = f->frame_hdr->tiling.rows;
+ f->tile_thread.titsati_init[1] = f->frame_hdr->tiling.rows;
+ memcpy(f->tile_thread.titsati_index_rows, f->frame_hdr->tiling.row_start_sb,
+ sizeof(*f->tile_thread.titsati_index_rows) *
+ (f->frame_hdr->tiling.rows + 1));
}
}
diff --git a/src/internal.h b/src/internal.h
index ae56504..8ce5b16 100644
--- a/src/internal.h
+++ b/src/internal.h
@@ -235,7 +235,8 @@ struct Dav1dFrameContext {
pthread_cond_t cond, icond;
int tasks_left, num_tasks;
int (*task_idx_to_sby_and_tile_idx)[2];
- int titsati_sz, titsati_init[3];
+ int titsati_sz, titsati_init[2];
+ uint16_t titsati_index_rows[1 + DAV1D_MAX_TILE_ROWS];
int inited;
} tile_thread;
};