Commit 4e528206 authored by Mark Thompson's avatar Mark Thompson

vp8: Add hwaccel hooks

Also adds some extra fields to the main context structure that may
be needed by a hwaccel decoder.
parent 131a85a1
This diff is collapsed.
...@@ -130,12 +130,17 @@ typedef struct VP8ThreadData { ...@@ -130,12 +130,17 @@ typedef struct VP8ThreadData {
typedef struct VP8Frame { typedef struct VP8Frame {
ThreadFrame tf; ThreadFrame tf;
AVBufferRef *seg_map; AVBufferRef *seg_map;
AVBufferRef *hwaccel_priv_buf;
void *hwaccel_picture_private;
} VP8Frame; } VP8Frame;
#define MAX_THREADS 8 #define MAX_THREADS 8
typedef struct VP8Context { typedef struct VP8Context {
VP8ThreadData *thread_data; VP8ThreadData *thread_data;
AVCodecContext *avctx; AVCodecContext *avctx;
enum AVPixelFormat pix_fmt;
VP8Frame *framep[4]; VP8Frame *framep[4];
VP8Frame *next_framep[4]; VP8Frame *next_framep[4];
VP8Frame *curframe; VP8Frame *curframe;
...@@ -165,6 +170,7 @@ typedef struct VP8Context { ...@@ -165,6 +170,7 @@ typedef struct VP8Context {
uint8_t enabled; uint8_t enabled;
uint8_t absolute_vals; uint8_t absolute_vals;
uint8_t update_map; uint8_t update_map;
uint8_t update_feature_data;
int8_t base_quant[4]; int8_t base_quant[4];
int8_t filter_level[4]; ///< base loop filter level int8_t filter_level[4]; ///< base loop filter level
} segmentation; } segmentation;
...@@ -192,8 +198,19 @@ typedef struct VP8Context { ...@@ -192,8 +198,19 @@ typedef struct VP8Context {
int16_t chroma_qmul[2]; int16_t chroma_qmul[2];
} qmat[4]; } qmat[4];
// Raw quantisation values, which may be needed by hwaccel decode.
struct {
int yac_qi;
int ydc_delta;
int y2dc_delta;
int y2ac_delta;
int uvdc_delta;
int uvac_delta;
} quant;
struct { struct {
uint8_t enabled; ///< whether each mb can have a different strength based on mode/ref uint8_t enabled; ///< whether each mb can have a different strength based on mode/ref
uint8_t update;
/** /**
* filter strength adjustment for the following macroblock modes: * filter strength adjustment for the following macroblock modes:
...@@ -221,6 +238,20 @@ typedef struct VP8Context { ...@@ -221,6 +238,20 @@ typedef struct VP8Context {
VP56RangeCoder c; ///< header context, includes mb modes and motion vectors VP56RangeCoder c; ///< header context, includes mb modes and motion vectors
/* This contains the entropy coder state at the end of the header
* block, in the form specified by the standard. For use by
* hwaccels, so that a hardware decoder has the information to
* start decoding at the macroblock layer.
*/
struct {
const uint8_t *input;
uint32_t range;
uint32_t value;
int bit_count;
} coder_state_at_header_end;
int header_partition_size;
/** /**
* These are all of the updatable probabilities for binary decisions. * These are all of the updatable probabilities for binary decisions.
* They are only implicitly reset on keyframes, making it quite likely * They are only implicitly reset on keyframes, making it quite likely
...@@ -258,6 +289,7 @@ typedef struct VP8Context { ...@@ -258,6 +289,7 @@ typedef struct VP8Context {
*/ */
int num_coeff_partitions; int num_coeff_partitions;
VP56RangeCoder coeff_partition[8]; VP56RangeCoder coeff_partition[8];
int coeff_partition_size[8];
VideoDSPContext vdsp; VideoDSPContext vdsp;
VP8DSPContext vp8dsp; VP8DSPContext vp8dsp;
H264PredContext hpc; H264PredContext hpc;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment