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