Home | History | Annotate | Download | only in common
      1 /*
      2  *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
      3  *
      4  *  Use of this source code is governed by a BSD-style license
      5  *  that can be found in the LICENSE file in the root of the source
      6  *  tree. An additional intellectual property rights grant can be found
      7  *  in the file PATENTS.  All contributing project authors may
      8  *  be found in the AUTHORS file in the root of the source tree.
      9  */
     10 
     11 
     12 #ifndef VP8_COMMON_INVTRANS_H_
     13 #define VP8_COMMON_INVTRANS_H_
     14 
     15 #include "vpx_config.h"
     16 #include "vp8_rtcd.h"
     17 #include "blockd.h"
     18 #include "onyxc_int.h"
     19 
     20 #if CONFIG_MULTITHREAD
     21 #include "vpx_mem/vpx_mem.h"
     22 #endif
     23 
     24 #ifdef __cplusplus
     25 extern "C" {
     26 #endif
     27 
     28 static void eob_adjust(char *eobs, short *diff)
     29 {
     30     /* eob adjust.... the idct can only skip if both the dc and eob are zero */
     31     int js;
     32     for(js = 0; js < 16; js++)
     33     {
     34         if((eobs[js] == 0) && (diff[0] != 0))
     35             eobs[js]++;
     36         diff+=16;
     37     }
     38 }
     39 
     40 static void vp8_inverse_transform_mby(MACROBLOCKD *xd)
     41 {
     42     short *DQC = xd->dequant_y1;
     43 
     44     if (xd->mode_info_context->mbmi.mode != SPLITMV)
     45     {
     46         /* do 2nd order transform on the dc block */
     47         if (xd->eobs[24] > 1)
     48         {
     49             vp8_short_inv_walsh4x4
     50                 (&xd->block[24].dqcoeff[0], xd->qcoeff);
     51         }
     52         else
     53         {
     54             vp8_short_inv_walsh4x4_1
     55                 (&xd->block[24].dqcoeff[0], xd->qcoeff);
     56         }
     57         eob_adjust(xd->eobs, xd->qcoeff);
     58 
     59         DQC = xd->dequant_y1_dc;
     60     }
     61     vp8_dequant_idct_add_y_block
     62                     (xd->qcoeff, DQC,
     63                      xd->dst.y_buffer,
     64                      xd->dst.y_stride, xd->eobs);
     65 }
     66 #ifdef __cplusplus
     67 }  // extern "C"
     68 #endif
     69 
     70 #endif  // VP8_COMMON_INVTRANS_H_
     71