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 125c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#include "vpx_config.h" 136fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#include "vp8_rtcd.h" 145c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#include "blockd.h" 155c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org 16ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgvoid vp8_intra4x4_predict_c(unsigned char *Above, 17ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *yleft, int left_stride, 186fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int _b_mode, 19ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *dst, int dst_stride, 20ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char top_left) 21474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{ 22474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int i, r, c; 236fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org B_PREDICTION_MODE b_mode = (B_PREDICTION_MODE)_b_mode; 24474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned char Left[4]; 255c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org Left[0] = yleft[0]; 265c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org Left[1] = yleft[left_stride]; 275c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org Left[2] = yleft[2 * left_stride]; 285c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org Left[3] = yleft[3 * left_stride]; 29474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 30474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org switch (b_mode) 31474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org { 32474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org case B_DC_PRED: 33474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org { 34474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int expected_dc = 0; 35474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 36474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org for (i = 0; i < 4; i++) 37474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org { 38474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org expected_dc += Above[i]; 39474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org expected_dc += Left[i]; 40474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 41474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 42474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org expected_dc = (expected_dc + 4) >> 3; 43474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 44474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org for (r = 0; r < 4; r++) 45474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org { 46474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org for (c = 0; c < 4; c++) 47474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org { 48167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[c] = expected_dc; 49474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 50474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 51167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst += dst_stride; 52474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 53474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 54474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org break; 55474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org case B_TM_PRED: 56474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org { 57474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org /* prediction similar to true_motion prediction */ 58474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org for (r = 0; r < 4; r++) 59474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org { 60474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org for (c = 0; c < 4; c++) 61474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org { 62474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int pred = Above[c] - top_left + Left[r]; 63474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 64474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org if (pred < 0) 65474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pred = 0; 66474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 67474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org if (pred > 255) 68474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pred = 255; 69474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 70167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[c] = pred; 71474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 72474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 73167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst += dst_stride; 74474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 75474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 76474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org break; 77474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 78474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org case B_VE_PRED: 79474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org { 80474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 81474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned int ap[4]; 82474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ap[0] = (top_left + 2 * Above[0] + Above[1] + 2) >> 2; 83474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ap[1] = (Above[0] + 2 * Above[1] + Above[2] + 2) >> 2; 84474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ap[2] = (Above[1] + 2 * Above[2] + Above[3] + 2) >> 2; 85474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ap[3] = (Above[2] + 2 * Above[3] + Above[4] + 2) >> 2; 86474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 87474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org for (r = 0; r < 4; r++) 88474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org { 89474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org for (c = 0; c < 4; c++) 90474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org { 91474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 92167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[c] = ap[c]; 93474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 94474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 95167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst += dst_stride; 96474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 97474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 98474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 99474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org break; 100474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 101474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 102474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org case B_HE_PRED: 103474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org { 104474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 105474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned int lp[4]; 106474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lp[0] = (top_left + 2 * Left[0] + Left[1] + 2) >> 2; 107474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lp[1] = (Left[0] + 2 * Left[1] + Left[2] + 2) >> 2; 108474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lp[2] = (Left[1] + 2 * Left[2] + Left[3] + 2) >> 2; 109474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lp[3] = (Left[2] + 2 * Left[3] + Left[3] + 2) >> 2; 110474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 111474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org for (r = 0; r < 4; r++) 112474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org { 113474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org for (c = 0; c < 4; c++) 114474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org { 115167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[c] = lp[r]; 116474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 117474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 118167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst += dst_stride; 119474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 120474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 121474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org break; 122474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org case B_LD_PRED: 123474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org { 124474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned char *ptr = Above; 125167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[0 * dst_stride + 0] = (ptr[0] + ptr[1] * 2 + ptr[2] + 2) >> 2; 126167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[0 * dst_stride + 1] = 127167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[1 * dst_stride + 0] = (ptr[1] + ptr[2] * 2 + ptr[3] + 2) >> 2; 128167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[0 * dst_stride + 2] = 129167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[1 * dst_stride + 1] = 130167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[2 * dst_stride + 0] = (ptr[2] + ptr[3] * 2 + ptr[4] + 2) >> 2; 131167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[0 * dst_stride + 3] = 132167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[1 * dst_stride + 2] = 133167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[2 * dst_stride + 1] = 134167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[3 * dst_stride + 0] = (ptr[3] + ptr[4] * 2 + ptr[5] + 2) >> 2; 135167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[1 * dst_stride + 3] = 136167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[2 * dst_stride + 2] = 137167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[3 * dst_stride + 1] = (ptr[4] + ptr[5] * 2 + ptr[6] + 2) >> 2; 138167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[2 * dst_stride + 3] = 139167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[3 * dst_stride + 2] = (ptr[5] + ptr[6] * 2 + ptr[7] + 2) >> 2; 140167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[3 * dst_stride + 3] = (ptr[6] + ptr[7] * 2 + ptr[7] + 2) >> 2; 141474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 142474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 143474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org break; 144474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org case B_RD_PRED: 145474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org { 146474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 147474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned char pp[9]; 148474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 149474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pp[0] = Left[3]; 150474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pp[1] = Left[2]; 151474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pp[2] = Left[1]; 152474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pp[3] = Left[0]; 153474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pp[4] = top_left; 154474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pp[5] = Above[0]; 155474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pp[6] = Above[1]; 156474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pp[7] = Above[2]; 157474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pp[8] = Above[3]; 158474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 159167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[3 * dst_stride + 0] = (pp[0] + pp[1] * 2 + pp[2] + 2) >> 2; 160167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[3 * dst_stride + 1] = 161167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[2 * dst_stride + 0] = (pp[1] + pp[2] * 2 + pp[3] + 2) >> 2; 162167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[3 * dst_stride + 2] = 163167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[2 * dst_stride + 1] = 164167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[1 * dst_stride + 0] = (pp[2] + pp[3] * 2 + pp[4] + 2) >> 2; 165167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[3 * dst_stride + 3] = 166167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[2 * dst_stride + 2] = 167167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[1 * dst_stride + 1] = 168167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[0 * dst_stride + 0] = (pp[3] + pp[4] * 2 + pp[5] + 2) >> 2; 169167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[2 * dst_stride + 3] = 170167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[1 * dst_stride + 2] = 171167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[0 * dst_stride + 1] = (pp[4] + pp[5] * 2 + pp[6] + 2) >> 2; 172167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[1 * dst_stride + 3] = 173167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[0 * dst_stride + 2] = (pp[5] + pp[6] * 2 + pp[7] + 2) >> 2; 174167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[0 * dst_stride + 3] = (pp[6] + pp[7] * 2 + pp[8] + 2) >> 2; 175474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 176474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 177474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org break; 178474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org case B_VR_PRED: 179474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org { 180474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 181474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned char pp[9]; 182474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 183474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pp[0] = Left[3]; 184474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pp[1] = Left[2]; 185474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pp[2] = Left[1]; 186474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pp[3] = Left[0]; 187474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pp[4] = top_left; 188474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pp[5] = Above[0]; 189474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pp[6] = Above[1]; 190474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pp[7] = Above[2]; 191474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pp[8] = Above[3]; 192474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 193474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 194167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[3 * dst_stride + 0] = (pp[1] + pp[2] * 2 + pp[3] + 2) >> 2; 195167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[2 * dst_stride + 0] = (pp[2] + pp[3] * 2 + pp[4] + 2) >> 2; 196167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[3 * dst_stride + 1] = 197167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[1 * dst_stride + 0] = (pp[3] + pp[4] * 2 + pp[5] + 2) >> 2; 198167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[2 * dst_stride + 1] = 199167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[0 * dst_stride + 0] = (pp[4] + pp[5] + 1) >> 1; 200167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[3 * dst_stride + 2] = 201167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[1 * dst_stride + 1] = (pp[4] + pp[5] * 2 + pp[6] + 2) >> 2; 202167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[2 * dst_stride + 2] = 203167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[0 * dst_stride + 1] = (pp[5] + pp[6] + 1) >> 1; 204167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[3 * dst_stride + 3] = 205167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[1 * dst_stride + 2] = (pp[5] + pp[6] * 2 + pp[7] + 2) >> 2; 206167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[2 * dst_stride + 3] = 207167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[0 * dst_stride + 2] = (pp[6] + pp[7] + 1) >> 1; 208167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[1 * dst_stride + 3] = (pp[6] + pp[7] * 2 + pp[8] + 2) >> 2; 209167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[0 * dst_stride + 3] = (pp[7] + pp[8] + 1) >> 1; 210474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 211474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 212474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org break; 213474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org case B_VL_PRED: 214474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org { 215474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 216474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned char *pp = Above; 217474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 218167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[0 * dst_stride + 0] = (pp[0] + pp[1] + 1) >> 1; 219167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[1 * dst_stride + 0] = (pp[0] + pp[1] * 2 + pp[2] + 2) >> 2; 220167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[2 * dst_stride + 0] = 221167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[0 * dst_stride + 1] = (pp[1] + pp[2] + 1) >> 1; 222167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[1 * dst_stride + 1] = 223167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[3 * dst_stride + 0] = (pp[1] + pp[2] * 2 + pp[3] + 2) >> 2; 224167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[2 * dst_stride + 1] = 225167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[0 * dst_stride + 2] = (pp[2] + pp[3] + 1) >> 1; 226167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[3 * dst_stride + 1] = 227167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[1 * dst_stride + 2] = (pp[2] + pp[3] * 2 + pp[4] + 2) >> 2; 228167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[0 * dst_stride + 3] = 229167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[2 * dst_stride + 2] = (pp[3] + pp[4] + 1) >> 1; 230167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[1 * dst_stride + 3] = 231167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[3 * dst_stride + 2] = (pp[3] + pp[4] * 2 + pp[5] + 2) >> 2; 232167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[2 * dst_stride + 3] = (pp[4] + pp[5] * 2 + pp[6] + 2) >> 2; 233167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[3 * dst_stride + 3] = (pp[5] + pp[6] * 2 + pp[7] + 2) >> 2; 234474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 235474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org break; 236474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 237474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org case B_HD_PRED: 238474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org { 239474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned char pp[9]; 240474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pp[0] = Left[3]; 241474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pp[1] = Left[2]; 242474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pp[2] = Left[1]; 243474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pp[3] = Left[0]; 244474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pp[4] = top_left; 245474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pp[5] = Above[0]; 246474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pp[6] = Above[1]; 247474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pp[7] = Above[2]; 248474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pp[8] = Above[3]; 249474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 250474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 251167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[3 * dst_stride + 0] = (pp[0] + pp[1] + 1) >> 1; 252167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[3 * dst_stride + 1] = (pp[0] + pp[1] * 2 + pp[2] + 2) >> 2; 253167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[2 * dst_stride + 0] = 254167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[3 * dst_stride + 2] = (pp[1] + pp[2] + 1) >> 1; 255167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[2 * dst_stride + 1] = 256167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[3 * dst_stride + 3] = (pp[1] + pp[2] * 2 + pp[3] + 2) >> 2; 257167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[2 * dst_stride + 2] = 258167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[1 * dst_stride + 0] = (pp[2] + pp[3] + 1) >> 1; 259167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[2 * dst_stride + 3] = 260167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[1 * dst_stride + 1] = (pp[2] + pp[3] * 2 + pp[4] + 2) >> 2; 261167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[1 * dst_stride + 2] = 262167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[0 * dst_stride + 0] = (pp[3] + pp[4] + 1) >> 1; 263167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[1 * dst_stride + 3] = 264167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[0 * dst_stride + 1] = (pp[3] + pp[4] * 2 + pp[5] + 2) >> 2; 265167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[0 * dst_stride + 2] = (pp[4] + pp[5] * 2 + pp[6] + 2) >> 2; 266167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[0 * dst_stride + 3] = (pp[5] + pp[6] * 2 + pp[7] + 2) >> 2; 267474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 268474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org break; 269474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 270474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 271474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org case B_HU_PRED: 272474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org { 273474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned char *pp = Left; 274167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[0 * dst_stride + 0] = (pp[0] + pp[1] + 1) >> 1; 275167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[0 * dst_stride + 1] = (pp[0] + pp[1] * 2 + pp[2] + 2) >> 2; 276167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[0 * dst_stride + 2] = 277167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[1 * dst_stride + 0] = (pp[1] + pp[2] + 1) >> 1; 278167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[0 * dst_stride + 3] = 279167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[1 * dst_stride + 1] = (pp[1] + pp[2] * 2 + pp[3] + 2) >> 2; 280167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[1 * dst_stride + 2] = 281167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[2 * dst_stride + 0] = (pp[2] + pp[3] + 1) >> 1; 282167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[1 * dst_stride + 3] = 283167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[2 * dst_stride + 1] = (pp[2] + pp[3] * 2 + pp[3] + 2) >> 2; 284167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[2 * dst_stride + 2] = 285167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[2 * dst_stride + 3] = 286167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[3 * dst_stride + 0] = 287167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[3 * dst_stride + 1] = 288167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[3 * dst_stride + 2] = 289167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst[3 * dst_stride + 3] = pp[3]; 290474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 291474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org break; 292474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 293ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org default: 294ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org break; 295474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 296474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 297474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 298