[FFmpeg-devel] [PATCH 02/12] lavfi/vf_colorchannelmixer: replace round by lrint
Ganesh Ajjanagadde
gajjanagadde at gmail.com
Sun Dec 20 18:34:29 CET 2015
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.
More information about the ffmpeg-devel
mailing list