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