diff options
author | Siarhei Siamashka <siarhei.siamashka@nokia.com> | 2009-01-29 02:17:36 +0200 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2009-01-29 08:25:50 +0100 |
commit | a563c8ed5a5d5004f4270dd8836f4257c1da2fe8 (patch) | |
tree | 520ed16c174f1cab6fc0749b267e5044b9a74e7d /sbc/sbc_primitives.h | |
parent | 85ad02b73626ee5caca6adb6e2890a7a588ecb38 (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.h | 4 |
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); }; /* |