1474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/*
2474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *
4474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  Use of this source code is governed by a BSD-style license
5474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  that can be found in the LICENSE file in the root of the source
6474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  tree. An additional intellectual property rights grant can be found
7474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  in the file PATENTS.  All contributing project authors may
8474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  be found in the AUTHORS file in the root of the source tree.
9474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org */
10474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
11474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
128b26fe55f3e4daa2311dbd2d95e8ac2b4e080685johannkoenig@chromium.org#ifndef VP8_COMMON_BLOCKD_H_
138b26fe55f3e4daa2311dbd2d95e8ac2b4e080685johannkoenig@chromium.org#define VP8_COMMON_BLOCKD_H_
14474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
15474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid vpx_log(const char *format, ...);
16474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
17167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#include "vpx_config.h"
18474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "vpx_scale/yv12config.h"
19474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "mv.h"
20474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "treecoder.h"
21474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "vpx_ports/mem.h"
22474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
23dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org#ifdef __cplusplus
24dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.orgextern "C" {
25dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org#endif
26dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org
27474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/*#define DCPRED 1*/
28474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define DCPREDSIMTHRESH 0
29474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define DCPREDCNTTHRESH 3
30474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
31474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define MB_FEATURE_TREE_PROBS   3
32474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define MAX_MB_SEGMENTS         4
33474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
34474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define MAX_REF_LF_DELTAS       4
35474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define MAX_MODE_LF_DELTAS      4
36474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
37474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/* Segment Feature Masks */
38474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define SEGMENT_DELTADATA   0
39474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define SEGMENT_ABSDATA     1
40474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
41474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgtypedef struct
42474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
43474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int r, c;
44474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} POS;
45474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
46474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define PLANE_TYPE_Y_NO_DC    0
47474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define PLANE_TYPE_Y2         1
48474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define PLANE_TYPE_UV         2
49474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define PLANE_TYPE_Y_WITH_DC  3
50474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
51474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
52474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgtypedef char ENTROPY_CONTEXT;
53474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgtypedef struct
54474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
55474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ENTROPY_CONTEXT y1[4];
56474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ENTROPY_CONTEXT u[2];
57474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ENTROPY_CONTEXT v[2];
58474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ENTROPY_CONTEXT y2;
59474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} ENTROPY_CONTEXT_PLANES;
60474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
61474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgextern const unsigned char vp8_block2left[25];
62474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgextern const unsigned char vp8_block2above[25];
63474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
64474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define VP8_COMBINEENTROPYCONTEXTS( Dest, A, B) \
65167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    Dest = (A)+(B);
66474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
67474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
68474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgtypedef enum
69474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
70474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    KEY_FRAME = 0,
71474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    INTER_FRAME = 1
72474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} FRAME_TYPE;
73474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
74474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgtypedef enum
75474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
76474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    DC_PRED,            /* average of above and left pixels */
77474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    V_PRED,             /* vertical prediction */
78474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    H_PRED,             /* horizontal prediction */
79474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    TM_PRED,            /* Truemotion prediction */
80474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    B_PRED,             /* block based prediction, each block has its own prediction mode */
81474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
82474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    NEARESTMV,
83474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    NEARMV,
84474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ZEROMV,
85474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    NEWMV,
86474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    SPLITMV,
87474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
88474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    MB_MODE_COUNT
89474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} MB_PREDICTION_MODE;
90474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
91474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/* Macroblock level features */
92474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgtypedef enum
93474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
94474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    MB_LVL_ALT_Q = 0,               /* Use alternate Quantizer .... */
95474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    MB_LVL_ALT_LF = 1,              /* Use alternate loop filter value... */
96474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    MB_LVL_MAX = 2                  /* Number of MB level features supported */
97474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
98474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} MB_LVL_FEATURES;
99474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
100474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/* Segment Feature Masks */
101474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define SEGMENT_ALTQ    0x01
102474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define SEGMENT_ALT_LF  0x02
103474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
104474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define VP8_YMODES  (B_PRED + 1)
105474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define VP8_UV_MODES (TM_PRED + 1)
106474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
107474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define VP8_MVREFS (1 + SPLITMV - NEARESTMV)
108474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
109474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgtypedef enum
110474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
111474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    B_DC_PRED,          /* average of above and left pixels */
112474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    B_TM_PRED,
113474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
114474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    B_VE_PRED,           /* vertical prediction */
115474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    B_HE_PRED,           /* horizontal prediction */
116474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
117474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    B_LD_PRED,
118474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    B_RD_PRED,
119474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
120474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    B_VR_PRED,
121474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    B_VL_PRED,
122474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    B_HD_PRED,
123474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    B_HU_PRED,
124474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
125474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    LEFT4X4,
126474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ABOVE4X4,
127474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ZERO4X4,
128474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    NEW4X4,
129474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
130474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    B_MODE_COUNT
131474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} B_PREDICTION_MODE;
132474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
133474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define VP8_BINTRAMODES (B_HU_PRED + 1)  /* 10 */
134474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define VP8_SUBMVREFS (1 + NEW4X4 - LEFT4X4)
135474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
136474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/* For keyframes, intra block modes are predicted by the (already decoded)
137474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org   modes for the Y blocks to the left and above us; for interframes, there
138474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org   is a single probability table. */
139474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
140474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgunion b_mode_info
141474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
142474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    B_PREDICTION_MODE as_mode;
143474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int_mv mv;
144474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org};
145474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
146474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgtypedef enum
147474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
148474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    INTRA_FRAME = 0,
149474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    LAST_FRAME = 1,
150474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    GOLDEN_FRAME = 2,
151474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ALTREF_FRAME = 3,
152474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    MAX_REF_FRAMES = 4
153474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} MV_REFERENCE_FRAME;
154474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
155474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgtypedef struct
156474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
1575c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    uint8_t mode, uv_mode;
1585c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    uint8_t ref_frame;
1595c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    uint8_t is_4x4;
160474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int_mv mv;
161474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
1625c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    uint8_t partitioning;
1635c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    uint8_t mb_skip_coeff;                                /* does this mb has coefficients at all, 1=no coefficients, 0=need decode tokens */
1645c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    uint8_t need_to_clamp_mvs;
1655c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    uint8_t segment_id;                  /* Which set of segmentation parameters should be used for this MB */
166474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} MB_MODE_INFO;
167474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
168ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgtypedef struct modeinfo
169474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
170474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    MB_MODE_INFO mbmi;
171474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    union b_mode_info bmi[16];
172474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} MODE_INFO;
173474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
174167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#if CONFIG_MULTI_RES_ENCODING
175ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org/* The mb-level information needed to be stored for higher-resolution encoder */
176167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgtypedef struct
177167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org{
178167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    MB_PREDICTION_MODE mode;
179167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    MV_REFERENCE_FRAME ref_frame;
180167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    int_mv mv;
181ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    int dissim;    /* dissimilarity level of the macroblock */
182ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org} LOWER_RES_MB_INFO;
183ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org
184ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org/* The frame-level information needed to be stored for higher-resolution
185ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org *  encoder */
186ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgtypedef struct
187ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org{
188ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    FRAME_TYPE frame_type;
189ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    int is_frame_dropped;
190ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    /* The frame number of each reference frames */
191ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    unsigned int low_res_ref_frames[MAX_REF_FRAMES];
192ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org    LOWER_RES_MB_INFO *mb_info;
193ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org} LOWER_RES_FRAME_INFO;
1945c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#endif
1955c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org
1965c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.orgtypedef struct blockd
1975c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org{
198474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    short *qcoeff;
199474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    short *dqcoeff;
200474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    unsigned char  *predictor;
201474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    short *dequant;
202474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
2035c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    int offset;
204167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    char *eob;
205474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
206474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    union b_mode_info bmi;
207474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} BLOCKD;
208474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
2095c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.orgtypedef void (*vp8_subpix_fn_t)(unsigned char *src, int src_pitch, int xofst, int yofst, unsigned char *dst, int dst_pitch);
2105c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org
2115c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.orgtypedef struct macroblockd
212474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
213474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    DECLARE_ALIGNED(16, unsigned char,  predictor[384]);
214474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    DECLARE_ALIGNED(16, short, qcoeff[400]);
215474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    DECLARE_ALIGNED(16, short, dqcoeff[400]);
216474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    DECLARE_ALIGNED(16, char,  eobs[25]);
217474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
218167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    DECLARE_ALIGNED(16, short,  dequant_y1[16]);
219167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    DECLARE_ALIGNED(16, short,  dequant_y1_dc[16]);
220167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    DECLARE_ALIGNED(16, short,  dequant_y2[16]);
221167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    DECLARE_ALIGNED(16, short,  dequant_uv[16]);
222167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
223474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    /* 16 Y blocks, 4 U, 4 V, 1 DC 2nd order block, each with 16 entries. */
224474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    BLOCKD block[25];
225167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    int fullpixel_mask;
226474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
227474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    YV12_BUFFER_CONFIG pre; /* Filtered copy of previous frame reconstruction */
228474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    YV12_BUFFER_CONFIG dst;
229474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
230474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    MODE_INFO *mode_info_context;
231474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int mode_info_stride;
232474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
233474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    FRAME_TYPE frame_type;
234474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
235474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int up_available;
236474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int left_available;
237474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
2385c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    unsigned char *recon_above[3];
2395c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    unsigned char *recon_left[3];
2405c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    int recon_left_stride[2];
2415c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org
242474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    /* Y,U,V,Y2 */
243474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ENTROPY_CONTEXT_PLANES *above_context;
244474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ENTROPY_CONTEXT_PLANES *left_context;
245474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
246474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    /* 0 indicates segmentation at MB level is not enabled. Otherwise the individual bits indicate which features are active. */
247474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    unsigned char segmentation_enabled;
248474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
249474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    /* 0 (do not update) 1 (update) the macroblock segmentation map. */
250474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    unsigned char update_mb_segmentation_map;
251474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
252474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    /* 0 (do not update) 1 (update) the macroblock segmentation feature data. */
253474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    unsigned char update_mb_segmentation_data;
254474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
255474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    /* 0 (do not update) 1 (update) the macroblock segmentation feature data. */
256474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    unsigned char mb_segement_abs_delta;
257474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
258474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    /* Per frame flags that define which MB level features (such as quantizer or loop filter level) */
259474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    /* are enabled and when enabled the proabilities used to decode the per MB flags in MB_MODE_INFO */
260474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_prob mb_segment_tree_probs[MB_FEATURE_TREE_PROBS];         /* Probability Tree used to code Segment number */
261474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
262474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    signed char segment_feature_data[MB_LVL_MAX][MAX_MB_SEGMENTS];            /* Segment parameters */
263474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
264474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    /* mode_based Loop filter adjustment */
265474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    unsigned char mode_ref_lf_delta_enabled;
266474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    unsigned char mode_ref_lf_delta_update;
267474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
268474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    /* Delta values have the range +/- MAX_LOOP_FILTER */
269474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    signed char last_ref_lf_deltas[MAX_REF_LF_DELTAS];                /* 0 = Intra, Last, GF, ARF */
270474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    signed char ref_lf_deltas[MAX_REF_LF_DELTAS];                     /* 0 = Intra, Last, GF, ARF */
271474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    signed char last_mode_lf_deltas[MAX_MODE_LF_DELTAS];                      /* 0 = BPRED, ZERO_MV, MV, SPLIT */
272474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    signed char mode_lf_deltas[MAX_MODE_LF_DELTAS];                           /* 0 = BPRED, ZERO_MV, MV, SPLIT */
273474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
274474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    /* Distance of MB away from frame edges */
275474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int mb_to_left_edge;
276474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int mb_to_right_edge;
277474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int mb_to_top_edge;
278474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int mb_to_bottom_edge;
279474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
280474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
281474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
282474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_subpix_fn_t  subpixel_predict;
283474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_subpix_fn_t  subpixel_predict8x4;
284474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_subpix_fn_t  subpixel_predict8x8;
285474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_subpix_fn_t  subpixel_predict16x16;
286474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
287474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    void *current_bc;
288474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
289474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int corrupted;
290474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
291474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if ARCH_X86 || ARCH_X86_64
292474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    /* This is an intermediate buffer currently used in sub-pixel motion search
293474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org     * to keep a copy of the reference area. This buffer can be used for other
294474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org     * purpose.
295474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org     */
296474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    DECLARE_ALIGNED(32, unsigned char, y_buf[22*32]);
297474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif
298474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} MACROBLOCKD;
299474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
300474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
301474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgextern void vp8_build_block_doffsets(MACROBLOCKD *x);
302474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgextern void vp8_setup_block_dptrs(MACROBLOCKD *x);
303474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
304dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org#ifdef __cplusplus
305dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org}  // extern "C"
306dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org#endif
307dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org
3088b26fe55f3e4daa2311dbd2d95e8ac2b4e080685johannkoenig@chromium.org#endif  // VP8_COMMON_BLOCKD_H_
309