diff options
Diffstat (limited to 'vp8/decoder/arm')
-rw-r--r-- | vp8/decoder/arm/arm_dsystemdependent.c | 66 | ||||
-rw-r--r-- | vp8/decoder/arm/dequantize_arm.h | 4 | ||||
-rw-r--r-- | vp8/decoder/arm/dsystemdependent.c | 39 |
3 files changed, 70 insertions, 39 deletions
diff --git a/vp8/decoder/arm/arm_dsystemdependent.c b/vp8/decoder/arm/arm_dsystemdependent.c new file mode 100644 index 000000000..77cff47db --- /dev/null +++ b/vp8/decoder/arm/arm_dsystemdependent.c @@ -0,0 +1,66 @@ +/* + * 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_ports/config.h" +#include "vpx_ports/arm.h" +#include "blockd.h" +#include "pragmas.h" +#include "postproc.h" +#include "dboolhuff.h" +#include "dequantize.h" +#include "onyxd_int.h" + +void vp8_arch_arm_decode_init(VP8D_COMP *pbi) +{ +#if CONFIG_RUNTIME_CPU_DETECT + int flags = pbi->common.rtcd.flags; + int has_edsp = flags & HAS_EDSP; + int has_media = flags & HAS_MEDIA; + int has_neon = flags & HAS_NEON; + +#if HAVE_ARMV6 + if (has_media) + { + pbi->dequant.block = vp8_dequantize_b_v6; + pbi->dequant.idct_add = vp8_dequant_idct_add_v6; + pbi->dequant.dc_idct_add = vp8_dequant_dc_idct_add_v6; + pbi->dequant.dc_idct_add_y_block = vp8_dequant_dc_idct_add_y_block_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; +#if 0 //For use with RTCD, when implemented + pbi->dboolhuff.start = vp8dx_start_decode_c; + pbi->dboolhuff.fill = vp8dx_bool_decoder_fill_c; + pbi->dboolhuff.debool = vp8dx_decode_bool_c; + pbi->dboolhuff.devalue = vp8dx_decode_value_c; +#endif + } +#endif + +#if HAVE_ARMV7 + if (has_neon) + { + pbi->dequant.block = vp8_dequantize_b_neon; + pbi->dequant.idct_add = vp8_dequant_idct_add_neon; + /*This is not used: NEON always dequants two blocks at once. + pbi->dequant.dc_idct_add = vp8_dequant_dc_idct_add_neon;*/ + pbi->dequant.dc_idct_add_y_block = vp8_dequant_dc_idct_add_y_block_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; +#if 0 //For use with RTCD, when implemented + pbi->dboolhuff.start = vp8dx_start_decode_c; + pbi->dboolhuff.fill = vp8dx_bool_decoder_fill_c; + pbi->dboolhuff.debool = vp8dx_decode_bool_c; + pbi->dboolhuff.devalue = vp8dx_decode_value_c; +#endif + } +#endif +#endif +} diff --git a/vp8/decoder/arm/dequantize_arm.h b/vp8/decoder/arm/dequantize_arm.h index 40151e01a..b7d800d26 100644 --- a/vp8/decoder/arm/dequantize_arm.h +++ b/vp8/decoder/arm/dequantize_arm.h @@ -20,6 +20,7 @@ extern prototype_dequant_dc_idct_add_y_block(vp8_dequant_dc_idct_add_y_block_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 @@ -38,6 +39,7 @@ extern prototype_dequant_idct_add_uv_block(vp8_dequant_idct_add_uv_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_ARMV7 extern prototype_dequant_block(vp8_dequantize_b_neon); @@ -47,6 +49,7 @@ extern prototype_dequant_dc_idct_add_y_block(vp8_dequant_dc_idct_add_y_block_neo 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 @@ -65,5 +68,6 @@ extern prototype_dequant_idct_add_uv_block(vp8_dequant_idct_add_uv_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 diff --git a/vp8/decoder/arm/dsystemdependent.c b/vp8/decoder/arm/dsystemdependent.c deleted file mode 100644 index 9dcf7b657..000000000 --- a/vp8/decoder/arm/dsystemdependent.c +++ /dev/null @@ -1,39 +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_ports/config.h" -#include "blockd.h" -#include "pragmas.h" -#include "postproc.h" -#include "dboolhuff.h" -#include "dequantize.h" -#include "onyxd_int.h" - -void vp8_dmachine_specific_config(VP8D_COMP *pbi) -{ -#if CONFIG_RUNTIME_CPU_DETECT - pbi->mb.rtcd = &pbi->common.rtcd; -#if HAVE_ARMV7 - pbi->dequant.block = vp8_dequantize_b_neon; - pbi->dboolhuff.start = vp8dx_start_decode_c; - pbi->dboolhuff.fill = vp8dx_bool_decoder_fill_c; - pbi->dboolhuff.debool = vp8dx_decode_bool_c; - pbi->dboolhuff.devalue = vp8dx_decode_value_c; - -#elif HAVE_ARMV6 - pbi->dequant.block = vp8_dequantize_b_v6; - pbi->dboolhuff.start = vp8dx_start_decode_c; - pbi->dboolhuff.fill = vp8dx_bool_decoder_fill_c; - pbi->dboolhuff.debool = vp8dx_decode_bool_c; - pbi->dboolhuff.devalue = vp8dx_decode_value_c; -#endif -#endif -} |