[beast/devel: 18/28] FLAC: optimize datahandle performance by improving flac_write_callback
- From: Tim Janik <timj src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [beast/devel: 18/28] FLAC: optimize datahandle performance by improving flac_write_callback
- Date: Sat, 4 May 2013 03:53:44 +0000 (UTC)
commit 21853ee8b9229e4da82cc8016e8a2afe97e85281
Author: Stefan Westerfeld <stefan space twc de>
Date: Sat Mar 23 15:38:56 2013 +0100
FLAC: optimize datahandle performance by improving flac_write_callback
bse/bsedatahandle-flac.cc | 18 +++++++++++-------
1 files changed, 11 insertions(+), 7 deletions(-)
---
diff --git a/bse/bsedatahandle-flac.cc b/bse/bsedatahandle-flac.cc
index f9c4949..1a2d8b9 100644
--- a/bse/bsedatahandle-flac.cc
+++ b/bse/bsedatahandle-flac.cc
@@ -112,16 +112,20 @@ private:
void *client_data)
{
DataHandleFlac *dh = static_cast<DataHandleFlac *> (client_data);
- dh->m_buffer_start = frame->header.number.sample_number * frame->header.channels;
- dh->m_buffer.clear();
+ const int channels = frame->header.channels;
+ dh->m_buffer_start = frame->header.number.sample_number * channels;
+ dh->m_buffer.resize (frame->header.blocksize * channels);
- // scale with 1/32768 for 16 bit, 1/(2^23) for 24 bit
+ // scale with 1/32768 for 16 bit, 1/(2^23) for 24 bit; interleave channels
double scale = 2.0 / (1 << frame->header.bits_per_sample);
- for (int i = 0; i < frame->header.blocksize; i++)
+ for (int ch = 0; ch < channels; ch++)
{
- // interleave channels
- for (int ch = 0; ch < frame->header.channels; ch++)
- dh->m_buffer.push_back (buffer[ch][i] * scale);
+ int x = ch;
+ for (size_t i = 0; i < frame->header.blocksize; i++)
+ {
+ dh->m_buffer[x] = buffer[ch][i] * scale;
+ x += channels;
+ }
}
return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]