190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/* 2f71323e297a928af368937089d3ed71239786f86Andreas Huber * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * 4f71323e297a928af368937089d3ed71239786f86Andreas Huber * Use of this source code is governed by a BSD-style license 5f71323e297a928af368937089d3ed71239786f86Andreas Huber * that can be found in the LICENSE file in the root of the source 6f71323e297a928af368937089d3ed71239786f86Andreas Huber * tree. An additional intellectual property rights grant can be found 7f71323e297a928af368937089d3ed71239786f86Andreas Huber * in the file PATENTS. All contributing project authors may 8f71323e297a928af368937089d3ed71239786f86Andreas Huber * be found in the AUTHORS file in the root of the source tree. 990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber */ 1090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1279f15823c34ae1e423108295e416213200bb280fAndreas Huber#include "vp8/encoder/variance.h" 1379f15823c34ae1e423108295e416213200bb280fAndreas Huber#include "vp8/encoder/onyx_int.h" 1490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberSADFunction *vp8_sad16x16; 1690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberSADFunction *vp8_sad16x8; 1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberSADFunction *vp8_sad8x16; 1890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberSADFunction *vp8_sad8x8; 1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberSADFunction *vp8_sad4x4; 2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 2190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervariance_function *vp8_variance4x4; 2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervariance_function *vp8_variance8x8; 2390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervariance_function *vp8_variance8x16; 2490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervariance_function *vp8_variance16x8; 2590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervariance_function *vp8_variance16x16; 2690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 2790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervariance_function *vp8_mse16x16; 2890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 2990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub_pixel_variance_function *vp8_sub_pixel_variance4x4; 3090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub_pixel_variance_function *vp8_sub_pixel_variance8x8; 3190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub_pixel_variance_function *vp8_sub_pixel_variance8x16; 3290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub_pixel_variance_function *vp8_sub_pixel_variance16x8; 3390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersub_pixel_variance_function *vp8_sub_pixel_variance16x16; 3490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberint (*vp8_block_error)(short *coeff, short *dqcoeff); 3690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberint (*vp8_mbblock_error)(MACROBLOCK *mb, int dc); 3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberint (*vp8_mbuverror)(MACROBLOCK *mb); 3990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberunsigned int (*vp8_get_mb_ss)(short *); 4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid (*vp8_short_fdct4x4)(short *input, short *output, int pitch); 4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid (*vp8_short_fdct8x4)(short *input, short *output, int pitch); 4290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid (*vp8_fast_fdct4x4)(short *input, short *output, int pitch); 4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid (*vp8_fast_fdct8x4)(short *input, short *output, int pitch); 4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid (*short_walsh4x4)(short *input, short *output, int pitch); 4590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid (*vp8_subtract_b)(BLOCK *be, BLOCKD *bd, int pitch); 4790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid (*vp8_subtract_mby)(short *diff, unsigned char *src, unsigned char *pred, int stride); 4890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid (*vp8_subtract_mbuv)(short *diff, unsigned char *usrc, unsigned char *vsrc, unsigned char *pred, int stride); 4990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid (*vp8_fast_quantize_b)(BLOCK *b, BLOCKD *d); 5090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberunsigned int (*vp8_get4x4sse_cs)(unsigned char *src_ptr, int source_stride, unsigned char *ref_ptr, int recon_stride); 5290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber// c imports 5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern int block_error_c(short *coeff, short *dqcoeff); 5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern int vp8_mbblock_error_c(MACROBLOCK *mb, int dc); 5690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern int vp8_mbuverror_c(MACROBLOCK *mb); 5890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern unsigned int vp8_get8x8var_c(unsigned char *src_ptr, int source_stride, unsigned char *ref_ptr, int recon_stride, unsigned int *SSE, int *Sum); 5990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern void short_fdct4x4_c(short *input, short *output, int pitch); 6090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern void short_fdct8x4_c(short *input, short *output, int pitch); 6190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern void vp8_short_walsh4x4_c(short *input, short *output, int pitch); 6290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern void vp8_subtract_b_c(BLOCK *be, BLOCKD *bd, int pitch); 6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern void subtract_mby_c(short *diff, unsigned char *src, unsigned char *pred, int stride); 6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern void subtract_mbuv_c(short *diff, unsigned char *usrc, unsigned char *vsrc, unsigned char *pred, int stride); 6690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern void vp8_fast_quantize_b_c(BLOCK *b, BLOCKD *d); 6790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern SADFunction sad16x16_c; 6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern SADFunction sad16x8_c; 7090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern SADFunction sad8x16_c; 7190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern SADFunction sad8x8_c; 7290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern SADFunction sad4x4_c; 7390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 7490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern variance_function variance16x16_c; 7590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern variance_function variance8x16_c; 7690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern variance_function variance16x8_c; 7790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern variance_function variance8x8_c; 7890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern variance_function variance4x4_c; 7990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern variance_function mse16x16_c; 8090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 8190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern sub_pixel_variance_function sub_pixel_variance4x4_c; 8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern sub_pixel_variance_function sub_pixel_variance8x8_c; 8390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern sub_pixel_variance_function sub_pixel_variance8x16_c; 8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern sub_pixel_variance_function sub_pixel_variance16x8_c; 8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern sub_pixel_variance_function sub_pixel_variance16x16_c; 8690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 8790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern unsigned int vp8_get_mb_ss_c(short *); 8890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern unsigned int vp8_get4x4sse_cs_c(unsigned char *src_ptr, int source_stride, unsigned char *ref_ptr, int recon_stride); 8990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber// ppc 9190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern int vp8_block_error_ppc(short *coeff, short *dqcoeff); 9290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern void vp8_short_fdct4x4_ppc(short *input, short *output, int pitch); 9490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern void vp8_short_fdct8x4_ppc(short *input, short *output, int pitch); 9590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern void vp8_subtract_mby_ppc(short *diff, unsigned char *src, unsigned char *pred, int stride); 9790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern void vp8_subtract_mbuv_ppc(short *diff, unsigned char *usrc, unsigned char *vsrc, unsigned char *pred, int stride); 9890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern SADFunction vp8_sad16x16_ppc; 10090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern SADFunction vp8_sad16x8_ppc; 10190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern SADFunction vp8_sad8x16_ppc; 10290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern SADFunction vp8_sad8x8_ppc; 10390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern SADFunction vp8_sad4x4_ppc; 10490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 10590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern variance_function vp8_variance16x16_ppc; 10690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern variance_function vp8_variance8x16_ppc; 10790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern variance_function vp8_variance16x8_ppc; 10890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern variance_function vp8_variance8x8_ppc; 10990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern variance_function vp8_variance4x4_ppc; 11090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern variance_function vp8_mse16x16_ppc; 11190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 11290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern sub_pixel_variance_function vp8_sub_pixel_variance4x4_ppc; 11390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern sub_pixel_variance_function vp8_sub_pixel_variance8x8_ppc; 11490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern sub_pixel_variance_function vp8_sub_pixel_variance8x16_ppc; 11590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern sub_pixel_variance_function vp8_sub_pixel_variance16x8_ppc; 11690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern sub_pixel_variance_function vp8_sub_pixel_variance16x16_ppc; 11790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 11890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern unsigned int vp8_get8x8var_ppc(unsigned char *src_ptr, int source_stride, unsigned char *ref_ptr, int recon_stride, unsigned int *SSE, int *Sum); 11990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern unsigned int vp8_get16x16var_ppc(unsigned char *src_ptr, int source_stride, unsigned char *ref_ptr, int recon_stride, unsigned int *SSE, int *Sum); 12090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 12190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_cmachine_specific_config(void) 12290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 12390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber // Pure C: 12490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_mbuverror = vp8_mbuverror_c; 12590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_fast_quantize_b = vp8_fast_quantize_b_c; 12690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_short_fdct4x4 = vp8_short_fdct4x4_ppc; 12790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_short_fdct8x4 = vp8_short_fdct8x4_ppc; 12890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_fast_fdct4x4 = vp8_short_fdct4x4_ppc; 12990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_fast_fdct8x4 = vp8_short_fdct8x4_ppc; 13090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber short_walsh4x4 = vp8_short_walsh4x4_c; 13190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 13290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_variance4x4 = vp8_variance4x4_ppc; 13390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_variance8x8 = vp8_variance8x8_ppc; 13490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_variance8x16 = vp8_variance8x16_ppc; 13590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_variance16x8 = vp8_variance16x8_ppc; 13690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_variance16x16 = vp8_variance16x16_ppc; 13790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_mse16x16 = vp8_mse16x16_ppc; 13890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 13990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_sub_pixel_variance4x4 = vp8_sub_pixel_variance4x4_ppc; 14090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_sub_pixel_variance8x8 = vp8_sub_pixel_variance8x8_ppc; 14190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_sub_pixel_variance8x16 = vp8_sub_pixel_variance8x16_ppc; 14290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_sub_pixel_variance16x8 = vp8_sub_pixel_variance16x8_ppc; 14390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_sub_pixel_variance16x16 = vp8_sub_pixel_variance16x16_ppc; 14490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 14590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_get_mb_ss = vp8_get_mb_ss_c; 14690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_get4x4sse_cs = vp8_get4x4sse_cs_c; 14790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 14890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_sad16x16 = vp8_sad16x16_ppc; 14990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_sad16x8 = vp8_sad16x8_ppc; 15090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_sad8x16 = vp8_sad8x16_ppc; 15190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_sad8x8 = vp8_sad8x8_ppc; 15290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_sad4x4 = vp8_sad4x4_ppc; 15390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 15490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_block_error = vp8_block_error_ppc; 15590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_mbblock_error = vp8_mbblock_error_c; 15690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 15790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_subtract_b = vp8_subtract_b_c; 15890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_subtract_mby = vp8_subtract_mby_ppc; 15990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_subtract_mbuv = vp8_subtract_mbuv_ppc; 16090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} 161