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