blockd.h revision 79f15823c34ae1e423108295e416213200bb280f
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