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_ENCODEMB_H 1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define __INC_ENCODEMB_H 1490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "vpx_ports/config.h" 1690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "block.h" 1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define prototype_mberr(sym) \ 1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int (sym)(MACROBLOCK *mb, int dc) 2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 2190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define prototype_berr(sym) \ 2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int (sym)(short *coeff, short *dqcoeff) 2390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 2490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define prototype_mbuverr(sym) \ 2590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int (sym)(MACROBLOCK *mb) 2690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 2790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define prototype_subb(sym) \ 2890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber void (sym)(BLOCK *be,BLOCKD *bd, int pitch) 2990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define prototype_submby(sym) \ 3190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber void (sym)(short *diff, unsigned char *src, unsigned char *pred, int stride) 3290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define prototype_submbuv(sym) \ 3490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber void (sym)(short *diff, unsigned char *usrc, unsigned char *vsrc,\ 3590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber unsigned char *pred, int stride) 3690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#if ARCH_X86 || ARCH_X86_64 3890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "x86/encodemb_x86.h" 3990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#if ARCH_ARM 4290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "arm/encodemb_arm.h" 4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef vp8_encodemb_berr 4690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define vp8_encodemb_berr vp8_block_error_c 4790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 4890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern prototype_berr(vp8_encodemb_berr); 4990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef vp8_encodemb_mberr 5190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define vp8_encodemb_mberr vp8_mbblock_error_c 5290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 5390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern prototype_mberr(vp8_encodemb_mberr); 5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef vp8_encodemb_mbuverr 5690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define vp8_encodemb_mbuverr vp8_mbuverror_c 5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 5890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern prototype_mbuverr(vp8_encodemb_mbuverr); 5990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef vp8_encodemb_subb 6190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define vp8_encodemb_subb vp8_subtract_b_c 6290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern prototype_subb(vp8_encodemb_subb); 6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef vp8_encodemb_submby 6690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define vp8_encodemb_submby vp8_subtract_mby_c 6790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 6890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern prototype_submby(vp8_encodemb_submby); 6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 7090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef vp8_encodemb_submbuv 7190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define vp8_encodemb_submbuv vp8_subtract_mbuv_c 7290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 7390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern prototype_submbuv(vp8_encodemb_submbuv); 7490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 7590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 7690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef struct 7790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 7890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber prototype_berr(*berr); 7990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber prototype_mberr(*mberr); 8090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber prototype_mbuverr(*mbuverr); 8190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber prototype_subb(*subb); 8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber prototype_submby(*submby); 8390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber prototype_submbuv(*submbuv); 8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} vp8_encodemb_rtcd_vtable_t; 8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 8690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#if CONFIG_RUNTIME_CPU_DETECT 8790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define ENCODEMB_INVOKE(ctx,fn) (ctx)->fn 8890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#else 8990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define ENCODEMB_INVOKE(ctx,fn) vp8_encodemb_##fn 9090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 9190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "onyx_int.h" 9590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberstruct VP8_ENCODER_RTCD; 9690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_encode_inter16x16(const struct VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x); 9790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern void vp8_stuff_inter16x16(MACROBLOCK *x); 9990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 10090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_build_dcblock(MACROBLOCK *b); 10190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_transform_mb(MACROBLOCK *mb); 10290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_transform_mbuv(MACROBLOCK *x); 10390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_transform_intra_mby(MACROBLOCK *x); 10490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_encode_inter16x16uvrd(const struct VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x); 10590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_optimize_mby(MACROBLOCK *x, const struct VP8_ENCODER_RTCD *rtcd); 10690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_optimize_mbuv(MACROBLOCK *x, const struct VP8_ENCODER_RTCD *rtcd); 10790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_encode_inter16x16y(const struct VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x); 10890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 109