1233d2500723e5594f3e7c70896ffeeef32b9c950ywan/* 2233d2500723e5594f3e7c70896ffeeef32b9c950ywan * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3233d2500723e5594f3e7c70896ffeeef32b9c950ywan * 4233d2500723e5594f3e7c70896ffeeef32b9c950ywan * Use of this source code is governed by a BSD-style license 5233d2500723e5594f3e7c70896ffeeef32b9c950ywan * that can be found in the LICENSE file in the root of the source 6233d2500723e5594f3e7c70896ffeeef32b9c950ywan * tree. An additional intellectual property rights grant can be found 7233d2500723e5594f3e7c70896ffeeef32b9c950ywan * in the file PATENTS. All contributing project authors may 8233d2500723e5594f3e7c70896ffeeef32b9c950ywan * be found in the AUTHORS file in the root of the source tree. 9233d2500723e5594f3e7c70896ffeeef32b9c950ywan */ 10233d2500723e5594f3e7c70896ffeeef32b9c950ywan 11233d2500723e5594f3e7c70896ffeeef32b9c950ywan 12233d2500723e5594f3e7c70896ffeeef32b9c950ywan#ifndef VP8_COMMON_INVTRANS_H_ 13233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define VP8_COMMON_INVTRANS_H_ 14233d2500723e5594f3e7c70896ffeeef32b9c950ywan 15233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "vpx_config.h" 16233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "vp8_rtcd.h" 17233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "blockd.h" 18233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "onyxc_int.h" 19233d2500723e5594f3e7c70896ffeeef32b9c950ywan 20233d2500723e5594f3e7c70896ffeeef32b9c950ywan#if CONFIG_MULTITHREAD 21233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "vpx_mem/vpx_mem.h" 22233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif 23233d2500723e5594f3e7c70896ffeeef32b9c950ywan 24233d2500723e5594f3e7c70896ffeeef32b9c950ywan#ifdef __cplusplus 25233d2500723e5594f3e7c70896ffeeef32b9c950ywanextern "C" { 26233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif 27233d2500723e5594f3e7c70896ffeeef32b9c950ywan 28233d2500723e5594f3e7c70896ffeeef32b9c950ywanstatic void eob_adjust(char *eobs, short *diff) 29233d2500723e5594f3e7c70896ffeeef32b9c950ywan{ 30233d2500723e5594f3e7c70896ffeeef32b9c950ywan /* eob adjust.... the idct can only skip if both the dc and eob are zero */ 31233d2500723e5594f3e7c70896ffeeef32b9c950ywan int js; 32233d2500723e5594f3e7c70896ffeeef32b9c950ywan for(js = 0; js < 16; js++) 33233d2500723e5594f3e7c70896ffeeef32b9c950ywan { 34233d2500723e5594f3e7c70896ffeeef32b9c950ywan if((eobs[js] == 0) && (diff[0] != 0)) 35233d2500723e5594f3e7c70896ffeeef32b9c950ywan eobs[js]++; 36233d2500723e5594f3e7c70896ffeeef32b9c950ywan diff+=16; 37233d2500723e5594f3e7c70896ffeeef32b9c950ywan } 38233d2500723e5594f3e7c70896ffeeef32b9c950ywan} 39233d2500723e5594f3e7c70896ffeeef32b9c950ywan 40233d2500723e5594f3e7c70896ffeeef32b9c950ywanstatic void vp8_inverse_transform_mby(MACROBLOCKD *xd) 41233d2500723e5594f3e7c70896ffeeef32b9c950ywan{ 42233d2500723e5594f3e7c70896ffeeef32b9c950ywan short *DQC = xd->dequant_y1; 43233d2500723e5594f3e7c70896ffeeef32b9c950ywan 44233d2500723e5594f3e7c70896ffeeef32b9c950ywan if (xd->mode_info_context->mbmi.mode != SPLITMV) 45233d2500723e5594f3e7c70896ffeeef32b9c950ywan { 46233d2500723e5594f3e7c70896ffeeef32b9c950ywan /* do 2nd order transform on the dc block */ 47233d2500723e5594f3e7c70896ffeeef32b9c950ywan if (xd->eobs[24] > 1) 48233d2500723e5594f3e7c70896ffeeef32b9c950ywan { 49233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp8_short_inv_walsh4x4 50233d2500723e5594f3e7c70896ffeeef32b9c950ywan (&xd->block[24].dqcoeff[0], xd->qcoeff); 51233d2500723e5594f3e7c70896ffeeef32b9c950ywan } 52233d2500723e5594f3e7c70896ffeeef32b9c950ywan else 53233d2500723e5594f3e7c70896ffeeef32b9c950ywan { 54233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp8_short_inv_walsh4x4_1 55233d2500723e5594f3e7c70896ffeeef32b9c950ywan (&xd->block[24].dqcoeff[0], xd->qcoeff); 56233d2500723e5594f3e7c70896ffeeef32b9c950ywan } 57233d2500723e5594f3e7c70896ffeeef32b9c950ywan eob_adjust(xd->eobs, xd->qcoeff); 58233d2500723e5594f3e7c70896ffeeef32b9c950ywan 59233d2500723e5594f3e7c70896ffeeef32b9c950ywan DQC = xd->dequant_y1_dc; 60233d2500723e5594f3e7c70896ffeeef32b9c950ywan } 61233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp8_dequant_idct_add_y_block 62233d2500723e5594f3e7c70896ffeeef32b9c950ywan (xd->qcoeff, DQC, 63233d2500723e5594f3e7c70896ffeeef32b9c950ywan xd->dst.y_buffer, 64233d2500723e5594f3e7c70896ffeeef32b9c950ywan xd->dst.y_stride, xd->eobs); 65233d2500723e5594f3e7c70896ffeeef32b9c950ywan} 66233d2500723e5594f3e7c70896ffeeef32b9c950ywan#ifdef __cplusplus 67233d2500723e5594f3e7c70896ffeeef32b9c950ywan} // extern "C" 68233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif 69233d2500723e5594f3e7c70896ffeeef32b9c950ywan 70233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif // VP8_COMMON_INVTRANS_H_ 71