Compare commits
1 Commits
main
...
sandbox/jk
Author | SHA1 | Date | |
---|---|---|---|
![]() |
976752507a |
291
build/make/rtcd.sh
Executable file
291
build/make/rtcd.sh
Executable file
@ -0,0 +1,291 @@
|
||||
#!/bin/sh
|
||||
self=$0
|
||||
|
||||
usage() {
|
||||
cat <<EOF >&2
|
||||
Usage: $self [options] FILE
|
||||
|
||||
Reads the Run Time CPU Detections definitions from FILE and generates a
|
||||
C header file on stdout.
|
||||
|
||||
Options:
|
||||
--arch=ARCH Architecture to generate defs for (required)
|
||||
--disable-EXT Disable support for EXT extensions
|
||||
--sym=SYMBOL Unique symbol to use for RTCD initialization function
|
||||
|
||||
EOF
|
||||
exit 1
|
||||
}
|
||||
|
||||
die() {
|
||||
echo "$@" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
die_argument_required() {
|
||||
die "Option $opt requires argument"
|
||||
}
|
||||
|
||||
for opt; do
|
||||
optval="${opt#*=}"
|
||||
case "$opt" in
|
||||
--arch) die_argument_required;;
|
||||
--arch=*) arch=${optval};;
|
||||
--disable-*) eval "disable_${opt#--disable-}=true";;
|
||||
--sym) die_argument_required;;
|
||||
--sym=*) symbol=${optval};;
|
||||
--rtcd=*) CONFIG_RUNTIME_CPU_DETECT=${optval};;
|
||||
-h|--help)
|
||||
usage
|
||||
;;
|
||||
-*)
|
||||
die "Unrecognized option: ${opt%%=*}"
|
||||
;;
|
||||
*)
|
||||
defs_file="$defs_file $opt"
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
for f in $defs_file; do [ -f "$f" ] || usage; done
|
||||
[ -n "$arch" ] || usage
|
||||
|
||||
#
|
||||
# Routines for the RTCD DSL to call
|
||||
#
|
||||
prototype() {
|
||||
local rtyp="$1"
|
||||
local fn="$2"
|
||||
local args="$3"
|
||||
|
||||
eval "${2}_rtyp='$1'"
|
||||
eval "${2}_args='$3'"
|
||||
ALL_FUNCS="$ALL_FUNCS $fn"
|
||||
}
|
||||
|
||||
specialize() {
|
||||
local fn="$1"
|
||||
shift
|
||||
for opt in c "$@"; do
|
||||
eval "${fn}_${opt}=${fn}_${opt}"
|
||||
done
|
||||
}
|
||||
|
||||
require() {
|
||||
for fn in $ALL_FUNCS; do
|
||||
for opt in "$@"; do
|
||||
local ofn=$(eval "echo \$${fn}_${opt}")
|
||||
[ -z "$ofn" ] && continue
|
||||
|
||||
# if we already have a default, then we can undefine it, as we know
|
||||
# we can do better.
|
||||
local best=$(eval "echo \$${fn}_default")
|
||||
[ -n "$best" ] && eval "unset $best"
|
||||
eval "${fn}_default=${fn}_${opt}"
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
forward_decls() {
|
||||
ALL_FORWARD_DECLS="$ALL_FORWARD_DECLS $1"
|
||||
}
|
||||
|
||||
#
|
||||
# Include the user's directives
|
||||
#
|
||||
for f in $defs_file; do
|
||||
. $f
|
||||
done
|
||||
|
||||
#
|
||||
# Process the directives according to the command line
|
||||
#
|
||||
process_forward_decls() {
|
||||
for fn in $ALL_FORWARD_DECLS; do
|
||||
eval $fn
|
||||
done
|
||||
}
|
||||
|
||||
determine_indirection() {
|
||||
[ "$CONFIG_RUNTIME_CPU_DETECT" = "yes" ] || require $ALL_ARCHS
|
||||
for fn in $ALL_FUNCS; do
|
||||
local n=""
|
||||
local rtyp=$(eval "echo \$${fn}_rtyp")
|
||||
local args=$(eval "echo \$${fn}_args")
|
||||
local dfn=$(eval "echo \$${fn}_default")
|
||||
dfn=$(eval "echo \$${dfn}")
|
||||
for opt in "$@"; do
|
||||
local ofn=$(eval "echo \$${fn}_${opt}")
|
||||
[ -z "$ofn" ] && continue
|
||||
n="${n}x"
|
||||
done
|
||||
if [ "$n" = "x" ]; then
|
||||
eval "${fn}_indirect=false"
|
||||
else
|
||||
eval "${fn}_indirect=true"
|
||||
fi
|
||||
echo
|
||||
done
|
||||
}
|
||||
|
||||
declare_function_pointers() {
|
||||
for fn in $ALL_FUNCS; do
|
||||
local n=""
|
||||
local rtyp=$(eval "echo \$${fn}_rtyp")
|
||||
local args=$(eval "echo \$${fn}_args")
|
||||
local dfn=$(eval "echo \$${fn}_default")
|
||||
dfn=$(eval "echo \$${dfn}")
|
||||
for opt in "$@"; do
|
||||
local ofn=$(eval "echo \$${fn}_${opt}")
|
||||
[ -z "$ofn" ] && continue
|
||||
n="${n}x"
|
||||
echo "$rtyp ${ofn}($args);"
|
||||
done
|
||||
if [ "$n" = "x" ]; then
|
||||
echo "#define ${fn} ${dfn}"
|
||||
else
|
||||
echo "RTCD_EXTERN $rtyp (*${fn})($args);"
|
||||
fi
|
||||
echo
|
||||
done
|
||||
}
|
||||
|
||||
set_function_pointers() {
|
||||
for fn in $ALL_FUNCS; do
|
||||
local n=""
|
||||
local rtyp=$(eval "echo \$${fn}_rtyp")
|
||||
local args=$(eval "echo \$${fn}_args")
|
||||
local dfn=$(eval "echo \$${fn}_default")
|
||||
dfn=$(eval "echo \$${dfn}")
|
||||
if $(eval "echo \$${fn}_indirect"); then
|
||||
echo " $fn = $dfn;"
|
||||
for opt in "$@"; do
|
||||
local ofn=$(eval "echo \$${fn}_${opt}")
|
||||
[ -z "$ofn" ] && continue
|
||||
[ "$ofn" = "$dfn" ] && continue;
|
||||
echo " if (have_${opt}) $fn = $ofn;"
|
||||
done
|
||||
echo
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
filter() {
|
||||
local filtered
|
||||
for opt in "$@"; do
|
||||
[ -z $(eval "echo \$disable_${opt}") ] && filtered="$filtered $opt"
|
||||
done
|
||||
echo $filtered
|
||||
}
|
||||
|
||||
#
|
||||
# Helper functions for generating the arch specific RTCD files
|
||||
#
|
||||
common_top() {
|
||||
local outfile_basename=$(basename ${outfile:-rtcd.h})
|
||||
local include_guard=$(echo -n $outfile_basename | tr [a-z] [A-Z] | tr -c [A-Z] _)
|
||||
cat <<EOF
|
||||
#ifndef ${include_guard}
|
||||
#define ${include_guard}
|
||||
|
||||
#ifdef RTCD_C
|
||||
#define RTCD_EXTERN
|
||||
#else
|
||||
#define RTCD_EXTERN extern
|
||||
#endif
|
||||
|
||||
$(process_forward_decls)
|
||||
|
||||
$(declare_function_pointers c $ALL_ARCHS)
|
||||
EOF
|
||||
}
|
||||
|
||||
common_bottom() {
|
||||
cat <<EOF
|
||||
#endif
|
||||
EOF
|
||||
}
|
||||
|
||||
x86() {
|
||||
determine_indirection c $ALL_ARCHS
|
||||
cat <<EOF
|
||||
$(common_top)
|
||||
void ${symbol:-rtcd}(void);
|
||||
|
||||
#ifdef RTCD_C
|
||||
#include "vpx_ports/x86.h"
|
||||
void ${symbol:-rtcd}(void)
|
||||
{
|
||||
int flags = x86_simd_caps();
|
||||
EOF
|
||||
|
||||
# Write out the helper variable for each enabled extension
|
||||
for opt in $ALL_ARCHS; do
|
||||
local uc=$(echo -n $opt | tr [a-z] [A-Z])
|
||||
echo " int have_${opt} = flags & HAS_${uc};"
|
||||
done
|
||||
cat <<EOF
|
||||
|
||||
$(set_function_pointers c $ALL_ARCHS)
|
||||
}
|
||||
#endif
|
||||
$(common_bottom)
|
||||
EOF
|
||||
}
|
||||
|
||||
arm() {
|
||||
determine_indirection c $ALL_ARCHS
|
||||
cat <<EOF
|
||||
$(common_top)
|
||||
#include "vpx_config.h"
|
||||
#include "vp8/decoder/onyxd_int.h"
|
||||
|
||||
void ${symbol:-rtcd}(VP8D_COMP *pbi);
|
||||
|
||||
#ifdef RTCD_C
|
||||
void ${symbol:-rtcd}(VP8D_COMP *pbi)
|
||||
{
|
||||
#if CONFIG_RUNTIME_CPU_DETECT
|
||||
int flags = pbi->common.rtcd.flags;
|
||||
|
||||
int have_v5te = flags & HAS_EDSP;
|
||||
int have_v6 = flags & HAS_MEDIA;
|
||||
int have_neon = flags & HAS_NEON;
|
||||
#endif
|
||||
|
||||
$(set_function_pointers c $ALL_ARCHS)
|
||||
}
|
||||
#endif
|
||||
$(common_bottom)
|
||||
EOF
|
||||
}
|
||||
|
||||
#
|
||||
# Main Driver
|
||||
#
|
||||
require c
|
||||
case $arch in
|
||||
x86)
|
||||
ALL_ARCHS=$(filter mmx sse sse2 sse3 sse4_1)
|
||||
x86
|
||||
;;
|
||||
x86_64)
|
||||
ALL_ARCHS=$(filter mmx sse sse2 sse3 sse4_1)
|
||||
require $(filter mmx sse sse2)
|
||||
x86
|
||||
;;
|
||||
armv5te)
|
||||
ALL_ARCHS=$(filter v5te)
|
||||
arm
|
||||
;;
|
||||
armv6)
|
||||
ALL_ARCHS=$(filter v5te v6)
|
||||
arm
|
||||
;;
|
||||
armv7)
|
||||
ALL_ARCHS=$(filter v5te v6 neon)
|
||||
arm
|
||||
;;
|
||||
*)
|
||||
die "Unrecognized architecture: $arch"
|
||||
esac
|
9
libs.mk
9
libs.mk
@ -322,6 +322,15 @@ endif
|
||||
$(shell $(SRC_PATH_BARE)/build/make/version.sh "$(SRC_PATH_BARE)" $(BUILD_PFX)vpx_version.h)
|
||||
CLEAN-OBJS += $(BUILD_PFX)vpx_version.h
|
||||
|
||||
#
|
||||
# Rule to generate runtime cpu detection files
|
||||
#
|
||||
$(OBJS-yes:.o=.d): vpx_rtcd.h
|
||||
vpx_rtcd.h: $(sort $(filter %rtcd_defs.sh,$(CODEC_SRCS)))
|
||||
$(SRC_PATH_BARE)/build/make/rtcd.sh --arch=$(TGT_ISA) --sym=vpx_rtcd \
|
||||
--rtcd=$(CONFIG_RUNTIME_CPU_DETECT) $^ > $@
|
||||
CLEAN-OBJS += $(BUILD_PFX)vpx_rtcd.h
|
||||
|
||||
CODEC_DOC_SRCS += vpx/vpx_codec.h \
|
||||
vpx/vpx_decoder.h \
|
||||
vpx/vpx_encoder.h \
|
||||
|
@ -182,7 +182,7 @@ typedef struct
|
||||
} LOWER_RES_INFO;
|
||||
#endif
|
||||
|
||||
typedef struct
|
||||
typedef struct blockd
|
||||
{
|
||||
short *qcoeff;
|
||||
short *dqcoeff;
|
||||
|
12
vp8/common/rtcd.c
Normal file
12
vp8/common/rtcd.c
Normal file
@ -0,0 +1,12 @@
|
||||
/*
|
||||
* Copyright (c) 2011 The WebM project authors. All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by a BSD-style license
|
||||
* that can be found in the LICENSE file in the root of the source
|
||||
* tree. An additional intellectual property rights grant can be found
|
||||
* in the file PATENTS. All contributing project authors may
|
||||
* be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
#include "vpx_config.h"
|
||||
#define RTCD_C
|
||||
#include "vpx_rtcd.h"
|
@ -1,50 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by a BSD-style license
|
||||
* that can be found in the LICENSE file in the root of the source
|
||||
* tree. An additional intellectual property rights grant can be found
|
||||
* in the file PATENTS. All contributing project authors may
|
||||
* be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
|
||||
|
||||
#include "vpx_config.h"
|
||||
#include "vpx_ports/arm.h"
|
||||
#include "vp8/common/blockd.h"
|
||||
#include "vp8/common/pragmas.h"
|
||||
#include "vp8/decoder/dequantize.h"
|
||||
#include "vp8/decoder/onyxd_int.h"
|
||||
|
||||
void vp8_arch_arm_decode_init(VP8D_COMP *pbi)
|
||||
{
|
||||
#if CONFIG_RUNTIME_CPU_DETECT
|
||||
int flags = pbi->common.rtcd.flags;
|
||||
|
||||
#if HAVE_ARMV5TE
|
||||
if (flags & HAS_EDSP)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#if HAVE_ARMV6
|
||||
if (flags & HAS_MEDIA)
|
||||
{
|
||||
pbi->dequant.block = vp8_dequantize_b_v6;
|
||||
pbi->dequant.idct_add = vp8_dequant_idct_add_v6;
|
||||
pbi->dequant.idct_add_y_block = vp8_dequant_idct_add_y_block_v6;
|
||||
pbi->dequant.idct_add_uv_block = vp8_dequant_idct_add_uv_block_v6;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if HAVE_ARMV7
|
||||
if (flags & HAS_NEON)
|
||||
{
|
||||
pbi->dequant.block = vp8_dequantize_b_neon;
|
||||
pbi->dequant.idct_add = vp8_dequant_idct_add_neon;
|
||||
pbi->dequant.idct_add_y_block = vp8_dequant_idct_add_y_block_neon;
|
||||
pbi->dequant.idct_add_uv_block = vp8_dequant_idct_add_uv_block_neon;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
}
|
@ -10,7 +10,6 @@
|
||||
|
||||
#include "vpx_config.h"
|
||||
#include "vp8/common/idct.h"
|
||||
#include "vp8/decoder/dequantize.h"
|
||||
|
||||
|
||||
void vp8_dequant_idct_add_y_block_v6(short *q, short *dq,
|
||||
|
@ -10,9 +10,7 @@
|
||||
|
||||
|
||||
#include "vpx_config.h"
|
||||
#include "vp8/decoder/dequantize.h"
|
||||
#include "vp8/common/idct.h"
|
||||
#include "vpx_mem/vpx_mem.h"
|
||||
#include "vp8/common/blockd.h"
|
||||
|
||||
#if HAVE_ARMV7
|
||||
extern void vp8_dequantize_b_loop_neon(short *Q, short *DQC, short *DQ);
|
||||
|
@ -10,7 +10,6 @@
|
||||
|
||||
#include "vpx_config.h"
|
||||
#include "vp8/common/idct.h"
|
||||
#include "vp8/decoder/dequantize.h"
|
||||
|
||||
/* place these declarations here because we don't want to maintain them
|
||||
* outside of this scope
|
||||
|
@ -9,13 +9,14 @@
|
||||
*/
|
||||
|
||||
|
||||
#include "vpx_config.h"
|
||||
#include "vpx_rtcd.h"
|
||||
#include "onyxd_int.h"
|
||||
#include "vp8/common/header.h"
|
||||
#include "vp8/common/reconintra.h"
|
||||
#include "vp8/common/reconintra4x4.h"
|
||||
#include "vp8/common/recon.h"
|
||||
#include "vp8/common/reconinter.h"
|
||||
#include "dequantize.h"
|
||||
#include "detokenize.h"
|
||||
#include "vp8/common/invtrans.h"
|
||||
#include "vp8/common/alloccommon.h"
|
||||
@ -32,7 +33,6 @@
|
||||
#endif
|
||||
#include "vpx_mem/vpx_mem.h"
|
||||
#include "vp8/common/idct.h"
|
||||
#include "dequantize.h"
|
||||
#include "vp8/common/threading.h"
|
||||
#include "decoderthreading.h"
|
||||
#include "dboolhuff.h"
|
||||
@ -218,7 +218,7 @@ static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd,
|
||||
{
|
||||
if (xd->eobs[i] > 1)
|
||||
{
|
||||
DEQUANT_INVOKE(&pbi->dequant, idct_add)
|
||||
vp8_dequant_idct_add
|
||||
(b->qcoeff, b->dequant,
|
||||
*(b->base_dst) + b->dst, b->dst_stride);
|
||||
}
|
||||
@ -247,7 +247,7 @@ static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd,
|
||||
/* do 2nd order transform on the dc block */
|
||||
if (xd->eobs[24] > 1)
|
||||
{
|
||||
DEQUANT_INVOKE(&pbi->dequant, block)(b);
|
||||
vp8_dequantize_b(b);
|
||||
|
||||
IDCT_INVOKE(RTCD_VTABLE(idct), iwalsh16)(&b->dqcoeff[0],
|
||||
xd->qcoeff);
|
||||
@ -272,7 +272,7 @@ static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd,
|
||||
DQC[0] = 1;
|
||||
}
|
||||
|
||||
DEQUANT_INVOKE (&pbi->dequant, idct_add_y_block)
|
||||
vp8_dequant_idct_add_y_block
|
||||
(xd->qcoeff, xd->block[0].dequant,
|
||||
xd->dst.y_buffer,
|
||||
xd->dst.y_stride, xd->eobs);
|
||||
@ -281,7 +281,7 @@ static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd,
|
||||
DQC[0] = dc_dequant_temp;
|
||||
}
|
||||
|
||||
DEQUANT_INVOKE (&pbi->dequant, idct_add_uv_block)
|
||||
vp8_dequant_idct_add_uv_block
|
||||
(xd->qcoeff+16*16, xd->block[16].dequant,
|
||||
xd->dst.u_buffer, xd->dst.v_buffer,
|
||||
xd->dst.uv_stride, xd->eobs+16);
|
||||
|
@ -10,7 +10,8 @@
|
||||
|
||||
|
||||
#include "vpx_config.h"
|
||||
#include "dequantize.h"
|
||||
#include "vpx_rtcd.h"
|
||||
#include "vp8/common/blockd.h"
|
||||
#include "vp8/common/idct.h"
|
||||
#include "vpx_mem/vpx_mem.h"
|
||||
|
||||
|
@ -1,85 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by a BSD-style license
|
||||
* that can be found in the LICENSE file in the root of the source
|
||||
* tree. An additional intellectual property rights grant can be found
|
||||
* in the file PATENTS. All contributing project authors may
|
||||
* be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef DEQUANTIZE_H
|
||||
#define DEQUANTIZE_H
|
||||
#include "vp8/common/blockd.h"
|
||||
|
||||
#define prototype_dequant_block(sym) \
|
||||
void sym(BLOCKD *x)
|
||||
|
||||
#define prototype_dequant_idct_add(sym) \
|
||||
void sym(short *input, short *dq, \
|
||||
unsigned char *output, \
|
||||
int stride)
|
||||
|
||||
#define prototype_dequant_idct_add_y_block(sym) \
|
||||
void sym(short *q, short *dq, \
|
||||
unsigned char *dst, \
|
||||
int stride, char *eobs)
|
||||
|
||||
#define prototype_dequant_idct_add_uv_block(sym) \
|
||||
void sym(short *q, short *dq, \
|
||||
unsigned char *dst_u, \
|
||||
unsigned char *dst_v, int stride, char *eobs)
|
||||
|
||||
#if ARCH_X86 || ARCH_X86_64
|
||||
#include "x86/dequantize_x86.h"
|
||||
#endif
|
||||
|
||||
#if ARCH_ARM
|
||||
#include "arm/dequantize_arm.h"
|
||||
#endif
|
||||
|
||||
#ifndef vp8_dequant_block
|
||||
#define vp8_dequant_block vp8_dequantize_b_c
|
||||
#endif
|
||||
extern prototype_dequant_block(vp8_dequant_block);
|
||||
|
||||
#ifndef vp8_dequant_idct_add
|
||||
#define vp8_dequant_idct_add vp8_dequant_idct_add_c
|
||||
#endif
|
||||
extern prototype_dequant_idct_add(vp8_dequant_idct_add);
|
||||
|
||||
#ifndef vp8_dequant_idct_add_y_block
|
||||
#define vp8_dequant_idct_add_y_block vp8_dequant_idct_add_y_block_c
|
||||
#endif
|
||||
extern prototype_dequant_idct_add_y_block(vp8_dequant_idct_add_y_block);
|
||||
|
||||
#ifndef vp8_dequant_idct_add_uv_block
|
||||
#define vp8_dequant_idct_add_uv_block vp8_dequant_idct_add_uv_block_c
|
||||
#endif
|
||||
extern prototype_dequant_idct_add_uv_block(vp8_dequant_idct_add_uv_block);
|
||||
|
||||
|
||||
typedef prototype_dequant_block((*vp8_dequant_block_fn_t));
|
||||
|
||||
typedef prototype_dequant_idct_add((*vp8_dequant_idct_add_fn_t));
|
||||
|
||||
typedef prototype_dequant_idct_add_y_block((*vp8_dequant_idct_add_y_block_fn_t));
|
||||
|
||||
typedef prototype_dequant_idct_add_uv_block((*vp8_dequant_idct_add_uv_block_fn_t));
|
||||
|
||||
typedef struct
|
||||
{
|
||||
vp8_dequant_block_fn_t block;
|
||||
vp8_dequant_idct_add_fn_t idct_add;
|
||||
vp8_dequant_idct_add_y_block_fn_t idct_add_y_block;
|
||||
vp8_dequant_idct_add_uv_block_fn_t idct_add_uv_block;
|
||||
} vp8_dequant_rtcd_vtable_t;
|
||||
|
||||
#if CONFIG_RUNTIME_CPU_DETECT
|
||||
#define DEQUANT_INVOKE(ctx,fn) (ctx)->fn
|
||||
#else
|
||||
#define DEQUANT_INVOKE(ctx,fn) vp8_dequant_##fn
|
||||
#endif
|
||||
|
||||
#endif
|
@ -10,28 +10,16 @@
|
||||
|
||||
|
||||
#include "vpx_config.h"
|
||||
#include "vp8/decoder/dequantize.h"
|
||||
#include "vpx_rtcd.h"
|
||||
#include "vp8/decoder/onyxd_int.h"
|
||||
|
||||
extern void vp8_arch_x86_decode_init(VP8D_COMP *pbi);
|
||||
extern void vp8_arch_arm_decode_init(VP8D_COMP *pbi);
|
||||
|
||||
void vp8_dmachine_specific_config(VP8D_COMP *pbi)
|
||||
{
|
||||
/* Pure C: */
|
||||
#if CONFIG_RUNTIME_CPU_DETECT
|
||||
pbi->mb.rtcd = &pbi->common.rtcd;
|
||||
pbi->dequant.block = vp8_dequantize_b_c;
|
||||
pbi->dequant.idct_add = vp8_dequant_idct_add_c;
|
||||
pbi->dequant.idct_add_y_block = vp8_dequant_idct_add_y_block_c;
|
||||
pbi->dequant.idct_add_uv_block = vp8_dequant_idct_add_uv_block_c;
|
||||
#endif
|
||||
|
||||
#if ARCH_X86 || ARCH_X86_64
|
||||
vp8_arch_x86_decode_init(pbi);
|
||||
#endif
|
||||
|
||||
#if ARCH_ARM
|
||||
vp8_arch_arm_decode_init(pbi);
|
||||
#endif
|
||||
/* Move this to common once we use it from more than one place. */
|
||||
vpx_rtcd();
|
||||
}
|
||||
|
@ -10,7 +10,6 @@
|
||||
|
||||
#include "vpx_config.h"
|
||||
#include "vp8/common/idct.h"
|
||||
#include "dequantize.h"
|
||||
|
||||
void vp8_dequant_idct_add_c(short *input, short *dq,
|
||||
unsigned char *dest, int stride);
|
||||
|
@ -16,7 +16,6 @@
|
||||
#include "treereader.h"
|
||||
#include "vp8/common/onyxc_int.h"
|
||||
#include "vp8/common/threading.h"
|
||||
#include "dequantize.h"
|
||||
#if CONFIG_ERROR_CONCEALMENT
|
||||
#include "ec_types.h"
|
||||
#endif
|
||||
@ -93,10 +92,6 @@ typedef struct VP8Decompressor
|
||||
|
||||
DATARATE dr[16];
|
||||
|
||||
#if CONFIG_RUNTIME_CPU_DETECT
|
||||
vp8_dequant_rtcd_vtable_t dequant;
|
||||
#endif
|
||||
|
||||
|
||||
vp8_prob prob_intra;
|
||||
vp8_prob prob_last;
|
||||
|
18
vp8/decoder/rtcd_defs.sh
Normal file
18
vp8/decoder/rtcd_defs.sh
Normal file
@ -0,0 +1,18 @@
|
||||
decoder_forward_decls() {
|
||||
cat <<EOF
|
||||
struct blockd;
|
||||
EOF
|
||||
}
|
||||
forward_decls decoder_forward_decls
|
||||
|
||||
prototype void vp8_dequantize_b "struct blockd*"
|
||||
specialize vp8_dequantize_b mmx v6 neon
|
||||
|
||||
prototype void vp8_dequant_idct_add "short *input, short *dq, unsigned char *output, int stride"
|
||||
specialize vp8_dequant_idct_add mmx v6 neon
|
||||
|
||||
prototype void vp8_dequant_idct_add_y_block "short *q, short *dq, unsigned char *dst, int stride, char *eobs"
|
||||
specialize vp8_dequant_idct_add_y_block mmx sse2 v6 neon
|
||||
|
||||
prototype void vp8_dequant_idct_add_uv_block "short *q, short *dq, unsigned char *dst_u, unsigned char *dst_v, int stride, char *eobs"
|
||||
specialize vp8_dequant_idct_add_uv_block mmx sse2 v6 neon
|
@ -9,6 +9,8 @@
|
||||
*/
|
||||
|
||||
|
||||
#include "vpx_config.h"
|
||||
#include "vpx_rtcd.h"
|
||||
#if !defined(WIN32) && CONFIG_OS_SUPPORT == 1
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
@ -189,7 +191,7 @@ static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd, int mb_row, int m
|
||||
{
|
||||
if (xd->eobs[i] > 1)
|
||||
{
|
||||
DEQUANT_INVOKE(&pbi->dequant, idct_add)
|
||||
vp8_dequant_idct_add
|
||||
(b->qcoeff, b->dequant,
|
||||
*(b->base_dst) + b->dst, b->dst_stride);
|
||||
}
|
||||
@ -217,7 +219,7 @@ static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd, int mb_row, int m
|
||||
/* do 2nd order transform on the dc block */
|
||||
if (xd->eobs[24] > 1)
|
||||
{
|
||||
DEQUANT_INVOKE(&pbi->dequant, block)(b);
|
||||
vp8_dequantize_b(b);
|
||||
|
||||
IDCT_INVOKE(RTCD_VTABLE(idct), iwalsh16)(&b->dqcoeff[0],
|
||||
xd->qcoeff);
|
||||
@ -248,13 +250,13 @@ static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd, int mb_row, int m
|
||||
DQC = local_dequant;
|
||||
}
|
||||
|
||||
DEQUANT_INVOKE (&pbi->dequant, idct_add_y_block)
|
||||
vp8_dequant_idct_add_y_block
|
||||
(xd->qcoeff, DQC,
|
||||
xd->dst.y_buffer,
|
||||
xd->dst.y_stride, xd->eobs);
|
||||
}
|
||||
|
||||
DEQUANT_INVOKE (&pbi->dequant, idct_add_uv_block)
|
||||
vp8_dequant_idct_add_uv_block
|
||||
(xd->qcoeff+16*16, xd->block[16].dequant,
|
||||
xd->dst.u_buffer, xd->dst.v_buffer,
|
||||
xd->dst.uv_stride, xd->eobs+16);
|
||||
|
@ -1,58 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by a BSD-style license
|
||||
* that can be found in the LICENSE file in the root of the source
|
||||
* tree. An additional intellectual property rights grant can be found
|
||||
* in the file PATENTS. All contributing project authors may
|
||||
* be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef DEQUANTIZE_X86_H
|
||||
#define DEQUANTIZE_X86_H
|
||||
|
||||
|
||||
/* Note:
|
||||
*
|
||||
* This platform is commonly built for runtime CPU detection. If you modify
|
||||
* any of the function mappings present in this file, be sure to also update
|
||||
* them in the function pointer initialization code
|
||||
*/
|
||||
#if HAVE_MMX
|
||||
extern prototype_dequant_block(vp8_dequantize_b_mmx);
|
||||
extern prototype_dequant_idct_add(vp8_dequant_idct_add_mmx);
|
||||
extern prototype_dequant_idct_add_y_block(vp8_dequant_idct_add_y_block_mmx);
|
||||
extern prototype_dequant_idct_add_uv_block(vp8_dequant_idct_add_uv_block_mmx);
|
||||
|
||||
#if !CONFIG_RUNTIME_CPU_DETECT
|
||||
#undef vp8_dequant_block
|
||||
#define vp8_dequant_block vp8_dequantize_b_mmx
|
||||
|
||||
#undef vp8_dequant_idct_add
|
||||
#define vp8_dequant_idct_add vp8_dequant_idct_add_mmx
|
||||
|
||||
#undef vp8_dequant_idct_add_y_block
|
||||
#define vp8_dequant_idct_add_y_block vp8_dequant_idct_add_y_block_mmx
|
||||
|
||||
#undef vp8_dequant_idct_add_uv_block
|
||||
#define vp8_dequant_idct_add_uv_block vp8_dequant_idct_add_uv_block_mmx
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if HAVE_SSE2
|
||||
extern prototype_dequant_idct_add_y_block(vp8_dequant_idct_add_y_block_sse2);
|
||||
extern prototype_dequant_idct_add_uv_block(vp8_dequant_idct_add_uv_block_sse2);
|
||||
|
||||
#if !CONFIG_RUNTIME_CPU_DETECT
|
||||
#undef vp8_dequant_idct_add_y_block
|
||||
#define vp8_dequant_idct_add_y_block vp8_dequant_idct_add_y_block_sse2
|
||||
|
||||
#undef vp8_dequant_idct_add_uv_block
|
||||
#define vp8_dequant_idct_add_uv_block vp8_dequant_idct_add_uv_block_sse2
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif
|
@ -9,8 +9,8 @@
|
||||
*/
|
||||
|
||||
#include "vpx_config.h"
|
||||
#include "vpx_rtcd.h"
|
||||
#include "vp8/common/idct.h"
|
||||
#include "vp8/decoder/dequantize.h"
|
||||
|
||||
void vp8_dequant_idct_add_y_block_mmx
|
||||
(short *q, short *dq,
|
||||
|
@ -10,7 +10,6 @@
|
||||
|
||||
#include "vpx_config.h"
|
||||
#include "vp8/common/idct.h"
|
||||
#include "vp8/decoder/dequantize.h"
|
||||
|
||||
void vp8_idct_dequant_0_2x_sse2
|
||||
(short *q, short *dq ,
|
||||
|
@ -10,8 +10,8 @@
|
||||
|
||||
|
||||
#include "vpx_config.h"
|
||||
#include "vpx_ports/x86.h"
|
||||
#include "vp8/decoder/onyxd_int.h"
|
||||
#include "vpx_rtcd.h"
|
||||
#include "vp8/common/blockd.h"
|
||||
|
||||
|
||||
#if HAVE_MMX
|
||||
@ -25,35 +25,3 @@ void vp8_dequantize_b_mmx(BLOCKD *d)
|
||||
vp8_dequantize_b_impl_mmx(sq, dq, q);
|
||||
}
|
||||
#endif
|
||||
|
||||
void vp8_arch_x86_decode_init(VP8D_COMP *pbi)
|
||||
{
|
||||
#if CONFIG_RUNTIME_CPU_DETECT
|
||||
int flags = x86_simd_caps();
|
||||
|
||||
/* Note:
|
||||
*
|
||||
* This platform can be built without runtime CPU detection as well. If
|
||||
* you modify any of the function mappings present in this file, be sure
|
||||
* to also update them in static mapings (<arch>/filename_<arch>.h)
|
||||
*/
|
||||
/* Override default functions with fastest ones for this CPU. */
|
||||
#if HAVE_MMX
|
||||
if (flags & HAS_MMX)
|
||||
{
|
||||
pbi->dequant.block = vp8_dequantize_b_mmx;
|
||||
pbi->dequant.idct_add = vp8_dequant_idct_add_mmx;
|
||||
pbi->dequant.idct_add_y_block = vp8_dequant_idct_add_y_block_mmx;
|
||||
pbi->dequant.idct_add_uv_block = vp8_dequant_idct_add_uv_block_mmx;
|
||||
}
|
||||
#endif
|
||||
#if HAVE_SSE2
|
||||
if (flags & HAS_SSE2)
|
||||
{
|
||||
pbi->dequant.idct_add_y_block = vp8_dequant_idct_add_y_block_sse2;
|
||||
pbi->dequant.idct_add_uv_block = vp8_dequant_idct_add_uv_block_sse2;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
}
|
||||
|
@ -51,6 +51,7 @@ VP8_COMMON_SRCS-yes += common/recon.h
|
||||
VP8_COMMON_SRCS-yes += common/reconinter.h
|
||||
VP8_COMMON_SRCS-yes += common/reconintra.h
|
||||
VP8_COMMON_SRCS-yes += common/reconintra4x4.h
|
||||
VP8_COMMON_SRCS-yes += common/rtcd.c
|
||||
VP8_COMMON_SRCS-yes += common/setupintrarecon.h
|
||||
VP8_COMMON_SRCS-yes += common/subpixel.h
|
||||
VP8_COMMON_SRCS-yes += common/swapyv12buffer.h
|
||||
|
@ -61,7 +61,6 @@ VP8_DX_SRCS-yes += decoder/generic/dsystemdependent.c
|
||||
VP8_DX_SRCS-yes += decoder/dboolhuff.h
|
||||
VP8_DX_SRCS-yes += decoder/decodemv.h
|
||||
VP8_DX_SRCS-yes += decoder/decoderthreading.h
|
||||
VP8_DX_SRCS-yes += decoder/dequantize.h
|
||||
VP8_DX_SRCS-yes += decoder/detokenize.h
|
||||
VP8_DX_SRCS-yes += decoder/onyxd_int.h
|
||||
VP8_DX_SRCS-yes += decoder/treereader.h
|
||||
@ -70,10 +69,10 @@ VP8_DX_SRCS-$(CONFIG_MULTITHREAD) += decoder/threading.c
|
||||
VP8_DX_SRCS-yes += decoder/idct_blk.c
|
||||
VP8_DX_SRCS-$(CONFIG_MULTITHREAD) += decoder/reconintra_mt.h
|
||||
VP8_DX_SRCS-$(CONFIG_MULTITHREAD) += decoder/reconintra_mt.c
|
||||
VP8_DX_SRCS-yes += decoder/rtcd_defs.sh
|
||||
|
||||
VP8_DX_SRCS-yes := $(filter-out $(VP8_DX_SRCS_REMOVE-yes),$(VP8_DX_SRCS-yes))
|
||||
|
||||
VP8_DX_SRCS-$(ARCH_X86)$(ARCH_X86_64) += decoder/x86/dequantize_x86.h
|
||||
VP8_DX_SRCS-$(ARCH_X86)$(ARCH_X86_64) += decoder/x86/x86_dsystemdependent.c
|
||||
VP8_DX_SRCS-$(HAVE_MMX) += decoder/x86/dequantize_mmx.asm
|
||||
VP8_DX_SRCS-$(HAVE_MMX) += decoder/x86/idct_blk_mmx.c
|
||||
|
@ -11,7 +11,6 @@
|
||||
|
||||
#VP8_DX_SRCS list is modified according to different platforms.
|
||||
|
||||
VP8_DX_SRCS-$(ARCH_ARM) += decoder/arm/arm_dsystemdependent.c
|
||||
VP8_DX_SRCS-$(ARCH_ARM) += decoder/arm/dequantize_arm.c
|
||||
VP8_DX_SRCS-$(ARCH_ARM) += decoder/arm/dequantize_arm.h
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user