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
1290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef __INC_BLOCKD_H
1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define __INC_BLOCKD_H
1490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vpx_log(const char *format, ...);
1690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "vpx_ports/config.h"
1890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "vpx_scale/yv12config.h"
1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "mv.h"
2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "treecoder.h"
2190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "subpixel.h"
2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "vpx_ports/mem.h"
2390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
2490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define TRUE    1
2590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define FALSE   0
2690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
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) \
6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    Dest = ((A)!=0) + ((B)!=0);
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
14090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef struct
14190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{
14290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    B_PREDICTION_MODE mode;
14390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    union
14490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    {
14590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int as_int;
14690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        MV  as_mv;
14790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    } mv;
14890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} B_MODE_INFO;
14990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef enum
15290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{
15390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    INTRA_FRAME = 0,
15490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    LAST_FRAME = 1,
15590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    GOLDEN_FRAME = 2,
15690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ALTREF_FRAME = 3,
15790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    MAX_REF_FRAMES = 4
15890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} MV_REFERENCE_FRAME;
15990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
16090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef struct
16190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{
16290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    MB_PREDICTION_MODE mode, uv_mode;
16390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    MV_REFERENCE_FRAME ref_frame;
16490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    union
16590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    {
16690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int as_int;
16790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        MV  as_mv;
16890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    } mv;
16990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
170538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    unsigned char partitioning;
171538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    unsigned char mb_skip_coeff;                                /* does this mb has coefficients at all, 1=no coefficients, 0=need decode tokens */
172f71323e297a928af368937089d3ed71239786f86Andreas Huber    unsigned char dc_diff;
173f71323e297a928af368937089d3ed71239786f86Andreas Huber    unsigned char need_to_clamp_mvs;
17490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
175538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    unsigned char segment_id;                  /* Which set of segmentation parameters should be used for this MB */
176f71323e297a928af368937089d3ed71239786f86Andreas Huber
177538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    unsigned char force_no_skip; /* encoder only */
17890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} MB_MODE_INFO;
17990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
18090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
18190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef struct
18290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{
18390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    MB_MODE_INFO mbmi;
18490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    B_MODE_INFO bmi[16];
18590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} MODE_INFO;
18690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
18790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
18890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef struct
18990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{
19090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    short *qcoeff;
19190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    short *dqcoeff;
19290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned char  *predictor;
19390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    short *diff;
19490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    short *reference;
19590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
196538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    short *dequant;
19790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
198538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* 16 Y blocks, 4 U blocks, 4 V blocks each with 16 entries */
19990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned char **base_pre;
20090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int pre;
20190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int pre_stride;
20290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
20390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned char **base_dst;
20490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int dst;
20590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int dst_stride;
20690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
20790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int eob;
20890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
20990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    B_MODE_INFO bmi;
21090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
21190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} BLOCKD;
21290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
21390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef struct
21490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{
215538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    DECLARE_ALIGNED(16, short, diff[400]);      /* from idct diff */
21690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    DECLARE_ALIGNED(16, unsigned char,  predictor[384]);
217538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/* not used    DECLARE_ALIGNED(16, short, reference[384]); */
21890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    DECLARE_ALIGNED(16, short, qcoeff[400]);
21990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    DECLARE_ALIGNED(16, short, dqcoeff[400]);
220f71323e297a928af368937089d3ed71239786f86Andreas Huber    DECLARE_ALIGNED(16, char,  eobs[25]);
22190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
222538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* 16 Y blocks, 4 U, 4 V, 1 DC 2nd order block, each with 16 entries. */
22390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    BLOCKD block[25];
22490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
225538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    YV12_BUFFER_CONFIG pre; /* Filtered copy of previous frame reconstruction */
22690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    YV12_BUFFER_CONFIG dst;
22790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
22890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    MODE_INFO *mode_info_context;
22990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int mode_info_stride;
23090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
23190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    FRAME_TYPE frame_type;
23290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
23390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int up_available;
23490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int left_available;
23590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
236538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* Y,U,V,Y2 */
237f71323e297a928af368937089d3ed71239786f86Andreas Huber    ENTROPY_CONTEXT_PLANES *above_context;
238f71323e297a928af368937089d3ed71239786f86Andreas Huber    ENTROPY_CONTEXT_PLANES *left_context;
23990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
240538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* 0 indicates segmentation at MB level is not enabled. Otherwise the individual bits indicate which features are active. */
24190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned char segmentation_enabled;
24290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
243538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* 0 (do not update) 1 (update) the macroblock segmentation map. */
24490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned char update_mb_segmentation_map;
24590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
246538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* 0 (do not update) 1 (update) the macroblock segmentation feature data. */
24790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned char update_mb_segmentation_data;
24890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
249538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* 0 (do not update) 1 (update) the macroblock segmentation feature data. */
25090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned char mb_segement_abs_delta;
25190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
252538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* Per frame flags that define which MB level features (such as quantizer or loop filter level) */
253538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* are enabled and when enabled the proabilities used to decode the per MB flags in MB_MODE_INFO */
254538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    vp8_prob mb_segment_tree_probs[MB_FEATURE_TREE_PROBS];         /* Probability Tree used to code Segment number */
25590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
256538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    signed char segment_feature_data[MB_LVL_MAX][MAX_MB_SEGMENTS];            /* Segment parameters */
25790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
258538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* mode_based Loop filter adjustment */
25990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned char mode_ref_lf_delta_enabled;
26090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned char mode_ref_lf_delta_update;
26190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
262538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* Delta values have the range +/- MAX_LOOP_FILTER */
263538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    signed char last_ref_lf_deltas[MAX_REF_LF_DELTAS];                /* 0 = Intra, Last, GF, ARF */
264538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    signed char ref_lf_deltas[MAX_REF_LF_DELTAS];                     /* 0 = Intra, Last, GF, ARF */
265538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    signed char last_mode_lf_deltas[MAX_MODE_LF_DELTAS];                      /* 0 = BPRED, ZERO_MV, MV, SPLIT */
266538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    signed char mode_lf_deltas[MAX_MODE_LF_DELTAS];                           /* 0 = BPRED, ZERO_MV, MV, SPLIT */
26790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
268538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* Distance of MB away from frame edges */
26990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int mb_to_left_edge;
27090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int mb_to_right_edge;
27190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int mb_to_top_edge;
27290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int mb_to_bottom_edge;
27390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
27490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned int frames_since_golden;
27590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned int frames_till_alt_ref_frame;
27690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vp8_subpix_fn_t  subpixel_predict;
27790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vp8_subpix_fn_t  subpixel_predict8x4;
27890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vp8_subpix_fn_t  subpixel_predict8x8;
27990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vp8_subpix_fn_t  subpixel_predict16x16;
28090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
28190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    void *current_bc;
28290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
28379f15823c34ae1e423108295e416213200bb280fAndreas Huber    int corrupted;
28479f15823c34ae1e423108295e416213200bb280fAndreas Huber
28590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#if CONFIG_RUNTIME_CPU_DETECT
28690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    struct VP8_COMMON_RTCD  *rtcd;
28790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif
28890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} MACROBLOCKD;
28990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
29090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
29190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern void vp8_build_block_doffsets(MACROBLOCKD *x);
29290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern void vp8_setup_block_dptrs(MACROBLOCKD *x);
29390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
29490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif  /* __INC_BLOCKD_H */
295