From: James Zern Date: Thu, 1 Oct 2015 06:02:31 +0000 (-0700) Subject: vp9/tile_worker_hook: pass pbi directly X-Git-Tag: v1.5.0~66^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0bd82af834e92b62705d5f4f10bb98649c899229;p=libvpx vp9/tile_worker_hook: pass pbi directly reduces the size of TileWorkerData reusing the storage in the worker itself Change-Id: If8a62fcb35167037c3da5814ab84fb81893f9cab --- diff --git a/vp9/decoder/vp9_decodeframe.c b/vp9/decoder/vp9_decodeframe.c index a559c26de..1fa4c4bf3 100644 --- a/vp9/decoder/vp9_decodeframe.c +++ b/vp9/decoder/vp9_decodeframe.c @@ -1570,14 +1570,13 @@ static const uint8_t *decode_tiles(VP9Decoder *pbi, // On entry 'tile_data->data_end' points to the end of the input frame, on exit // it is updated to reflect the bitreader position of the final tile column if // present in the tile buffer group or NULL otherwise. -static int tile_worker_hook(TileWorkerData *const tile_data, void *unused) { +static int tile_worker_hook(TileWorkerData *const tile_data, + VP9Decoder *const pbi) { TileInfo *const tile = &tile_data->xd.tile; - VP9Decoder *const pbi = tile_data->pbi; const int final_col = (1 << pbi->common.log2_tile_cols) - 1; const uint8_t *volatile bit_reader_end = NULL; volatile int n = tile_data->buf_start; tile_data->error_info.setjmp = 1; - (void)unused; if (setjmp(tile_data->error_info.jmp)) { tile_data->error_info.setjmp = 0; @@ -1605,9 +1604,8 @@ static int tile_worker_hook(TileWorkerData *const tile_data, void *unused) { vp9_zero(tile_data->xd.left_seg_context); for (mi_col = tile->mi_col_start; mi_col < tile->mi_col_end; mi_col += MI_BLOCK_SIZE) { - decode_partition(tile_data->pbi, &tile_data->xd, - mi_row, mi_col, &tile_data->bit_reader, - BLOCK_64X64, 4); + decode_partition(pbi, &tile_data->xd, mi_row, mi_col, + &tile_data->bit_reader, BLOCK_64X64, 4); } } @@ -1671,13 +1669,12 @@ static const uint8_t *decode_tiles_mt(VP9Decoder *pbi, VPxWorker *const worker = &pbi->tile_workers[n]; TileWorkerData *const tile_data = &pbi->tile_worker_data[n]; winterface->sync(worker); - tile_data->pbi = pbi; tile_data->xd = pbi->mb; tile_data->xd.counts = cm->frame_parallel_decoding_mode ? NULL : &tile_data->counts; worker->hook = (VPxWorkerHook)tile_worker_hook; worker->data1 = tile_data; - worker->data2 = NULL; + worker->data2 = pbi; } // Note: this memset assumes above_context[0], [1] and [2] diff --git a/vp9/decoder/vp9_decoder.h b/vp9/decoder/vp9_decoder.h index da30e157c..4a5188f8f 100644 --- a/vp9/decoder/vp9_decoder.h +++ b/vp9/decoder/vp9_decoder.h @@ -43,7 +43,6 @@ typedef struct TileBuffer { } TileBuffer; typedef struct TileWorkerData { - struct VP9Decoder *pbi; const uint8_t *data_end; int buf_start, buf_end; // pbi->tile_buffers to decode, inclusive vpx_reader bit_reader;