ASFLAGS = ${ASFLAGS}
extralibs = ${extralibs}
AS_SFX = ${AS_SFX:-.asm}
+RTCD_OPTIONS = ${RTCD_OPTIONS}
EOF
if enabled rvct; then cat >> $1 << EOF
;;
--enable-?*|--disable-?*)
eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
- echo "${CMDLINE_SELECT} ${ARCH_EXT_LIST}" | grep "^ *$option\$" >/dev/null || die_unknown $opt
+ if echo "${ARCH_EXT_LIST}" | grep "^ *$option\$" >/dev/null; then
+ [ $action = "disable" ] && RTCD_OPTIONS="${RTCD_OPTIONS}${opt} "
+ else
+ echo "${CMDLINE_SELECT}" | grep "^ *$option\$" >/dev/null ||
+ die_unknown $opt
+ fi
$action $option
;;
+ --require-?*)
+ eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
+ if echo "${ARCH_EXT_LIST}" none | grep "^ *$option\$" >/dev/null; then
+ RTCD_OPTIONS="${RTCD_OPTIONS}${opt} "
+ else
+ die_unknown $opt
+ fi
+ ;;
--force-enable-?*|--force-disable-?*)
eval `echo "$opt" | sed 's/--force-/action=/;s/-/ option=/;s/-/_/g'`
$action $option
--- /dev/null
+#!/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
+ --require-EXT Require support for EXT extensions
+ --sym=SYMBOL Unique symbol to use for RTCD initialization function
+ --config=FILE File with CONFIG_FOO=yes lines to parse
+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";;
+ --require-*) REQUIRES="${REQUIRES}${opt#--require-} ";;
+ --sym) die_argument_required;;
+ --sym=*) symbol=${optval};;
+ --config=*) config_file=${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
+
+# Import the configuration
+[ -f "$config_file" ] && eval $(grep CONFIG_ "$config_file")
+
+#
+# Routines for the RTCD DSL to call
+#
+prototype() {
+ local rtyp
+ case "$1" in
+ unsigned) rtyp="$1 "; shift;;
+ esac
+ rtyp="${rtyp}$1"
+ local fn="$2"
+ local args="$3"
+
+ eval "${2}_rtyp='$rtyp'"
+ eval "${2}_args='$3'"
+ ALL_FUNCS="$ALL_FUNCS $fn"
+ specialize $fn c
+}
+
+specialize() {
+ local fn="$1"
+ shift
+ for opt in "$@"; 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 disable it, as we know
+ # we can do better.
+ local best=$(eval "echo \$${fn}_default")
+ local best_ofn=$(eval "echo \$${best}")
+ [ -n "$best" ] && [ "$best_ofn" != "$ofn" ] && eval "${best}_link=false"
+ eval "${fn}_default=${fn}_${opt}"
+ eval "${fn}_${opt}_link=true"
+ 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
+ local link=$(eval "echo \$${fn}_${opt}_link")
+ [ "$link" = "false" ] && continue
+ n="${n}x"
+ done
+ if [ "$n" = "x" ]; then
+ eval "${fn}_indirect=false"
+ else
+ eval "${fn}_indirect=true"
+ fi
+ done
+}
+
+declare_function_pointers() {
+ for fn in $ALL_FUNCS; do
+ 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
+ echo "$rtyp ${ofn}($args);"
+ done
+ if [ "$(eval "echo \$${fn}_indirect")" = "false" ]; 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;
+ local link=$(eval "echo \$${fn}_${opt}_link")
+ [ "$link" = "false" ] && continue
+ local cond="$(eval "echo \$have_${opt}")"
+ echo " if (${cond}) $fn = $ofn;"
+ done
+ fi
+ echo
+ 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
+
+ # Assign the helper variable for each enabled extension
+ for opt in $ALL_ARCHS; do
+ local uc=$(echo -n $opt | tr '[a-z]' '[A-Z]')
+ eval "have_${opt}=\"flags & HAS_${uc}\""
+ done
+
+ 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();
+
+ (void)flags;
+
+$(set_function_pointers c $ALL_ARCHS)
+}
+#endif
+$(common_bottom)
+EOF
+}
+
+arm() {
+ determine_indirection c $ALL_ARCHS
+
+ # Assign the helper variable for each enabled extension
+ for opt in $ALL_ARCHS; do
+ local uc=$(echo -n $opt | tr '[a-z]' '[A-Z]')
+ eval "have_${opt}=\"flags & HAS_${uc}\""
+ done
+
+ cat <<EOF
+$(common_top)
+#include "vpx_config.h"
+
+void ${symbol:-rtcd}(void);
+
+#ifdef RTCD_C
+#include "vpx_ports/arm.h"
+void ${symbol:-rtcd}(void)
+{
+ int flags = arm_cpu_caps();
+
+ (void)flags;
+
+$(set_function_pointers c $ALL_ARCHS)
+}
+#endif
+$(common_bottom)
+EOF
+}
+
+
+unoptimized() {
+ determine_indirection c
+ cat <<EOF
+$(common_top)
+#include "vpx_config.h"
+
+void ${symbol:-rtcd}(void);
+
+#ifdef RTCD_C
+void ${symbol:-rtcd}(void)
+{
+$(set_function_pointers c)
+}
+#endif
+$(common_bottom)
+EOF
+
+}
+#
+# Main Driver
+#
+require c
+case $arch in
+ x86)
+ ALL_ARCHS=$(filter mmx sse sse2 sse3 ssse3 sse4_1)
+ x86
+ ;;
+ x86_64)
+ ALL_ARCHS=$(filter mmx sse sse2 sse3 ssse3 sse4_1)
+ REQUIRES=${REQUIRES:-mmx sse sse2}
+ require $(filter $REQUIRES)
+ x86
+ ;;
+ armv5te)
+ ALL_ARCHS=$(filter edsp)
+ arm
+ ;;
+ armv6)
+ ALL_ARCHS=$(filter edsp media)
+ arm
+ ;;
+ armv7)
+ ALL_ARCHS=$(filter edsp media neon)
+ arm
+ ;;
+ *)
+ unoptimized
+ ;;
+esac
CODEC_SRCS-yes += $(addprefix $(VP8_PREFIX),$(call enabled,VP8_DX_SRCS))
CODEC_EXPORTS-yes += $(addprefix $(VP8_PREFIX),$(VP8_DX_EXPORTS))
CODEC_SRCS-yes += $(VP8_PREFIX)vp8dx.mk vpx/vp8.h vpx/vp8dx.h
- CODEC_SRCS-$(ARCH_ARM) += $(VP8_PREFIX)vp8dx_arm.mk
INSTALL-LIBS-yes += include/vpx/vp8.h include/vpx/vp8dx.h
INSTALL_MAPS += include/vpx/% $(SRC_PATH_BARE)/$(VP8_PREFIX)/%
CODEC_DOC_SRCS += vpx/vp8.h vpx/vp8dx.h
$(eval $(if $(filter universal%,$(TOOLCHAIN)),LIPO_LIBVPX,BUILD_LIBVPX):=yes)
CODEC_SRCS-$(BUILD_LIBVPX) += build/make/version.sh
+CODEC_SRCS-$(BUILD_LIBVPX) += build/make/rtcd.sh
CODEC_SRCS-$(BUILD_LIBVPX) += vpx/vpx_integer.h
CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/asm_offsets.h
CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/vpx_timer.h
PROJECTS-$(BUILD_LIBVPX) += vpx.vcproj
vpx.vcproj: vpx_config.asm
+vpx.vcproj: vpx_rtcd.h
endif
else
$(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)))
+ @echo " [CREATE] $@"
+ $(qexec)$(SRC_PATH_BARE)/build/make/rtcd.sh --arch=$(TGT_ISA) \
+ --sym=vpx_rtcd \
+ --config=$(target)$(if $(FAT_ARCHS),,-$(TOOLCHAIN)).mk \
+ $(RTCD_OPTIONS) $^ > $@
+CLEAN-OBJS += $(BUILD_PFX)vpx_rtcd.h
+
CODEC_DOC_SRCS += vpx/vpx_codec.h \
vpx/vpx_decoder.h \
vpx/vpx_encoder.h \
rtcd->recon.copy8x8 = vp8_copy_mem8x8_v6;
rtcd->recon.copy8x4 = vp8_copy_mem8x4_v6;
rtcd->recon.intra4x4_predict = vp8_intra4x4_predict_armv6;
-
- rtcd->dequant.block = vp8_dequantize_b_v6;
- rtcd->dequant.idct_add = vp8_dequant_idct_add_v6;
- rtcd->dequant.idct_add_y_block = vp8_dequant_idct_add_y_block_v6;
- rtcd->dequant.idct_add_uv_block = vp8_dequant_idct_add_uv_block_v6;
-
}
#endif
vp8_build_intra_predictors_mby_neon;
rtcd->recon.build_intra_predictors_mby_s =
vp8_build_intra_predictors_mby_s_neon;
-
- rtcd->dequant.block = vp8_dequantize_b_neon;
- rtcd->dequant.idct_add = vp8_dequant_idct_add_neon;
- rtcd->dequant.idct_add_y_block = vp8_dequant_idct_add_y_block_neon;
- rtcd->dequant.idct_add_uv_block = vp8_dequant_idct_add_uv_block_neon;
-
}
#endif
#include "vpx_config.h"
#include "vp8/common/idct.h"
-#include "vp8/common/dequantize.h"
void vp8_dequant_idct_add_y_block_v6(short *q, short *dq,
#include "vpx_config.h"
-#include "vp8/common/dequantize.h"
-#include "vp8/common/idct.h"
+#include "vp8/common/blockd.h"
#if HAVE_NEON
extern void vp8_dequantize_b_loop_neon(short *Q, short *DQC, short *DQ);
+++ /dev/null
-/*
- * 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_ARM_H
-#define DEQUANTIZE_ARM_H
-
-#if HAVE_MEDIA
-extern prototype_dequant_block(vp8_dequantize_b_v6);
-extern prototype_dequant_idct_add(vp8_dequant_idct_add_v6);
-extern prototype_dequant_idct_add_y_block(vp8_dequant_idct_add_y_block_v6);
-extern prototype_dequant_idct_add_uv_block(vp8_dequant_idct_add_uv_block_v6);
-
-#if !CONFIG_RUNTIME_CPU_DETECT
-#undef vp8_dequant_block
-#define vp8_dequant_block vp8_dequantize_b_v6
-
-#undef vp8_dequant_idct_add
-#define vp8_dequant_idct_add vp8_dequant_idct_add_v6
-
-#undef vp8_dequant_idct_add_y_block
-#define vp8_dequant_idct_add_y_block vp8_dequant_idct_add_y_block_v6
-
-#undef vp8_dequant_idct_add_uv_block
-#define vp8_dequant_idct_add_uv_block vp8_dequant_idct_add_uv_block_v6
-#endif
-#endif
-
-#if HAVE_NEON
-extern prototype_dequant_block(vp8_dequantize_b_neon);
-extern prototype_dequant_idct_add(vp8_dequant_idct_add_neon);
-extern prototype_dequant_idct_add_y_block(vp8_dequant_idct_add_y_block_neon);
-extern prototype_dequant_idct_add_uv_block(vp8_dequant_idct_add_uv_block_neon);
-
-
-#if !CONFIG_RUNTIME_CPU_DETECT
-#undef vp8_dequant_block
-#define vp8_dequant_block vp8_dequantize_b_neon
-
-#undef vp8_dequant_idct_add
-#define vp8_dequant_idct_add vp8_dequant_idct_add_neon
-
-#undef vp8_dequant_idct_add_y_block
-#define vp8_dequant_idct_add_y_block vp8_dequant_idct_add_y_block_neon
-
-#undef vp8_dequant_idct_add_uv_block
-#define vp8_dequant_idct_add_uv_block vp8_dequant_idct_add_uv_block_neon
-#endif
-
-#endif
-
-#endif
#include "vpx_config.h"
#include "vp8/common/idct.h"
-#include "vp8/common/dequantize.h"
/* place these declarations here because we don't want to maintain them
* outside of this scope
} LOWER_RES_INFO;
#endif
-typedef struct
+typedef struct blockd
{
short *qcoeff;
short *dqcoeff;
#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"
+++ /dev/null
-/*
- * 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, short *DQC)
-
-#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
#include "vpx_config.h"
+#include "vpx_rtcd.h"
#include "vp8/common/subpixel.h"
#include "vp8/common/loopfilter.h"
#include "vp8/common/recon.h"
VP8_COMMON_RTCD *rtcd = &ctx->rtcd;
- rtcd->dequant.block = vp8_dequantize_b_c;
- rtcd->dequant.idct_add = vp8_dequant_idct_add_c;
- rtcd->dequant.idct_add_y_block = vp8_dequant_idct_add_y_block_c;
- rtcd->dequant.idct_add_uv_block =
- vp8_dequant_idct_add_uv_block_c;
-
-
rtcd->idct.idct16 = vp8_short_idct4x4llm_c;
rtcd->idct.idct1_scalar_add = vp8_dc_only_idct_add_c;
rtcd->idct.iwalsh1 = vp8_short_inv_walsh4x4_1_c;
#if CONFIG_MULTITHREAD
ctx->processor_core_count = get_cpu_count();
#endif /* CONFIG_MULTITHREAD */
+
+ vpx_rtcd();
}
#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);
#define __INC_INVTRANS_H
#include "vpx_config.h"
+#include "vpx_rtcd.h"
#include "idct.h"
#include "blockd.h"
#include "onyxc_int.h"
DQC = xd->dequant_y1_dc;
}
- DEQUANT_INVOKE (&rtcd->dequant, idct_add_y_block)
+ vp8_dequant_idct_add_y_block
(xd->qcoeff, DQC,
xd->dst.y_buffer,
xd->dst.y_stride, xd->eobs);
#if CONFIG_POSTPROC
#include "postproc.h"
#endif
-#include "dequantize.h"
/*#ifdef PACKET_TESTING*/
#include "header.h"
typedef struct VP8_COMMON_RTCD
{
#if CONFIG_RUNTIME_CPU_DETECT
- vp8_dequant_rtcd_vtable_t dequant;
vp8_idct_rtcd_vtable_t idct;
vp8_recon_rtcd_vtable_t recon;
vp8_subpix_rtcd_vtable_t subpix;
/*
- * Copyright (c) 2010 The WebM project authors. All Rights Reserved.
+ * 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
* 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/x86.h"
-#include "vp8/decoder/onyxd_int.h"
-
-void vp8_arch_x86_decode_init(VP8D_COMP *pbi)
-{
-
-}
+#define RTCD_C
+#include "vpx_rtcd.h"
--- /dev/null
+common_forward_decls() {
+cat <<EOF
+struct blockd;
+EOF
+}
+forward_decls common_forward_decls
+
+prototype void vp8_dequantize_b "struct blockd*, short *dqc"
+specialize vp8_dequantize_b mmx media neon
+vp8_dequantize_b_media=vp8_dequantize_b_v6
+
+prototype void vp8_dequant_idct_add "short *input, short *dq, unsigned char *output, int stride"
+specialize vp8_dequant_idct_add mmx media neon
+vp8_dequant_idct_add_media=vp8_dequant_idct_add_v6
+
+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 media neon
+vp8_dequant_idct_add_y_block_media=vp8_dequant_idct_add_y_block_v6
+
+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 media neon
+vp8_dequant_idct_add_uv_block_media=vp8_dequant_idct_add_uv_block_v6
+++ /dev/null
-/*
- * 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
*/
#include "vpx_config.h"
+#include "vpx_rtcd.h"
#include "vp8/common/idct.h"
-#include "vp8/common/dequantize.h"
+#include "vp8/common/blockd.h"
extern void vp8_dequantize_b_impl_mmx(short *sq, short *dq, short *q);
#include "vpx_config.h"
#include "vp8/common/idct.h"
-#include "vp8/common/dequantize.h"
void vp8_idct_dequant_0_2x_sse2
(short *q, short *dq ,
if (flags & HAS_MMX)
{
- rtcd->dequant.block = vp8_dequantize_b_mmx;
- rtcd->dequant.idct_add = vp8_dequant_idct_add_mmx;
- rtcd->dequant.idct_add_y_block = vp8_dequant_idct_add_y_block_mmx;
- rtcd->dequant.idct_add_uv_block = vp8_dequant_idct_add_uv_block_mmx;
-
rtcd->idct.idct16 = vp8_short_idct4x4llm_mmx;
rtcd->idct.idct1_scalar_add = vp8_dc_only_idct_add_mmx;
rtcd->idct.iwalsh16 = vp8_short_inv_walsh4x4_mmx;
rtcd->recon.build_intra_predictors_mby_s =
vp8_build_intra_predictors_mby_s_sse2;
- rtcd->dequant.idct_add_y_block = vp8_dequant_idct_add_y_block_sse2;
- rtcd->dequant.idct_add_uv_block = vp8_dequant_idct_add_uv_block_sse2;
-
rtcd->idct.iwalsh16 = vp8_short_inv_walsh4x4_sse2;
rtcd->subpix.sixtap16x16 = vp8_sixtap_predict16x16_sse2;
+++ /dev/null
-/*
- * 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/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_EDSP
- if (flags & HAS_EDSP)
- {
- }
-#endif
-
-#if HAVE_MEDIA
- if (flags & HAS_MEDIA)
- {
- }
-#endif
-
-#if HAVE_NEON
- if (flags & HAS_NEON)
- {
- }
-#endif
-#endif
-}
*/
+#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 "vp8/common/dequantize.h"
#include "detokenize.h"
#include "vp8/common/invtrans.h"
#include "vp8/common/alloccommon.h"
#endif
#include "vpx_mem/vpx_mem.h"
#include "vp8/common/idct.h"
-
#include "vp8/common/threading.h"
#include "decoderthreading.h"
#include "dboolhuff.h"
{
if (xd->eobs[i] > 1)
{
- DEQUANT_INVOKE(&pbi->common.rtcd.dequant, idct_add)
+ vp8_dequant_idct_add
(b->qcoeff, DQC,
*(b->base_dst) + b->dst, b->dst_stride);
}
/* do 2nd order transform on the dc block */
if (xd->eobs[24] > 1)
{
- DEQUANT_INVOKE(&pbi->common.rtcd.dequant, block)(b,
- xd->dequant_y2);
+ vp8_dequantize_b(b, xd->dequant_y2);
IDCT_INVOKE(RTCD_VTABLE(idct), iwalsh16)(&b->dqcoeff[0],
xd->qcoeff);
DQC = xd->dequant_y1_dc;
}
- DEQUANT_INVOKE (&pbi->common.rtcd.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->common.rtcd.dequant, idct_add_uv_block)
+ vp8_dequant_idct_add_uv_block
(xd->qcoeff+16*16, xd->dequant_uv,
xd->dst.u_buffer, xd->dst.v_buffer,
xd->dst.uv_stride, xd->eobs+16);
+++ /dev/null
-/*
- * 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 "vp8/common/dequantize.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;
-#endif
-
-#if ARCH_X86 || ARCH_X86_64
- vp8_arch_x86_decode_init(pbi);
-#endif
-
-#if ARCH_ARM
- vp8_arch_arm_decode_init(pbi);
-#endif
-}
vp8dx_initialize();
vp8_create_common(&pbi->common);
- vp8_dmachine_specific_config(pbi);
+#if CONFIG_RUNTIME_CPU_DETECT
+ pbi->mb.rtcd = &pbi->common.rtcd;
+#endif
pbi->common.current_video_frame = 0;
pbi->ready_for_new_data = 1;
#include "vp8/common/onyxc_int.h"
#include "vp8/common/threading.h"
-
#if CONFIG_ERROR_CONCEALMENT
#include "ec_types.h"
#endif
} VP8D_COMP;
int vp8_decode_frame(VP8D_COMP *cpi);
-void vp8_dmachine_specific_config(VP8D_COMP *pbi);
-
#if CONFIG_DEBUG
#define CHECK_MEM_ERROR(lval,expr) do {\
*/
+#include "vpx_config.h"
+#include "vpx_rtcd.h"
#if !defined(WIN32) && CONFIG_OS_SUPPORT == 1
# include <unistd.h>
#endif
{
if (xd->eobs[i] > 1)
{
- DEQUANT_INVOKE(&pbi->common.rtcd.dequant, idct_add)
+ vp8_dequant_idct_add
(b->qcoeff, DQC,
*(b->base_dst) + b->dst, b->dst_stride);
}
/* do 2nd order transform on the dc block */
if (xd->eobs[24] > 1)
{
- DEQUANT_INVOKE(&pbi->common.rtcd.dequant, block)(b, xd->dequant_y2);
+ vp8_dequantize_b(b, xd->dequant_y2);
IDCT_INVOKE(RTCD_VTABLE(idct), iwalsh16)(&b->dqcoeff[0],
xd->qcoeff);
DQC = xd->dequant_y1_dc;
}
- DEQUANT_INVOKE (&pbi->common.rtcd.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->common.rtcd.dequant, idct_add_uv_block)
+ vp8_dequant_idct_add_uv_block
(xd->qcoeff+16*16, xd->dequant_uv,
xd->dst.u_buffer, xd->dst.v_buffer,
xd->dst.uv_stride, xd->eobs+16);
if (xd->mode_info_context->mbmi.mode != B_PRED)
vp8_inverse_transform_mby(xd, IF_RTCD(&cpi->common.rtcd));
- DEQUANT_INVOKE (&cpi->common.rtcd.dequant, idct_add_uv_block)
+ vp8_dequant_idct_add_uv_block
(xd->qcoeff+16*16, xd->dequant_uv,
xd->dst.u_buffer, xd->dst.v_buffer,
xd->dst.uv_stride, xd->eobs+16);
if (xd->mode_info_context->mbmi.mode != B_PRED)
vp8_inverse_transform_mby(xd, IF_RTCD(&cpi->common.rtcd));
- DEQUANT_INVOKE (&cpi->common.rtcd.dequant, idct_add_uv_block)
+ vp8_dequant_idct_add_uv_block
(xd->qcoeff+16*16, xd->dequant_uv,
xd->dst.u_buffer, xd->dst.v_buffer,
xd->dst.uv_stride, xd->eobs+16);
extern void vp8cx_set_alt_lf_level(VP8_COMP *cpi, int filt_val);
extern void vp8cx_pick_filter_level(YV12_BUFFER_CONFIG *sd, VP8_COMP *cpi);
-extern void vp8_dmachine_specific_config(VP8_COMP *cpi);
extern void vp8_cmachine_specific_config(VP8_COMP *cpi);
extern void vp8_deblock_frame(YV12_BUFFER_CONFIG *source, YV12_BUFFER_CONFIG *post, int filt_lvl, int low_var_thresh, int flag);
extern void print_parms(VP8_CONFIG *ocf, char *filenam);
{
vp8_scale_machine_specific_config();
vp8_initialize_common();
- //vp8_dmachine_specific_config();
vp8_tokenize_initialize();
init_done = 1;
VP8_COMMON_SRCS-yes += common/debugmodes.c
VP8_COMMON_SRCS-yes += common/default_coef_probs.h
VP8_COMMON_SRCS-yes += common/dequantize.c
-VP8_COMMON_SRCS-yes += common/dequantize.h
VP8_COMMON_SRCS-yes += common/entropy.c
VP8_COMMON_SRCS-yes += common/entropymode.c
VP8_COMMON_SRCS-yes += common/entropymv.c
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/rtcd_defs.sh
VP8_COMMON_SRCS-yes += common/setupintrarecon.h
VP8_COMMON_SRCS-yes += common/subpixel.h
VP8_COMMON_SRCS-yes += common/swapyv12buffer.h
VP8_COMMON_SRCS-$(CONFIG_POSTPROC_VISUALIZER) += common/textblit.c
VP8_COMMON_SRCS-yes += common/treecoder.c
-VP8_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/dequantize_x86.h
VP8_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/filter_x86.c
VP8_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/filter_x86.h
VP8_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/idct_x86.h
VP8_COMMON_SRCS-$(ARCH_ARM) += common/arm/reconintra_arm.c
VP8_COMMON_SRCS-$(ARCH_ARM) += common/arm/subpixel_arm.h
VP8_COMMON_SRCS-$(ARCH_ARM) += common/arm/dequantize_arm.c
-VP8_COMMON_SRCS-$(ARCH_ARM) += common/arm/dequantize_arm.h
# common (media)
VP8_COMMON_SRCS-$(HAVE_MEDIA) += common/arm/bilinearfilter_arm.c
VP8_DX_SRCS_REMOVE-yes += $(VP8_COMMON_SRCS_REMOVE-yes)
VP8_DX_SRCS_REMOVE-no += $(VP8_COMMON_SRCS_REMOVE-no)
-ifeq ($(ARCH_ARM),yes)
- include $(SRC_PATH_BARE)/$(VP8_PREFIX)vp8dx_arm.mk
-endif
-
VP8_DX_SRCS-yes += vp8_dx_iface.c
# common
VP8_DX_SRCS-$(CONFIG_ERROR_CONCEALMENT) += decoder/ec_types.h
VP8_DX_SRCS-$(CONFIG_ERROR_CONCEALMENT) += decoder/error_concealment.h
VP8_DX_SRCS-$(CONFIG_ERROR_CONCEALMENT) += decoder/error_concealment.c
-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-$(CONFIG_MULTITHREAD) += decoder/reconintra_mt.c
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/x86_dsystemdependent.c
+++ /dev/null
-##
-## 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.
-##
-
-
-#VP8_DX_SRCS list is modified according to different platforms.
-
-VP8_DX_SRCS-$(ARCH_ARM) += decoder/arm/arm_dsystemdependent.c