Mercurial > libavcodec.hg
changeset 11451:01559518729e libavcodec
SIMD optimization using float_to_int16_interleave.
Patch by Zhou Zongyi, zhouzy A os D pku D edu D cn
author | cehoyos |
---|---|
date | Tue, 09 Mar 2010 23:35:57 +0000 |
parents | 95123a24a580 |
children | d5673aafc6bf |
files | wmadec.c |
diffstat | 1 files changed, 11 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/wmadec.c Tue Mar 09 21:50:10 2010 +0000 +++ b/wmadec.c Tue Mar 09 23:35:57 2010 +0000 @@ -790,6 +790,7 @@ /* convert frame to integer */ n = s->frame_len; incr = s->nb_channels; + if (s->dsp.float_to_int16_interleave == ff_float_to_int16_interleave_c) { for(ch = 0; ch < s->nb_channels; ch++) { ptr = samples + ch; iptr = s->frame_out[ch]; @@ -802,6 +803,16 @@ memmove(&s->frame_out[ch][0], &s->frame_out[ch][s->frame_len], s->frame_len * sizeof(float)); } + } else { + float *output[MAX_CHANNELS]; + for (ch = 0; ch < MAX_CHANNELS; ch++) + output[ch] = s->frame_out[ch]; + s->dsp.float_to_int16_interleave(samples, (const float **)output, n, incr); + for(ch = 0; ch < incr; ch++) { + /* prepare for next block */ + memmove(&s->frame_out[ch][0], &s->frame_out[ch][n], n * sizeof(float)); + } + } #ifdef TRACE dump_shorts(s, "samples", samples, n * s->nb_channels);