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" 13085cab8fbb48aa8b9f7e3e6d5a2694afd0ffe2e0johannkoenig@chromium.org#include "vpx_mem/vpx_mem.h" 14167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 15167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgvoid vp8_dequant_idct_add_c(short *input, short *dq, 16167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org unsigned char *dest, int stride); 17167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgvoid vp8_dc_only_idct_add_c(short input_dc, unsigned char * pred, 18167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int pred_stride, unsigned char *dst_ptr, 19167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int dst_stride); 20167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 21167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgvoid vp8_dequant_idct_add_y_block_c 22167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org (short *q, short *dq, 23167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org unsigned char *dst, int stride, char *eobs) 24167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org{ 25167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int i, j; 26167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 27167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org for (i = 0; i < 4; i++) 28167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 29167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org for (j = 0; j < 4; j++) 30167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 31167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org if (*eobs++ > 1) 32167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org vp8_dequant_idct_add_c (q, dq, dst, stride); 33167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org else 34167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 35167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org vp8_dc_only_idct_add_c (q[0]*dq[0], dst, stride, dst, stride); 36085cab8fbb48aa8b9f7e3e6d5a2694afd0ffe2e0johannkoenig@chromium.org vpx_memset(q, 0, 2 * sizeof(q[0])); 37167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 38167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 39167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org q += 16; 40167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst += 4; 41167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 42167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 43167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dst += 4*stride - 16; 44167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 45167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org} 46167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 47167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgvoid vp8_dequant_idct_add_uv_block_c 48167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org (short *q, short *dq, 49167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org unsigned char *dstu, unsigned char *dstv, int stride, char *eobs) 50167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org{ 51167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int i, j; 52167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 53167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org for (i = 0; i < 2; i++) 54167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 55167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org for (j = 0; j < 2; j++) 56167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 57167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org if (*eobs++ > 1) 58167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org vp8_dequant_idct_add_c (q, dq, dstu, stride); 59167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org else 60167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 61167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org vp8_dc_only_idct_add_c (q[0]*dq[0], dstu, stride, dstu, stride); 62085cab8fbb48aa8b9f7e3e6d5a2694afd0ffe2e0johannkoenig@chromium.org vpx_memset(q, 0, 2 * sizeof(q[0])); 63167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 64167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 65167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org q += 16; 66167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dstu += 4; 67167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 68167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 69167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dstu += 4*stride - 8; 70167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 71167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 72167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org for (i = 0; i < 2; i++) 73167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 74167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org for (j = 0; j < 2; j++) 75167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 76167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org if (*eobs++ > 1) 77167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org vp8_dequant_idct_add_c (q, dq, dstv, stride); 78167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org else 79167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 80167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org vp8_dc_only_idct_add_c (q[0]*dq[0], dstv, stride, dstv, stride); 81085cab8fbb48aa8b9f7e3e6d5a2694afd0ffe2e0johannkoenig@chromium.org vpx_memset(q, 0, 2 * sizeof(q[0])); 82167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 83167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 84167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org q += 16; 85167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dstv += 4; 86167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 87167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 88167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org dstv += 4*stride - 8; 89167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 90167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org} 91