11b362b15af34006e6a11974088a46d42b903418eJohann/* 21b362b15af34006e6a11974088a46d42b903418eJohann * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 31b362b15af34006e6a11974088a46d42b903418eJohann * 41b362b15af34006e6a11974088a46d42b903418eJohann * Use of this source code is governed by a BSD-style license 51b362b15af34006e6a11974088a46d42b903418eJohann * that can be found in the LICENSE file in the root of the source 61b362b15af34006e6a11974088a46d42b903418eJohann * tree. An additional intellectual property rights grant can be found 71b362b15af34006e6a11974088a46d42b903418eJohann * in the file PATENTS. All contributing project authors may 81b362b15af34006e6a11974088a46d42b903418eJohann * be found in the AUTHORS file in the root of the source tree. 91b362b15af34006e6a11974088a46d42b903418eJohann */ 101b362b15af34006e6a11974088a46d42b903418eJohann 111b362b15af34006e6a11974088a46d42b903418eJohann 12b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#ifndef VP8_COMMON_INVTRANS_H_ 13b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#define VP8_COMMON_INVTRANS_H_ 141b362b15af34006e6a11974088a46d42b903418eJohann 151b362b15af34006e6a11974088a46d42b903418eJohann#include "vpx_config.h" 16ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#include "vp8_rtcd.h" 171b362b15af34006e6a11974088a46d42b903418eJohann#include "blockd.h" 181b362b15af34006e6a11974088a46d42b903418eJohann#include "onyxc_int.h" 191b362b15af34006e6a11974088a46d42b903418eJohann 201b362b15af34006e6a11974088a46d42b903418eJohann#if CONFIG_MULTITHREAD 211b362b15af34006e6a11974088a46d42b903418eJohann#include "vpx_mem/vpx_mem.h" 221b362b15af34006e6a11974088a46d42b903418eJohann#endif 231b362b15af34006e6a11974088a46d42b903418eJohann 24b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#ifdef __cplusplus 25b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianextern "C" { 26b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#endif 27b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 281b362b15af34006e6a11974088a46d42b903418eJohannstatic void eob_adjust(char *eobs, short *diff) 291b362b15af34006e6a11974088a46d42b903418eJohann{ 301b362b15af34006e6a11974088a46d42b903418eJohann /* eob adjust.... the idct can only skip if both the dc and eob are zero */ 311b362b15af34006e6a11974088a46d42b903418eJohann int js; 321b362b15af34006e6a11974088a46d42b903418eJohann for(js = 0; js < 16; js++) 331b362b15af34006e6a11974088a46d42b903418eJohann { 341b362b15af34006e6a11974088a46d42b903418eJohann if((eobs[js] == 0) && (diff[0] != 0)) 351b362b15af34006e6a11974088a46d42b903418eJohann eobs[js]++; 361b362b15af34006e6a11974088a46d42b903418eJohann diff+=16; 371b362b15af34006e6a11974088a46d42b903418eJohann } 381b362b15af34006e6a11974088a46d42b903418eJohann} 391b362b15af34006e6a11974088a46d42b903418eJohann 401b362b15af34006e6a11974088a46d42b903418eJohannstatic void vp8_inverse_transform_mby(MACROBLOCKD *xd) 411b362b15af34006e6a11974088a46d42b903418eJohann{ 421b362b15af34006e6a11974088a46d42b903418eJohann short *DQC = xd->dequant_y1; 431b362b15af34006e6a11974088a46d42b903418eJohann 441b362b15af34006e6a11974088a46d42b903418eJohann if (xd->mode_info_context->mbmi.mode != SPLITMV) 451b362b15af34006e6a11974088a46d42b903418eJohann { 461b362b15af34006e6a11974088a46d42b903418eJohann /* do 2nd order transform on the dc block */ 471b362b15af34006e6a11974088a46d42b903418eJohann if (xd->eobs[24] > 1) 481b362b15af34006e6a11974088a46d42b903418eJohann { 491b362b15af34006e6a11974088a46d42b903418eJohann vp8_short_inv_walsh4x4 501b362b15af34006e6a11974088a46d42b903418eJohann (&xd->block[24].dqcoeff[0], xd->qcoeff); 511b362b15af34006e6a11974088a46d42b903418eJohann } 521b362b15af34006e6a11974088a46d42b903418eJohann else 531b362b15af34006e6a11974088a46d42b903418eJohann { 541b362b15af34006e6a11974088a46d42b903418eJohann vp8_short_inv_walsh4x4_1 551b362b15af34006e6a11974088a46d42b903418eJohann (&xd->block[24].dqcoeff[0], xd->qcoeff); 561b362b15af34006e6a11974088a46d42b903418eJohann } 571b362b15af34006e6a11974088a46d42b903418eJohann eob_adjust(xd->eobs, xd->qcoeff); 581b362b15af34006e6a11974088a46d42b903418eJohann 591b362b15af34006e6a11974088a46d42b903418eJohann DQC = xd->dequant_y1_dc; 601b362b15af34006e6a11974088a46d42b903418eJohann } 611b362b15af34006e6a11974088a46d42b903418eJohann vp8_dequant_idct_add_y_block 621b362b15af34006e6a11974088a46d42b903418eJohann (xd->qcoeff, DQC, 631b362b15af34006e6a11974088a46d42b903418eJohann xd->dst.y_buffer, 641b362b15af34006e6a11974088a46d42b903418eJohann xd->dst.y_stride, xd->eobs); 651b362b15af34006e6a11974088a46d42b903418eJohann} 66b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#ifdef __cplusplus 67b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian} // extern "C" 681b362b15af34006e6a11974088a46d42b903418eJohann#endif 69b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 70b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#endif // VP8_COMMON_INVTRANS_H_ 71