Home | History | Annotate | Download | only in armv6
      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 #include "vpx_config.h"
     12 #include "vp8_rtcd.h"
     13 
     14 
     15 void vp8_dequant_idct_add_y_block_v6(short *q, short *dq,
     16                                      unsigned char *dst,
     17                                      int stride, char *eobs)
     18 {
     19     int i;
     20 
     21     for (i = 0; i < 4; i++)
     22     {
     23         if (eobs[0] > 1)
     24             vp8_dequant_idct_add_v6 (q, dq, dst, stride);
     25         else if (eobs[0] == 1)
     26         {
     27             vp8_dc_only_idct_add_v6 (q[0]*dq[0], dst, stride, dst, stride);
     28             ((int *)q)[0] = 0;
     29         }
     30 
     31         if (eobs[1] > 1)
     32             vp8_dequant_idct_add_v6 (q+16, dq, dst+4, stride);
     33         else if (eobs[1] == 1)
     34         {
     35             vp8_dc_only_idct_add_v6 (q[16]*dq[0], dst+4, stride, dst+4, stride);
     36             ((int *)(q+16))[0] = 0;
     37         }
     38 
     39         if (eobs[2] > 1)
     40             vp8_dequant_idct_add_v6 (q+32, dq, dst+8, stride);
     41         else if (eobs[2] == 1)
     42         {
     43             vp8_dc_only_idct_add_v6 (q[32]*dq[0], dst+8, stride, dst+8, stride);
     44             ((int *)(q+32))[0] = 0;
     45         }
     46 
     47         if (eobs[3] > 1)
     48             vp8_dequant_idct_add_v6 (q+48, dq, dst+12, stride);
     49         else if (eobs[3] == 1)
     50         {
     51             vp8_dc_only_idct_add_v6 (q[48]*dq[0], dst+12, stride,dst+12,stride);
     52             ((int *)(q+48))[0] = 0;
     53         }
     54 
     55         q    += 64;
     56         dst  += 4*stride;
     57         eobs += 4;
     58     }
     59 }
     60 
     61 void vp8_dequant_idct_add_uv_block_v6(short *q, short *dq,
     62                                       unsigned char *dstu,
     63                                       unsigned char *dstv,
     64                                       int stride, char *eobs)
     65 {
     66     int i;
     67 
     68     for (i = 0; i < 2; i++)
     69     {
     70         if (eobs[0] > 1)
     71             vp8_dequant_idct_add_v6 (q, dq, dstu, stride);
     72         else if (eobs[0] == 1)
     73         {
     74             vp8_dc_only_idct_add_v6 (q[0]*dq[0], dstu, stride, dstu, stride);
     75             ((int *)q)[0] = 0;
     76         }
     77 
     78         if (eobs[1] > 1)
     79             vp8_dequant_idct_add_v6 (q+16, dq, dstu+4, stride);
     80         else if (eobs[1] == 1)
     81         {
     82             vp8_dc_only_idct_add_v6 (q[16]*dq[0], dstu+4, stride,
     83                                                   dstu+4, stride);
     84             ((int *)(q+16))[0] = 0;
     85         }
     86 
     87         q    += 32;
     88         dstu += 4*stride;
     89         eobs += 2;
     90     }
     91 
     92     for (i = 0; i < 2; i++)
     93     {
     94         if (eobs[0] > 1)
     95             vp8_dequant_idct_add_v6 (q, dq, dstv, stride);
     96         else if (eobs[0] == 1)
     97         {
     98             vp8_dc_only_idct_add_v6 (q[0]*dq[0], dstv, stride, dstv, stride);
     99             ((int *)q)[0] = 0;
    100         }
    101 
    102         if (eobs[1] > 1)
    103             vp8_dequant_idct_add_v6 (q+16, dq, dstv+4, stride);
    104         else if (eobs[1] == 1)
    105         {
    106             vp8_dc_only_idct_add_v6 (q[16]*dq[0], dstv+4, stride,
    107                                                   dstv+4, stride);
    108             ((int *)(q+16))[0] = 0;
    109         }
    110 
    111         q    += 32;
    112         dstv += 4*stride;
    113         eobs += 2;
    114     }
    115 }
    116