From: Brad Midgley <bmidgley@xmission.com>
To: BlueZ Mailing List <bluez-devel@lists.sourceforge.net>
Subject: [Bluez-devel] libsbc optimizing
Date: Wed, 18 May 2005 17:31:10 -0600 [thread overview]
Message-ID: <428BD03E.9000307@xmission.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 827 bytes --]
Hi,
I have been looking at the problem of libsbc performance on arm. My
first pass is on the decoder. I'm trying to cut down deeply nested fp
multiply/divide ops.
I originally planned regression tests in the build process for
performance/correctness but decided against them:
- performance may actually go down on x86 where I build when we reduce
fp usage
- the character of roundoff errors will change and the lossy stream
will probably look different even when it is still "correct"
Anyway, I will need to know the range of certain values in order to make
much progress. I tried hunting down how they are calculated but it gets
difficult very quickly.
Can I get help with the ranges for bits[ch][sb] in sbc_unpack_frame and
the state.* vectors if they're bounded?
How about this first little patch?
Brad
[-- Attachment #2: opt1.patch --]
[-- Type: text/plain, Size: 1884 bytes --]
Index: sbc/sbc.c
===================================================================
RCS file: /cvsroot/bluetooth-alsa/btsco/sbc/sbc.c,v
retrieving revision 1.33
diff -u -b -B -w -p -r1.33 sbc.c
--- sbc/sbc.c 17 May 2005 06:48:02 -0000 1.33
+++ sbc/sbc.c 18 May 2005 22:32:13 -0000
@@ -391,7 +391,6 @@ static int sbc_unpack_frame(const u_int8
int bits[2][8]; /* bits distribution */
int levels[2][8]; /* levels derived from that */
- double scalefactor[2][8]; /* derived from frame->scale_factors */
if (len < 4)
return -1;
@@ -525,7 +524,6 @@ static int sbc_unpack_frame(const u_int8
for (ch = 0; ch < frame->channels; ch++) {
for (sb = 0; sb < frame->subbands; sb++) {
levels[ch][sb] = (1 << bits[ch][sb]) - 1;
- scalefactor[ch][sb] = 2 << frame->scale_factor[ch][sb];
}
}
@@ -534,8 +532,8 @@ static int sbc_unpack_frame(const u_int8
for (sb = 0; sb < frame->subbands; sb++) {
if (levels[ch][sb] > 0) {
frame->sb_sample[blk][ch][sb] =
- scalefactor[ch][sb] * ((frame->audio_sample[blk][ch][sb] * 2.0 + 1.0) /
- levels[ch][sb] - 1.0);
+ (((frame->audio_sample[blk][ch][sb] << 1) | 1) << frame->scale_factor[ch][sb])/(float)levels[ch][sb]
+ - (1 << frame->scale_factor[ch][sb]);
} else {
frame->sb_sample[blk][ch][sb] = 0;
}
@@ -547,10 +545,11 @@ static int sbc_unpack_frame(const u_int8
for (blk = 0; blk < frame->blocks; blk++) {
for (sb = 0; sb < frame->subbands; sb++) {
if (frame->join & (0x01 << sb)) {
- frame->sb_sample[blk][0][sb] =
+ double temp =
frame->sb_sample[blk][0][sb] + frame->sb_sample[blk][1][sb];
frame->sb_sample[blk][1][sb] =
- frame->sb_sample[blk][0][sb] - 2 * frame->sb_sample[blk][1][sb];
+ frame->sb_sample[blk][0][sb] - frame->sb_sample[blk][1][sb];
+ frame->sb_sample[blk][0][sb] = temp;
}
}
}
next reply other threads:[~2005-05-18 23:31 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-05-18 23:31 Brad Midgley [this message]
2005-05-20 22:04 ` [Bluez-devel] libsbc optimizing Henryk Plötz
2005-05-21 0:14 ` Brad Midgley
2005-05-21 0:28 ` Brad Midgley
2005-05-24 16:55 ` Brad Midgley
2005-05-24 17:10 ` Marcel Holtmann
2005-05-24 17:59 ` Brad Midgley
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=428BD03E.9000307@xmission.com \
--to=bmidgley@xmission.com \
--cc=bluez-devel@lists.sourceforge.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox