This commit is contained in:
Anthony Minessale
2019-09-11 15:51:47 +00:00
committed by Andrey Volk
parent 34fcadbd53
commit ceb051af4e
821 changed files with 89961 additions and 48650 deletions

View File

@@ -8,8 +8,8 @@
* be found in the AUTHORS file in the root of the source tree.
*/
#ifndef VP9_DECODER_VP9_DECODER_H_
#define VP9_DECODER_VP9_DECODER_H_
#ifndef VPX_VP9_DECODER_VP9_DECODER_H_
#define VPX_VP9_DECODER_VP9_DECODER_H_
#include "./vpx_config.h"
@@ -21,11 +21,24 @@
#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" {
#endif
#define EOBS_PER_SB_LOG2 8
#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;
@@ -37,12 +50,46 @@ typedef struct TileWorkerData {
int buf_start, buf_end; // pbi->tile_buffers to decode, inclusive
vpx_reader bit_reader;
FRAME_COUNTS counts;
LFWorkerData *lf_data;
VP9LfSync *lf_sync;
DECLARE_ALIGNED(16, MACROBLOCKD, xd);
/* dqcoeff are shared by all the planes. So planes must be decoded serially */
DECLARE_ALIGNED(16, tran_low_t, dqcoeff[32 * 32]);
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;
int num_jobs;
#if CONFIG_MULTITHREAD
pthread_mutex_t recon_done_mutex;
pthread_mutex_t *recon_sync_mutex;
pthread_cond_t *recon_sync_cond;
#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);
@@ -72,10 +119,14 @@ typedef struct VP9Decoder {
int inv_tile_order;
int need_resync; // wait for key/intra-only frame.
int hold_ref_buf; // hold the reference buffer.
int row_mt;
int lpf_mt_opt;
RowMTWorkerData *row_mt_worker_data;
} VP9Decoder;
int vp9_receive_compressed_data(struct VP9Decoder *pbi, size_t size,
const uint8_t **dest);
const uint8_t **psource);
int vp9_get_raw_frame(struct VP9Decoder *pbi, YV12_BUFFER_CONFIG *sd,
vp9_ppflags_t *flags);
@@ -109,6 +160,11 @@ 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, int max_threads,
int num_jobs);
void vp9_dec_free_row_mt_mem(RowMTWorkerData *row_mt_worker_data);
static INLINE void decrease_ref_count(int idx, RefCntBuffer *const frame_bufs,
BufferPool *const pool) {
if (idx >= 0 && frame_bufs[idx].ref_count > 0) {
@@ -129,4 +185,4 @@ static INLINE void decrease_ref_count(int idx, RefCntBuffer *const frame_bufs,
} // extern "C"
#endif
#endif // VP9_DECODER_VP9_DECODER_H_
#endif // VPX_VP9_DECODER_VP9_DECODER_H_