1167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org/* 2167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org * 4167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org * Use of this source code is governed by a BSD-style license 5167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org * that can be found in the LICENSE file in the root of the source 6167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org * tree. An additional intellectual property rights grant can be found 7167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org * in the file PATENTS. All contributing project authors may 8167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org * be found in the AUTHORS file in the root of the source tree. 9167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org */ 10167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 11167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#include "vpx_config.h" 126fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#include "vp8_rtcd.h" 13167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 14167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 15167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgvoid vp8_dequant_idct_add_y_block_v6(short *q, short *dq, 16167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org unsigned char *dst, 17167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int stride, char *eobs) 18167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org{ 19167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int i; 20167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 21167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org for (i = 0; i < 4; i++) 22167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 23167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org if (eobs[0] > 1) 24167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org vp8_dequant_idct_add_v6 (q, dq, dst, stride); 25167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org else if (eobs[0] == 1) 26167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 27167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org vp8_dc_only_idct_add_v6 (q[0]*dq[0], dst, stride, dst, stride); 28167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org ((int *)q)[0] = 0; 29167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 30167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 31167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org if (eobs[1] > 1) 32167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org vp8_dequant_idct_add_v6 (q+16, dq, dst+4, stride); 33167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org else if (eobs[1] == 1) 34167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 35167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org vp8_dc_only_idct_add_v6 (q[16]*dq[0], dst+4, stride, dst+4, stride); 36167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org ((int *)(q+16))[0] = 0; 37167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 38167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 39167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org if (eobs[2] > 1) 40167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org vp8_dequant_idct_add_v6 (q+32, dq, dst+8, stride); 41167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org else if (eobs[2] == 1) 42167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 43167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org vp8_dc_only_idct_add_v6 (q[32]*dq[0], dst+8, stride, dst+8, stride); 44167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org ((int *)(q+32))[0] = 0; 45167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 46167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 47167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org if (eobs[3] > 1) 48167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org vp8_dequant_idct_add_v6 (q+48, dq, dst+12, stride); 49167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org else if (eobs[3] == 1) 50167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 51167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org vp8_dc_only_idct_add_v6 (q[48]*dq[0], dst+12, stride,dst+12,stride); 52167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org ((int *)(q+48))[0] = 0; 53167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 54167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 55167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org q += 64; 56167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst += 4*stride; 57167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org eobs += 4; 58167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 59167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org} 60167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 61167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgvoid vp8_dequant_idct_add_uv_block_v6(short *q, short *dq, 62167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org unsigned char *dstu, 63167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org unsigned char *dstv, 64167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int stride, char *eobs) 65167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org{ 66167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int i; 67167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 68167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org for (i = 0; i < 2; i++) 69167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 70167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org if (eobs[0] > 1) 71167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org vp8_dequant_idct_add_v6 (q, dq, dstu, stride); 72167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org else if (eobs[0] == 1) 73167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 74167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org vp8_dc_only_idct_add_v6 (q[0]*dq[0], dstu, stride, dstu, stride); 75167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org ((int *)q)[0] = 0; 76167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 77167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 78167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org if (eobs[1] > 1) 79167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org vp8_dequant_idct_add_v6 (q+16, dq, dstu+4, stride); 80167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org else if (eobs[1] == 1) 81167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 82167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org vp8_dc_only_idct_add_v6 (q[16]*dq[0], dstu+4, stride, 83167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dstu+4, stride); 84167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org ((int *)(q+16))[0] = 0; 85167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 86167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 87167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org q += 32; 88167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dstu += 4*stride; 89167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org eobs += 2; 90167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 91167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 92167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org for (i = 0; i < 2; i++) 93167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 94167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org if (eobs[0] > 1) 95167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org vp8_dequant_idct_add_v6 (q, dq, dstv, stride); 96167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org else if (eobs[0] == 1) 97167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 98167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org vp8_dc_only_idct_add_v6 (q[0]*dq[0], dstv, stride, dstv, stride); 99167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org ((int *)q)[0] = 0; 100167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 101167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 102167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org if (eobs[1] > 1) 103167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org vp8_dequant_idct_add_v6 (q+16, dq, dstv+4, stride); 104167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org else if (eobs[1] == 1) 105167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 106167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org vp8_dc_only_idct_add_v6 (q[16]*dq[0], dstv+4, stride, 107167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dstv+4, stride); 108167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org ((int *)(q+16))[0] = 0; 109167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 110167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 111167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org q += 32; 112167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dstv += 4*stride; 113167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org eobs += 2; 114167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 115167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org} 116