[x265] [PATCH 3 of 3] improve Diamon Search by reduce duplicate SAD [OUTPUT CHANGED]

Deepthi Nandakumar deepthi at multicorewareinc.com
Mon Jun 29 07:27:14 CEST 2015


Bitrate inflation is pretty drastic....

On Sat, Jun 27, 2015 at 7:43 AM, Min Chen <chenm003 at 163.com> wrote:

> # HG changeset patch
> # User Min Chen <chenm003 at 163.com>
> # Date 1435370058 25200
> # Node ID fb038742dabd93a1993562c093839e5362ad3d46
> # Parent  a8198965fbf18d7ced2cd8e8acd07fcc4ee6a2b3
> improve Diamon Search by reduce duplicate SAD [OUTPUT CHANGED]
> Side effect by modify DIA ME template:
>   0           0
> 2   3  -->  3   1
>   1           2
> ---
>  source/encoder/motion.cpp |   41 +++++++++++++++++++++++++++++++++++++++++
>  1 files changed, 41 insertions(+), 0 deletions(-)
>
> diff -r a8198965fbf1 -r fb038742dabd source/encoder/motion.cpp
> --- a/source/encoder/motion.cpp Fri Jun 26 18:54:15 2015 -0700
> +++ b/source/encoder/motion.cpp Fri Jun 26 18:54:18 2015 -0700
> @@ -2,6 +2,7 @@
>   * Copyright (C) 2013 x265 project
>   *
>   * Authors: Steve Borho <steve at borho.org>
> + *          Min Chen <chenm003 at 163.com>
>   *
>   * This program is free software; you can redistribute it and/or modify
>   * it under the terms of the GNU General Public License as published by
> @@ -59,6 +60,8 @@
>  int sizeScale[NUM_PU_SIZES];
>  #define SAD_THRESH(v) (bcost < (((v >> 4) * sizeScale[partEnum])))
>
> +const MV dia2[6] = { MV(1, 0), MV(0, -1), MV(-1, 0), MV(0, 1), MV(1, 0),
> MV(0, -1) };
> +
>  /* radius 2 hexagon. repeated entries are to avoid having to compute mod6
> every time. */
>  const MV hex2[8] = { MV(-1, -2), MV(-2, 0), MV(-1, 2), MV(1, 2), MV(2,
> 0), MV(1, -2), MV(-1, -2), MV(-2, 0) };
>  const uint8_t mod6m1[8] = { 5, 0, 1, 2, 3, 4, 5, 0 };  /* (x-1)%6 */
> @@ -681,6 +684,7 @@
>      case X265_DIA_SEARCH:
>      {
>          /* diamond search, radius 1 */
> +#if 0
>          bcost <<= 4;
>          int i = merange;
>          do
> @@ -699,6 +703,43 @@
>          while (--i && bmv.checkRange(mvmin, mvmax));
>          bcost >>= 4;
>          break;
> +
> +#else // if 0
> +
> +        /* approach equivalent to the above, but eliminates duplicate
> candidates */
> +        bcost <<= 3;
> +        COST_MV_X4_DIR(0, -1, 0, 1, -1, 0, 1, 0, costs);
> +        COPY1_IF_LT(bcost, (costs[0] << 3) + 2);
> +        COPY1_IF_LT(bcost, (costs[1] << 3) + 3);
> +        COPY1_IF_LT(bcost, (costs[2] << 3) + 4);
> +        COPY1_IF_LT(bcost, (costs[3] << 3) + 5);
> +
> +        if (bcost & 7)
> +        {
> +            int dir = (bcost & 7) - 2;
> +            bmv += dia2[dir + 1];
> +
> +            for (int i = merange - 1; i > 0 && bmv.checkRange(mvmin,
> mvmax); i--)
> +            {
> +                COST_MV_X3_DIR(dia2[dir + 0].x, dia2[dir + 0].y,
> +                               dia2[dir + 1].x, dia2[dir + 1].y,
> +                               dia2[dir + 2].x, dia2[dir + 2].y,
> +                               costs);
> +                bcost &= ~7;
> +                COPY1_IF_LT(bcost, (costs[0] << 3) + 1);
> +                COPY1_IF_LT(bcost, (costs[1] << 3) + 2);
> +                COPY1_IF_LT(bcost, (costs[2] << 3) + 3);
> +                if (!(bcost & 7))
> +                    break;
> +                dir += (bcost & 7) - 1;
> +                X265_CHECK(dir >= 0 && dir <= 5, "dir check failure\n");
> +                dir = (3 & (dir + 3));  // (dir-1)%4
> +                bmv += dia2[dir];
> +            }
> +        }
> +        bcost >>= 3;
> +        break;
> +#endif // if 0
>      }
>
>      case X265_HEX_SEARCH:
>
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20150629/d5d507c6/attachment-0001.html>


More information about the x265-devel mailing list