[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