[FFmpeg-devel] [PATCH] wmadec.c: SIMD optimization using float_to_int16_interleave
Måns Rullgård
mans
Tue Mar 9 19:48:21 CET 2010
Michael Niedermayer <michaelni at gmx.at> writes:
> On Wed, Mar 10, 2010 at 12:45:03AM +0800, Zhou Zongyi wrote:
>> > cosmetics
>> OK. I removed indent.
>>
>> > looks odd
>> It seems my mail client is broken. Fixed.
>>
>> Updated patch:
>>
>> Index: libavcodec/wmadec.c
>> ===================================================================
>> --- libavcodec/wmadec.c (revision 22281)
>> +++ libavcodec/wmadec.c (working copy)
>> @@ -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));
>> + }
>> + }
>
> why is this code not also used for the ff_float_to_int16_interleave_c case?
The C code requires a different bias and scale. You should know that.
--
M?ns Rullg?rd
mans at mansr.com
More information about the ffmpeg-devel
mailing list