summaryrefslogtreecommitdiff
path: root/vp9/decoder/vp9_decoder.h
diff options
context:
space:
mode:
authorRitu Baldwa <ritu.baldwa@ittiam.com>2019-01-02 11:58:34 +0530
committerRitu Baldwa <ritu.baldwa@ittiam.com>2019-01-19 10:20:32 +0530
commit5818014b691c1dc20f3597bbcbf165782b54eacb (patch)
treed5bbe5ebaebde85b614a467777307260f6ef73a0 /vp9/decoder/vp9_decoder.h
parent06983668cf41f66765528db044419f954e5a5d64 (diff)
downloadlibvpx-5818014b691c1dc20f3597bbcbf165782b54eacb.tar
libvpx-5818014b691c1dc20f3597bbcbf165782b54eacb.tar.gz
libvpx-5818014b691c1dc20f3597bbcbf165782b54eacb.tar.bz2
libvpx-5818014b691c1dc20f3597bbcbf165782b54eacb.zip
Revert "Revert "Add Tile-SB-Row based Multi-threading in Decoder""
This reverts commit 06983668cf41f66765528db044419f954e5a5d64. Fixes Visual Studio build errors introduced by earlier row mt commit BUG=webm:1587 Change-Id: I792df86e8254cd6b2a511955b691af619a569cd0
Diffstat (limited to 'vp9/decoder/vp9_decoder.h')
-rw-r--r--vp9/decoder/vp9_decoder.h33
1 files changed, 32 insertions, 1 deletions
diff --git a/vp9/decoder/vp9_decoder.h b/vp9/decoder/vp9_decoder.h
index 9a582fffb..ad39bc03d 100644
--- a/vp9/decoder/vp9_decoder.h
+++ b/vp9/decoder/vp9_decoder.h
@@ -21,6 +21,7 @@
#include "vp9/common/vp9_thread_common.h"
#include "vp9/common/vp9_onyxc_int.h"
#include "vp9/common/vp9_ppflags.h"
+#include "./vp9_job_queue.h"
#ifdef __cplusplus
extern "C" {
@@ -30,6 +31,14 @@ extern "C" {
#define DQCOEFFS_PER_SB_LOG2 12
#define PARTITIONS_PER_SB 85
+typedef enum JobType { PARSE_JOB, RECON_JOB, LPF_JOB } JobType;
+
+typedef struct ThreadData {
+ struct VP9Decoder *pbi;
+ LFWorkerData *lf_data;
+ VP9LfSync *lf_sync;
+} ThreadData;
+
typedef struct TileBuffer {
const uint8_t *data;
size_t size;
@@ -49,14 +58,36 @@ typedef struct TileWorkerData {
struct vpx_internal_error_info error_info;
} TileWorkerData;
+typedef void (*process_block_fn_t)(TileWorkerData *twd,
+ struct VP9Decoder *const pbi, int mi_row,
+ int mi_col, BLOCK_SIZE bsize, int bwl,
+ int bhl);
+
typedef struct RowMTWorkerData {
int num_sbs;
int *eob[MAX_MB_PLANE];
PARTITION_TYPE *partition;
tran_low_t *dqcoeff[MAX_MB_PLANE];
int8_t *recon_map;
+ const uint8_t *data_end;
+ uint8_t *jobq_buf;
+ JobQueueRowMt jobq;
+ size_t jobq_size;
+ int num_tiles_done;
+#if CONFIG_MULTITHREAD
+ pthread_mutex_t recon_mutex;
+ pthread_mutex_t map_mutex;
+#endif
+ ThreadData *thread_data;
} RowMTWorkerData;
+/* Structure to queue and dequeue row decode jobs */
+typedef struct Job {
+ int row_num;
+ int tile_col;
+ JobType job_type;
+} Job;
+
typedef struct VP9Decoder {
DECLARE_ALIGNED(16, MACROBLOCKD, mb);
@@ -128,7 +159,7 @@ struct VP9Decoder *vp9_decoder_create(BufferPool *const pool);
void vp9_decoder_remove(struct VP9Decoder *pbi);
void vp9_dec_alloc_row_mt_mem(RowMTWorkerData *row_mt_worker_data,
- VP9_COMMON *cm, int num_sbs);
+ VP9_COMMON *cm, int num_sbs, int max_threads);
void vp9_dec_free_row_mt_mem(RowMTWorkerData *row_mt_worker_data);
static INLINE void decrease_ref_count(int idx, RefCntBuffer *const frame_bufs,