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 1290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef SUBPIXEL_H 1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define SUBPIXEL_H 1490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 15f8070e5af95989e60087d53322960db55374c95aAndreas Huber#include "vpx_config.h" 16f8070e5af95989e60087d53322960db55374c95aAndreas Huber 1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define prototype_subpixel_predict(sym) \ 1890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber void sym(unsigned char *src, int src_pitch, int xofst, int yofst, \ 1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber unsigned char *dst, int dst_pitch) 2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 2190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#if ARCH_X86 || ARCH_X86_64 2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "x86/subpixel_x86.h" 2390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 2490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 2590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#if ARCH_ARM 2690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "arm/subpixel_arm.h" 2790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 2890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 292f01f9a5c363613e7389fb28c250edcd4509f815Dragan Mrdjan#if ARCH_MIPS 302f01f9a5c363613e7389fb28c250edcd4509f815Dragan Mrdjan#if defined(MIPS_DSP_REV) && MIPS_DSP_REV>=2 312f01f9a5c363613e7389fb28c250edcd4509f815Dragan Mrdjan#include "mips/subpixel_mips.h" 322f01f9a5c363613e7389fb28c250edcd4509f815Dragan Mrdjan#endif 332f01f9a5c363613e7389fb28c250edcd4509f815Dragan Mrdjan#endif 342f01f9a5c363613e7389fb28c250edcd4509f815Dragan Mrdjan 3590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef vp8_subpix_sixtap16x16 3690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define vp8_subpix_sixtap16x16 vp8_sixtap_predict16x16_c 3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 3890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern prototype_subpixel_predict(vp8_subpix_sixtap16x16); 3990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef vp8_subpix_sixtap8x8 4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define vp8_subpix_sixtap8x8 vp8_sixtap_predict8x8_c 4290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern prototype_subpixel_predict(vp8_subpix_sixtap8x8); 4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef vp8_subpix_sixtap8x4 4690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define vp8_subpix_sixtap8x4 vp8_sixtap_predict8x4_c 4790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 4890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern prototype_subpixel_predict(vp8_subpix_sixtap8x4); 4990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef vp8_subpix_sixtap4x4 5190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define vp8_subpix_sixtap4x4 vp8_sixtap_predict_c 5290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 5390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern prototype_subpixel_predict(vp8_subpix_sixtap4x4); 5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef vp8_subpix_bilinear16x16 5690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define vp8_subpix_bilinear16x16 vp8_bilinear_predict16x16_c 5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 5890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern prototype_subpixel_predict(vp8_subpix_bilinear16x16); 5990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef vp8_subpix_bilinear8x8 6190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define vp8_subpix_bilinear8x8 vp8_bilinear_predict8x8_c 6290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern prototype_subpixel_predict(vp8_subpix_bilinear8x8); 6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef vp8_subpix_bilinear8x4 6690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define vp8_subpix_bilinear8x4 vp8_bilinear_predict8x4_c 6790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 6890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern prototype_subpixel_predict(vp8_subpix_bilinear8x4); 6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 7090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef vp8_subpix_bilinear4x4 7190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define vp8_subpix_bilinear4x4 vp8_bilinear_predict4x4_c 7290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 7390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern prototype_subpixel_predict(vp8_subpix_bilinear4x4); 7490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 7590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef prototype_subpixel_predict((*vp8_subpix_fn_t)); 7690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef struct 7790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 7890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_subpix_fn_t sixtap16x16; 7990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_subpix_fn_t sixtap8x8; 8090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_subpix_fn_t sixtap8x4; 8190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_subpix_fn_t sixtap4x4; 8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_subpix_fn_t bilinear16x16; 8390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_subpix_fn_t bilinear8x8; 8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_subpix_fn_t bilinear8x4; 8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_subpix_fn_t bilinear4x4; 8690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} vp8_subpix_rtcd_vtable_t; 8790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 8890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#if CONFIG_RUNTIME_CPU_DETECT 8990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define SUBPIX_INVOKE(ctx,fn) (ctx)->fn 9090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#else 9190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define SUBPIX_INVOKE(ctx,fn) vp8_subpix_##fn 9290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 9390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 95