Re: [PATCH v4 09/12] [media] vivid: Local optimization

From: Philipp Zabel
Date: Mon Jul 18 2016 - 09:13:52 EST


Hi Ricardo,

Am Montag, den 18.07.2016, 14:42 +0200 schrieb Ricardo Ribalda Delgado:
> Avoid duplicated data shifts when possible.
>
> Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@xxxxxxxxx>
> ---
> drivers/media/common/v4l2-tpg/v4l2-tpg-core.c | 13 +++++++------
> 1 file changed, 7 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c b/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
> index a26172575e56..7f284c591f25 100644
> --- a/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
> +++ b/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
> @@ -919,13 +919,14 @@ static void precalculate_color(struct tpg_data *tpg, int k)
> color_to_ycbcr(tpg, r, g, b, &y, &cb, &cr);
>
> if (tpg->real_quantization == V4L2_QUANTIZATION_LIM_RANGE) {
> - y = clamp(y, 16 << 4, 235 << 4);
> - cb = clamp(cb, 16 << 4, 240 << 4);
> - cr = clamp(cr, 16 << 4, 240 << 4);
> + y = clamp(y >> 4, 16, 235);
> + cb = clamp(cb >> 4, 16, 240);
> + cr = clamp(cr >> 4, 16, 240);

Since the constant expressions are evaluated at compile time, you are
not actually removing shifts. The code generated for precalculate_color
by gcc 5.4 even grows by one asr instruction with this patch.

> + } else {
> + y = clamp(y >> 4, 1, 254);
> + cb = clamp(cb >> 4, 1, 254);
> + cr = clamp(cr >> 4, 1, 254);
> }
> - y = clamp(y >> 4, 1, 254);
> - cb = clamp(cb >> 4, 1, 254);
> - cr = clamp(cr >> 4, 1, 254);
> switch (tpg->fourcc) {
> case V4L2_PIX_FMT_YUV444:
> y >>= 4;

regards
Philipp