summaryrefslogtreecommitdiffstats
path: root/sbc/sbc_primitives.h
diff options
context:
space:
mode:
authorSiarhei Siamashka <siarhei.siamashka@nokia.com>2009-01-29 02:17:36 +0200
committerMarcel Holtmann <marcel@holtmann.org>2009-01-29 08:25:50 +0100
commita563c8ed5a5d5004f4270dd8836f4257c1da2fe8 (patch)
tree520ed16c174f1cab6fc0749b267e5044b9a74e7d /sbc/sbc_primitives.h
parent85ad02b73626ee5caca6adb6e2890a7a588ecb38 (diff)
SBC encoder scale factors calculation optimized with __builtin_clz
Count leading zeros operation is often implemented using a special instruction for it on various architectures (at least this is true for ARM and x86). Using __builtin_clz gcc intrinsic allows to eliminate innermost loop in scale factors calculation and improve performance. Also scale factors calculation can be optimized even more using SIMD instructions.
Diffstat (limited to 'sbc/sbc_primitives.h')
-rw-r--r--sbc/sbc_primitives.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/sbc/sbc_primitives.h b/sbc/sbc_primitives.h
index 5b7c9acb..2708c829 100644
--- a/sbc/sbc_primitives.h
+++ b/sbc/sbc_primitives.h
@@ -58,6 +58,10 @@ struct sbc_encoder_state {
int (*sbc_enc_process_input_8s_be)(int position,
const uint8_t *pcm, int16_t X[2][SBC_X_BUFFER_SIZE],
int nsamples, int nchannels);
+ /* Scale factors calculation */
+ void (*sbc_calc_scalefactors)(int32_t sb_sample_f[16][2][8],
+ uint32_t scale_factor[2][8],
+ int blocks, int channels, int subbands);
};
/*