190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/*
2f71323e297a928af368937089d3ed71239786f86Andreas Huber *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber *
4f71323e297a928af368937089d3ed71239786f86Andreas Huber *  Use of this source code is governed by a BSD-style license
5f71323e297a928af368937089d3ed71239786f86Andreas Huber *  that can be found in the LICENSE file in the root of the source
6f71323e297a928af368937089d3ed71239786f86Andreas Huber *  tree. An additional intellectual property rights grant can be found
7f71323e297a928af368937089d3ed71239786f86Andreas Huber *  in the file PATENTS.  All contributing project authors may
8f71323e297a928af368937089d3ed71239786f86Andreas Huber *  be found in the AUTHORS file in the root of the source tree.
990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber */
1090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
12b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#ifndef VP8_COMMON_BLOCKD_H_
13b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#define VP8_COMMON_BLOCKD_H_
1490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vpx_log(const char *format, ...);
1690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
171b362b15af34006e6a11974088a46d42b903418eJohann#include "vpx_config.h"
1890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "vpx_scale/yv12config.h"
1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "mv.h"
2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "treecoder.h"
2190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "vpx_ports/mem.h"
2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
23b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#ifdef __cplusplus
24b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianextern "C" {
25b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#endif
26b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian
27538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/*#define DCPRED 1*/
2890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define DCPREDSIMTHRESH 0
2990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define DCPREDCNTTHRESH 3
3090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define MB_FEATURE_TREE_PROBS   3
3290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define MAX_MB_SEGMENTS         4
3390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define MAX_REF_LF_DELTAS       4
3590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define MAX_MODE_LF_DELTAS      4
3690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
37538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/* Segment Feature Masks */
3890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define SEGMENT_DELTADATA   0
3990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define SEGMENT_ABSDATA     1
4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef struct
4290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{
4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int r, c;
4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} POS;
4590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
4679f15823c34ae1e423108295e416213200bb280fAndreas Huber#define PLANE_TYPE_Y_NO_DC    0
4779f15823c34ae1e423108295e416213200bb280fAndreas Huber#define PLANE_TYPE_Y2         1
4879f15823c34ae1e423108295e416213200bb280fAndreas Huber#define PLANE_TYPE_UV         2
4979f15823c34ae1e423108295e416213200bb280fAndreas Huber#define PLANE_TYPE_Y_WITH_DC  3
5079f15823c34ae1e423108295e416213200bb280fAndreas Huber
5190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
52f71323e297a928af368937089d3ed71239786f86Andreas Hubertypedef char ENTROPY_CONTEXT;
5390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef struct
5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{
55f71323e297a928af368937089d3ed71239786f86Andreas Huber    ENTROPY_CONTEXT y1[4];
56f71323e297a928af368937089d3ed71239786f86Andreas Huber    ENTROPY_CONTEXT u[2];
57f71323e297a928af368937089d3ed71239786f86Andreas Huber    ENTROPY_CONTEXT v[2];
58f71323e297a928af368937089d3ed71239786f86Andreas Huber    ENTROPY_CONTEXT y2;
59f71323e297a928af368937089d3ed71239786f86Andreas Huber} ENTROPY_CONTEXT_PLANES;
6090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
61f71323e297a928af368937089d3ed71239786f86Andreas Huberextern const unsigned char vp8_block2left[25];
62f71323e297a928af368937089d3ed71239786f86Andreas Huberextern const unsigned char vp8_block2above[25];
6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define VP8_COMBINEENTROPYCONTEXTS( Dest, A, B) \
651b362b15af34006e6a11974088a46d42b903418eJohann    Dest = (A)+(B);
6690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
6790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
6890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef enum
6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{
7090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    KEY_FRAME = 0,
7190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    INTER_FRAME = 1
7290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} FRAME_TYPE;
7390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef enum
7590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{
76538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    DC_PRED,            /* average of above and left pixels */
77538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    V_PRED,             /* vertical prediction */
78538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    H_PRED,             /* horizontal prediction */
79538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    TM_PRED,            /* Truemotion prediction */
80538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    B_PRED,             /* block based prediction, each block has its own prediction mode */
8190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    NEARESTMV,
8390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    NEARMV,
8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ZEROMV,
8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    NEWMV,
8690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    SPLITMV,
8790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
8890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    MB_MODE_COUNT
8990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} MB_PREDICTION_MODE;
9090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
91538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/* Macroblock level features */
9290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef enum
9390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{
94538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    MB_LVL_ALT_Q = 0,               /* Use alternate Quantizer .... */
95538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    MB_LVL_ALT_LF = 1,              /* Use alternate loop filter value... */
96538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    MB_LVL_MAX = 2                  /* Number of MB level features supported */
9790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
9890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} MB_LVL_FEATURES;
9990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
100538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/* Segment Feature Masks */
10190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define SEGMENT_ALTQ    0x01
10290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define SEGMENT_ALT_LF  0x02
10390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
10490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define VP8_YMODES  (B_PRED + 1)
10590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define VP8_UV_MODES (TM_PRED + 1)
10690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
10790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define VP8_MVREFS (1 + SPLITMV - NEARESTMV)
10890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
10990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef enum
11090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{
111538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    B_DC_PRED,          /* average of above and left pixels */
11290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    B_TM_PRED,
11390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
114538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    B_VE_PRED,           /* vertical prediction */
115538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    B_HE_PRED,           /* horizontal prediction */
11690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
11790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    B_LD_PRED,
11890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    B_RD_PRED,
11990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
12090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    B_VR_PRED,
12190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    B_VL_PRED,
12290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    B_HD_PRED,
12390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    B_HU_PRED,
12490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
12590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    LEFT4X4,
12690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ABOVE4X4,
12790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ZERO4X4,
12890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    NEW4X4,
12990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
13090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    B_MODE_COUNT
13190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} B_PREDICTION_MODE;
13290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
13390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define VP8_BINTRAMODES (B_HU_PRED + 1)  /* 10 */
13490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define VP8_SUBMVREFS (1 + NEW4X4 - LEFT4X4)
13590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
13690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/* For keyframes, intra block modes are predicted by the (already decoded)
13790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber   modes for the Y blocks to the left and above us; for interframes, there
13890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber   is a single probability table. */
13990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1401b362b15af34006e6a11974088a46d42b903418eJohannunion b_mode_info
14190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{
1421b362b15af34006e6a11974088a46d42b903418eJohann    B_PREDICTION_MODE as_mode;
1431b362b15af34006e6a11974088a46d42b903418eJohann    int_mv mv;
1441b362b15af34006e6a11974088a46d42b903418eJohann};
14590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
14690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef enum
14790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{
14890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    INTRA_FRAME = 0,
14990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    LAST_FRAME = 1,
15090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    GOLDEN_FRAME = 2,
15190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ALTREF_FRAME = 3,
15290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    MAX_REF_FRAMES = 4
15390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} MV_REFERENCE_FRAME;
15490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef struct
15690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{
1571b362b15af34006e6a11974088a46d42b903418eJohann    uint8_t mode, uv_mode;
1581b362b15af34006e6a11974088a46d42b903418eJohann    uint8_t ref_frame;
1591b362b15af34006e6a11974088a46d42b903418eJohann    uint8_t is_4x4;
1601b362b15af34006e6a11974088a46d42b903418eJohann    int_mv mv;
1611b362b15af34006e6a11974088a46d42b903418eJohann
1621b362b15af34006e6a11974088a46d42b903418eJohann    uint8_t partitioning;
1631b362b15af34006e6a11974088a46d42b903418eJohann    uint8_t mb_skip_coeff;                                /* does this mb has coefficients at all, 1=no coefficients, 0=need decode tokens */
1641b362b15af34006e6a11974088a46d42b903418eJohann    uint8_t need_to_clamp_mvs;
1651b362b15af34006e6a11974088a46d42b903418eJohann    uint8_t segment_id;                  /* Which set of segmentation parameters should be used for this MB */
16690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} MB_MODE_INFO;
16790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1681b362b15af34006e6a11974088a46d42b903418eJohanntypedef struct modeinfo
16990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{
17090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    MB_MODE_INFO mbmi;
1711b362b15af34006e6a11974088a46d42b903418eJohann    union b_mode_info bmi[16];
17290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} MODE_INFO;
17390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1741b362b15af34006e6a11974088a46d42b903418eJohann#if CONFIG_MULTI_RES_ENCODING
1751b362b15af34006e6a11974088a46d42b903418eJohann/* The mb-level information needed to be stored for higher-resolution encoder */
1761b362b15af34006e6a11974088a46d42b903418eJohanntypedef struct
1771b362b15af34006e6a11974088a46d42b903418eJohann{
1781b362b15af34006e6a11974088a46d42b903418eJohann    MB_PREDICTION_MODE mode;
1791b362b15af34006e6a11974088a46d42b903418eJohann    MV_REFERENCE_FRAME ref_frame;
1801b362b15af34006e6a11974088a46d42b903418eJohann    int_mv mv;
1811b362b15af34006e6a11974088a46d42b903418eJohann    int dissim;    /* dissimilarity level of the macroblock */
1821b362b15af34006e6a11974088a46d42b903418eJohann} LOWER_RES_MB_INFO;
18390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1841b362b15af34006e6a11974088a46d42b903418eJohann/* The frame-level information needed to be stored for higher-resolution
1851b362b15af34006e6a11974088a46d42b903418eJohann *  encoder */
18690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef struct
18790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{
1881b362b15af34006e6a11974088a46d42b903418eJohann    FRAME_TYPE frame_type;
1891b362b15af34006e6a11974088a46d42b903418eJohann    int is_frame_dropped;
1901b362b15af34006e6a11974088a46d42b903418eJohann    /* The frame number of each reference frames */
1911b362b15af34006e6a11974088a46d42b903418eJohann    unsigned int low_res_ref_frames[MAX_REF_FRAMES];
1921b362b15af34006e6a11974088a46d42b903418eJohann    LOWER_RES_MB_INFO *mb_info;
1931b362b15af34006e6a11974088a46d42b903418eJohann} LOWER_RES_FRAME_INFO;
1941b362b15af34006e6a11974088a46d42b903418eJohann#endif
1951b362b15af34006e6a11974088a46d42b903418eJohann
1961b362b15af34006e6a11974088a46d42b903418eJohanntypedef struct blockd
1971b362b15af34006e6a11974088a46d42b903418eJohann{
19890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    short *qcoeff;
19990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    short *dqcoeff;
20090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned char  *predictor;
201538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    short *dequant;
20290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
2031b362b15af34006e6a11974088a46d42b903418eJohann    int offset;
2041b362b15af34006e6a11974088a46d42b903418eJohann    char *eob;
20590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
2061b362b15af34006e6a11974088a46d42b903418eJohann    union b_mode_info bmi;
20790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} BLOCKD;
20890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
2091b362b15af34006e6a11974088a46d42b903418eJohanntypedef void (*vp8_subpix_fn_t)(unsigned char *src, int src_pitch, int xofst, int yofst, unsigned char *dst, int dst_pitch);
2101b362b15af34006e6a11974088a46d42b903418eJohann
2111b362b15af34006e6a11974088a46d42b903418eJohanntypedef struct macroblockd
21290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{
21390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    DECLARE_ALIGNED(16, unsigned char,  predictor[384]);
21490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    DECLARE_ALIGNED(16, short, qcoeff[400]);
21590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    DECLARE_ALIGNED(16, short, dqcoeff[400]);
216f71323e297a928af368937089d3ed71239786f86Andreas Huber    DECLARE_ALIGNED(16, char,  eobs[25]);
21790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
2181b362b15af34006e6a11974088a46d42b903418eJohann    DECLARE_ALIGNED(16, short,  dequant_y1[16]);
2191b362b15af34006e6a11974088a46d42b903418eJohann    DECLARE_ALIGNED(16, short,  dequant_y1_dc[16]);
2201b362b15af34006e6a11974088a46d42b903418eJohann    DECLARE_ALIGNED(16, short,  dequant_y2[16]);
2211b362b15af34006e6a11974088a46d42b903418eJohann    DECLARE_ALIGNED(16, short,  dequant_uv[16]);
2221b362b15af34006e6a11974088a46d42b903418eJohann
223538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* 16 Y blocks, 4 U, 4 V, 1 DC 2nd order block, each with 16 entries. */
22490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    BLOCKD block[25];
2251b362b15af34006e6a11974088a46d42b903418eJohann    int fullpixel_mask;
22690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
227538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    YV12_BUFFER_CONFIG pre; /* Filtered copy of previous frame reconstruction */
22890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    YV12_BUFFER_CONFIG dst;
22990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
23090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    MODE_INFO *mode_info_context;
23190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int mode_info_stride;
23290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
23390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    FRAME_TYPE frame_type;
23490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
23590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int up_available;
23690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int left_available;
23790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
2381b362b15af34006e6a11974088a46d42b903418eJohann    unsigned char *recon_above[3];
2391b362b15af34006e6a11974088a46d42b903418eJohann    unsigned char *recon_left[3];
2401b362b15af34006e6a11974088a46d42b903418eJohann    int recon_left_stride[2];
2411b362b15af34006e6a11974088a46d42b903418eJohann
242538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* Y,U,V,Y2 */
243f71323e297a928af368937089d3ed71239786f86Andreas Huber    ENTROPY_CONTEXT_PLANES *above_context;
244f71323e297a928af368937089d3ed71239786f86Andreas Huber    ENTROPY_CONTEXT_PLANES *left_context;
24590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
246538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* 0 indicates segmentation at MB level is not enabled. Otherwise the individual bits indicate which features are active. */
24790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned char segmentation_enabled;
24890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
249538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* 0 (do not update) 1 (update) the macroblock segmentation map. */
25090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned char update_mb_segmentation_map;
25190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
252538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* 0 (do not update) 1 (update) the macroblock segmentation feature data. */
25390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned char update_mb_segmentation_data;
25490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
255538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* 0 (do not update) 1 (update) the macroblock segmentation feature data. */
25690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned char mb_segement_abs_delta;
25790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
258538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* Per frame flags that define which MB level features (such as quantizer or loop filter level) */
259538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* are enabled and when enabled the proabilities used to decode the per MB flags in MB_MODE_INFO */
260538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    vp8_prob mb_segment_tree_probs[MB_FEATURE_TREE_PROBS];         /* Probability Tree used to code Segment number */
26190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
262538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    signed char segment_feature_data[MB_LVL_MAX][MAX_MB_SEGMENTS];            /* Segment parameters */
26390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
264538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* mode_based Loop filter adjustment */
26590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned char mode_ref_lf_delta_enabled;
26690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned char mode_ref_lf_delta_update;
26790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
268538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* Delta values have the range +/- MAX_LOOP_FILTER */
269538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    signed char last_ref_lf_deltas[MAX_REF_LF_DELTAS];                /* 0 = Intra, Last, GF, ARF */
270538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    signed char ref_lf_deltas[MAX_REF_LF_DELTAS];                     /* 0 = Intra, Last, GF, ARF */
271538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    signed char last_mode_lf_deltas[MAX_MODE_LF_DELTAS];                      /* 0 = BPRED, ZERO_MV, MV, SPLIT */
272538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    signed char mode_lf_deltas[MAX_MODE_LF_DELTAS];                           /* 0 = BPRED, ZERO_MV, MV, SPLIT */
27390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
274538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* Distance of MB away from frame edges */
27590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int mb_to_left_edge;
27690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int mb_to_right_edge;
27790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int mb_to_top_edge;
27890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int mb_to_bottom_edge;
27990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
2801b362b15af34006e6a11974088a46d42b903418eJohann
2811b362b15af34006e6a11974088a46d42b903418eJohann
28290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vp8_subpix_fn_t  subpixel_predict;
28390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vp8_subpix_fn_t  subpixel_predict8x4;
28490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vp8_subpix_fn_t  subpixel_predict8x8;
28590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vp8_subpix_fn_t  subpixel_predict16x16;
28690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
28790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    void *current_bc;
28890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
28979f15823c34ae1e423108295e416213200bb280fAndreas Huber    int corrupted;
29079f15823c34ae1e423108295e416213200bb280fAndreas Huber
2911b362b15af34006e6a11974088a46d42b903418eJohann#if ARCH_X86 || ARCH_X86_64
2921b362b15af34006e6a11974088a46d42b903418eJohann    /* This is an intermediate buffer currently used in sub-pixel motion search
2931b362b15af34006e6a11974088a46d42b903418eJohann     * to keep a copy of the reference area. This buffer can be used for other
2941b362b15af34006e6a11974088a46d42b903418eJohann     * purpose.
2951b362b15af34006e6a11974088a46d42b903418eJohann     */
2961b362b15af34006e6a11974088a46d42b903418eJohann    DECLARE_ALIGNED(32, unsigned char, y_buf[22*32]);
29790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif
29890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} MACROBLOCKD;
29990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
30090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
30190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern void vp8_build_block_doffsets(MACROBLOCKD *x);
30290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern void vp8_setup_block_dptrs(MACROBLOCKD *x);
30390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
304b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#ifdef __cplusplus
305b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian}  // extern "C"
306b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#endif
307b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian
308b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#endif  // VP8_COMMON_BLOCKD_H_
309