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 __INC_IDCT_H
1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define __INC_IDCT_H
1490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define prototype_second_order(sym) \
1690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    void sym(short *input, short *output)
1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define prototype_idct(sym) \
1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    void sym(short *input, short *output, int pitch)
2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
21f71323e297a928af368937089d3ed71239786f86Andreas Huber#define prototype_idct_scalar_add(sym) \
22f71323e297a928af368937089d3ed71239786f86Andreas Huber    void sym(short input, \
23f71323e297a928af368937089d3ed71239786f86Andreas Huber             unsigned char *pred, unsigned char *output, \
24f71323e297a928af368937089d3ed71239786f86Andreas Huber             int pitch, int stride)
2590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
2690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#if ARCH_X86 || ARCH_X86_64
2790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "x86/idct_x86.h"
2890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif
2990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#if ARCH_ARM
3190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "arm/idct_arm.h"
3290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif
3390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
342f01f9a5c363613e7389fb28c250edcd4509f815Dragan Mrdjan#if ARCH_MIPS
352f01f9a5c363613e7389fb28c250edcd4509f815Dragan Mrdjan#if defined(MIPS_DSP_REV) && MIPS_DSP_REV>=1
362f01f9a5c363613e7389fb28c250edcd4509f815Dragan Mrdjan#include "mips/idct_mips.h"
372f01f9a5c363613e7389fb28c250edcd4509f815Dragan Mrdjan#endif
382f01f9a5c363613e7389fb28c250edcd4509f815Dragan Mrdjan#endif
392f01f9a5c363613e7389fb28c250edcd4509f815Dragan Mrdjan
4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef vp8_idct_idct1
4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define vp8_idct_idct1 vp8_short_idct4x4llm_1_c
4290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif
4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern prototype_idct(vp8_idct_idct1);
4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
4590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef vp8_idct_idct16
4690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define vp8_idct_idct16 vp8_short_idct4x4llm_c
4790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif
4890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern prototype_idct(vp8_idct_idct16);
4990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
50f71323e297a928af368937089d3ed71239786f86Andreas Huber#ifndef vp8_idct_idct1_scalar_add
51f71323e297a928af368937089d3ed71239786f86Andreas Huber#define vp8_idct_idct1_scalar_add vp8_dc_only_idct_add_c
5290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif
53f71323e297a928af368937089d3ed71239786f86Andreas Huberextern prototype_idct_scalar_add(vp8_idct_idct1_scalar_add);
5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef vp8_idct_iwalsh1
5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define vp8_idct_iwalsh1 vp8_short_inv_walsh4x4_1_c
5890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif
5990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern prototype_second_order(vp8_idct_iwalsh1);
6090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
6190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef vp8_idct_iwalsh16
6290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define vp8_idct_iwalsh16 vp8_short_inv_walsh4x4_c
6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif
6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern prototype_second_order(vp8_idct_iwalsh16);
6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
6690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef prototype_idct((*vp8_idct_fn_t));
67f71323e297a928af368937089d3ed71239786f86Andreas Hubertypedef prototype_idct_scalar_add((*vp8_idct_scalar_add_fn_t));
6890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef prototype_second_order((*vp8_second_order_fn_t));
6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef struct
7190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{
72f71323e297a928af368937089d3ed71239786f86Andreas Huber    vp8_idct_fn_t            idct1;
73f71323e297a928af368937089d3ed71239786f86Andreas Huber    vp8_idct_fn_t            idct16;
74f71323e297a928af368937089d3ed71239786f86Andreas Huber    vp8_idct_scalar_add_fn_t idct1_scalar_add;
7590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vp8_second_order_fn_t iwalsh1;
7790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vp8_second_order_fn_t iwalsh16;
7890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} vp8_idct_rtcd_vtable_t;
7990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
8090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#if CONFIG_RUNTIME_CPU_DETECT
8190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define IDCT_INVOKE(ctx,fn) (ctx)->fn
8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#else
8390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define IDCT_INVOKE(ctx,fn) vp8_idct_##fn
8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif
8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
8690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif
87