Home | History | Annotate | Download | only in ppc
      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 #include "g_common.h"
     13 #include "subpixel.h"
     14 #include "loopfilter.h"
     15 #include "recon.h"
     16 #include "idct.h"
     17 #include "onyxc_int.h"
     18 
     19 void (*vp8_short_idct4x4)(short *input, short *output, int pitch);
     20 void (*vp8_short_idct4x4_1)(short *input, short *output, int pitch);
     21 void (*vp8_dc_only_idct)(short input_dc, short *output, int pitch);
     22 
     23 extern void (*vp8_post_proc_down_and_across)(
     24     unsigned char *src_ptr,
     25     unsigned char *dst_ptr,
     26     int src_pixels_per_line,
     27     int dst_pixels_per_line,
     28     int rows,
     29     int cols,
     30     int flimit
     31 );
     32 
     33 extern void (*vp8_mbpost_proc_down)(unsigned char *dst, int pitch, int rows, int cols, int flimit);
     34 extern void vp8_mbpost_proc_down_c(unsigned char *dst, int pitch, int rows, int cols, int flimit);
     35 extern void (*vp8_mbpost_proc_across_ip)(unsigned char *src, int pitch, int rows, int cols, int flimit);
     36 extern void vp8_mbpost_proc_across_ip_c(unsigned char *src, int pitch, int rows, int cols, int flimit);
     37 
     38 extern void vp8_post_proc_down_and_across_c
     39 (
     40     unsigned char *src_ptr,
     41     unsigned char *dst_ptr,
     42     int src_pixels_per_line,
     43     int dst_pixels_per_line,
     44     int rows,
     45     int cols,
     46     int flimit
     47 );
     48 void vp8_plane_add_noise_c(unsigned char *Start, unsigned int Width, unsigned int Height, int Pitch, int q, int a);
     49 
     50 extern copy_mem_block_function *vp8_copy_mem16x16;
     51 extern copy_mem_block_function *vp8_copy_mem8x8;
     52 extern copy_mem_block_function *vp8_copy_mem8x4;
     53 
     54 // PPC
     55 extern subpixel_predict_function sixtap_predict_ppc;
     56 extern subpixel_predict_function sixtap_predict8x4_ppc;
     57 extern subpixel_predict_function sixtap_predict8x8_ppc;
     58 extern subpixel_predict_function sixtap_predict16x16_ppc;
     59 extern subpixel_predict_function bilinear_predict4x4_ppc;
     60 extern subpixel_predict_function bilinear_predict8x4_ppc;
     61 extern subpixel_predict_function bilinear_predict8x8_ppc;
     62 extern subpixel_predict_function bilinear_predict16x16_ppc;
     63 
     64 extern copy_mem_block_function copy_mem16x16_ppc;
     65 
     66 void recon_b_ppc(short *diff_ptr, unsigned char *pred_ptr, unsigned char *dst_ptr, int stride);
     67 void recon2b_ppc(short *diff_ptr, unsigned char *pred_ptr, unsigned char *dst_ptr, int stride);
     68 void recon4b_ppc(short *diff_ptr, unsigned char *pred_ptr, unsigned char *dst_ptr, int stride);
     69 
     70 extern void short_idct4x4llm_ppc(short *input, short *output, int pitch);
     71 
     72 // Generic C
     73 extern subpixel_predict_function vp8_sixtap_predict_c;
     74 extern subpixel_predict_function vp8_sixtap_predict8x4_c;
     75 extern subpixel_predict_function vp8_sixtap_predict8x8_c;
     76 extern subpixel_predict_function vp8_sixtap_predict16x16_c;
     77 extern subpixel_predict_function vp8_bilinear_predict4x4_c;
     78 extern subpixel_predict_function vp8_bilinear_predict8x4_c;
     79 extern subpixel_predict_function vp8_bilinear_predict8x8_c;
     80 extern subpixel_predict_function vp8_bilinear_predict16x16_c;
     81 
     82 extern copy_mem_block_function vp8_copy_mem16x16_c;
     83 extern copy_mem_block_function vp8_copy_mem8x8_c;
     84 extern copy_mem_block_function vp8_copy_mem8x4_c;
     85 
     86 void vp8_recon_b_c(short *diff_ptr, unsigned char *pred_ptr, unsigned char *dst_ptr, int stride);
     87 void vp8_recon2b_c(short *diff_ptr, unsigned char *pred_ptr, unsigned char *dst_ptr, int stride);
     88 void vp8_recon4b_c(short *diff_ptr, unsigned char *pred_ptr, unsigned char *dst_ptr, int stride);
     89 
     90 extern void vp8_short_idct4x4llm_1_c(short *input, short *output, int pitch);
     91 extern void vp8_short_idct4x4llm_c(short *input, short *output, int pitch);
     92 extern void vp8_dc_only_idct_c(short input_dc, short *output, int pitch);
     93 
     94 // PPC
     95 extern loop_filter_block_function loop_filter_mbv_ppc;
     96 extern loop_filter_block_function loop_filter_bv_ppc;
     97 extern loop_filter_block_function loop_filter_mbh_ppc;
     98 extern loop_filter_block_function loop_filter_bh_ppc;
     99 
    100 extern loop_filter_block_function loop_filter_mbvs_ppc;
    101 extern loop_filter_block_function loop_filter_bvs_ppc;
    102 extern loop_filter_block_function loop_filter_mbhs_ppc;
    103 extern loop_filter_block_function loop_filter_bhs_ppc;
    104 
    105 // Generic C
    106 extern loop_filter_block_function vp8_loop_filter_mbv_c;
    107 extern loop_filter_block_function vp8_loop_filter_bv_c;
    108 extern loop_filter_block_function vp8_loop_filter_mbh_c;
    109 extern loop_filter_block_function vp8_loop_filter_bh_c;
    110 
    111 extern loop_filter_block_function vp8_loop_filter_mbvs_c;
    112 extern loop_filter_block_function vp8_loop_filter_bvs_c;
    113 extern loop_filter_block_function vp8_loop_filter_mbhs_c;
    114 extern loop_filter_block_function vp8_loop_filter_bhs_c;
    115 
    116 extern loop_filter_block_function *vp8_lf_mbvfull;
    117 extern loop_filter_block_function *vp8_lf_mbhfull;
    118 extern loop_filter_block_function *vp8_lf_bvfull;
    119 extern loop_filter_block_function *vp8_lf_bhfull;
    120 
    121 extern loop_filter_block_function *vp8_lf_mbvsimple;
    122 extern loop_filter_block_function *vp8_lf_mbhsimple;
    123 extern loop_filter_block_function *vp8_lf_bvsimple;
    124 extern loop_filter_block_function *vp8_lf_bhsimple;
    125 
    126 void vp8_clear_c(void)
    127 {
    128 }
    129 
    130 void vp8_machine_specific_config(void)
    131 {
    132     // Pure C:
    133     vp8_clear_system_state                = vp8_clear_c;
    134     vp8_recon_b                          = vp8_recon_b_c;
    135     vp8_recon4b                         = vp8_recon4b_c;
    136     vp8_recon2b                         = vp8_recon2b_c;
    137 
    138     vp8_bilinear_predict16x16            = bilinear_predict16x16_ppc;
    139     vp8_bilinear_predict8x8              = bilinear_predict8x8_ppc;
    140     vp8_bilinear_predict8x4              = bilinear_predict8x4_ppc;
    141     vp8_bilinear_predict                 = bilinear_predict4x4_ppc;
    142 
    143     vp8_sixtap_predict16x16              = sixtap_predict16x16_ppc;
    144     vp8_sixtap_predict8x8                = sixtap_predict8x8_ppc;
    145     vp8_sixtap_predict8x4                = sixtap_predict8x4_ppc;
    146     vp8_sixtap_predict                   = sixtap_predict_ppc;
    147 
    148     vp8_short_idct4x4_1                  = vp8_short_idct4x4llm_1_c;
    149     vp8_short_idct4x4                    = short_idct4x4llm_ppc;
    150     vp8_dc_only_idct                      = vp8_dc_only_idct_c;
    151 
    152     vp8_lf_mbvfull                       = loop_filter_mbv_ppc;
    153     vp8_lf_bvfull                        = loop_filter_bv_ppc;
    154     vp8_lf_mbhfull                       = loop_filter_mbh_ppc;
    155     vp8_lf_bhfull                        = loop_filter_bh_ppc;
    156 
    157     vp8_lf_mbvsimple                     = loop_filter_mbvs_ppc;
    158     vp8_lf_bvsimple                      = loop_filter_bvs_ppc;
    159     vp8_lf_mbhsimple                     = loop_filter_mbhs_ppc;
    160     vp8_lf_bhsimple                      = loop_filter_bhs_ppc;
    161 
    162     vp8_post_proc_down_and_across           = vp8_post_proc_down_and_across_c;
    163     vp8_mbpost_proc_down                  = vp8_mbpost_proc_down_c;
    164     vp8_mbpost_proc_across_ip              = vp8_mbpost_proc_across_ip_c;
    165     vp8_plane_add_noise                   = vp8_plane_add_noise_c;
    166 
    167     vp8_copy_mem16x16                    = copy_mem16x16_ppc;
    168     vp8_copy_mem8x8                      = vp8_copy_mem8x8_c;
    169     vp8_copy_mem8x4                      = vp8_copy_mem8x4_c;
    170 
    171 }
    172