[FFmpeg-devel] [PATCH 02/12] lavfi/vf_colorchannelmixer: replace round by lrint

Ganesh Ajjanagadde gajjanagadde at gmail.com
Mon Dec 21 17:36:23 CET 2015


On Sun, Dec 20, 2015 at 9:34 AM, Ganesh Ajjanagadde
<gajjanagadde at gmail.com> wrote:
> On Fri, Dec 18, 2015 at 9:45 PM, Ganesh Ajjanagadde
> <gajjanagadde at gmail.com> wrote:
>> lrint is faster here on -ftree-vectorize with GCC. This is likely simply
>> an artifact of GCC's rather terrible auto-vectorizer, since as per the
>> instruction set manuals cvtsd2si and cvttsd2si (or their vector equivalents)
>> have identical cycle timings.
>>
>> Anyway, regardless of above, lrint is superior to round accuracy wise.
>>
>> Safety guaranteed as long int has at least 32 bits.
>>
>> Signed-off-by: Ganesh Ajjanagadde <gajjanagadde at gmail.com>
>> ---
>>  libavfilter/vf_colorchannelmixer.c | 38 +++++++++++++++++++-------------------
>>  1 file changed, 19 insertions(+), 19 deletions(-)
>>
>> diff --git a/libavfilter/vf_colorchannelmixer.c b/libavfilter/vf_colorchannelmixer.c
>> index 0fffd34..cda972d 100644
>> --- a/libavfilter/vf_colorchannelmixer.c
>> +++ b/libavfilter/vf_colorchannelmixer.c
>> @@ -115,25 +115,25 @@ static int config_output(AVFilterLink *outlink)
>>              s->lut[i][j] = buffer;
>>
>>      for (i = 0; i < size; i++) {
>> -        s->lut[R][R][i] = round(i * s->rr);
>> -        s->lut[R][G][i] = round(i * s->rg);
>> -        s->lut[R][B][i] = round(i * s->rb);
>> -        s->lut[R][A][i] = round(i * s->ra);
>> -
>> -        s->lut[G][R][i] = round(i * s->gr);
>> -        s->lut[G][G][i] = round(i * s->gg);
>> -        s->lut[G][B][i] = round(i * s->gb);
>> -        s->lut[G][A][i] = round(i * s->ga);
>> -
>> -        s->lut[B][R][i] = round(i * s->br);
>> -        s->lut[B][G][i] = round(i * s->bg);
>> -        s->lut[B][B][i] = round(i * s->bb);
>> -        s->lut[B][A][i] = round(i * s->ba);
>> -
>> -        s->lut[A][R][i] = round(i * s->ar);
>> -        s->lut[A][G][i] = round(i * s->ag);
>> -        s->lut[A][B][i] = round(i * s->ab);
>> -        s->lut[A][A][i] = round(i * s->aa);
>> +        s->lut[R][R][i] = lrint(i * s->rr);
>> +        s->lut[R][G][i] = lrint(i * s->rg);
>> +        s->lut[R][B][i] = lrint(i * s->rb);
>> +        s->lut[R][A][i] = lrint(i * s->ra);
>> +
>> +        s->lut[G][R][i] = lrint(i * s->gr);
>> +        s->lut[G][G][i] = lrint(i * s->gg);
>> +        s->lut[G][B][i] = lrint(i * s->gb);
>> +        s->lut[G][A][i] = lrint(i * s->ga);
>> +
>> +        s->lut[B][R][i] = lrint(i * s->br);
>> +        s->lut[B][G][i] = lrint(i * s->bg);
>> +        s->lut[B][B][i] = lrint(i * s->bb);
>> +        s->lut[B][A][i] = lrint(i * s->ba);
>> +
>> +        s->lut[A][R][i] = lrint(i * s->ar);
>> +        s->lut[A][G][i] = lrint(i * s->ag);
>> +        s->lut[A][B][i] = lrint(i * s->ab);
>> +        s->lut[A][A][i] = lrint(i * s->aa);
>>      }
>>
>>      return 0;
>> --
>> 2.6.4
>>
>
> All remaining round patches (including this one) going in 2 days time.
> This is a request for reviews.

pushed


More information about the ffmpeg-devel mailing list