[x265] fix chroma distortion for 4:2:2

Deepthi Nandakumar deepthi at multicorewareinc.com
Fri Dec 5 05:21:06 CET 2014


Thanks, good catch - pushed.

On Fri, Dec 5, 2014 at 9:43 AM, Satoshi Nakagawa <nakagawa424 at oki.com>
wrote:

> # HG changeset patch
> # User Satoshi Nakagawa <nakagawa424 at oki.com>
> # Date 1417752745 -32400
> #      Fri Dec 05 13:12:25 2014 +0900
> # Node ID 1c46b37e0d8051859ed2b5ab7f4c4ed0c72fc84e
> # Parent  c9fd35f97e6dc8711a8a84b19c7259237bf4a1b0
> fix chroma distortion for 4:2:2
>
> diff -r c9fd35f97e6d -r 1c46b37e0d80 source/encoder/analysis.cpp
> --- a/source/encoder/analysis.cpp       Thu Dec 04 21:35:08 2014 -0600
> +++ b/source/encoder/analysis.cpp       Fri Dec 05 13:12:25 2014 +0900
> @@ -1261,8 +1261,8 @@
>          tempPred->distortion =
> primitives.sa8d[sizeIdx](fencYuv->m_buf[0], fencYuv->m_size,
> tempPred->predYuv.m_buf[0], tempPred->predYuv.m_size);
>          if (m_bChromaSa8d)
>          {
> -            tempPred->distortion +=
> primitives.sa8d[cpart](fencYuv->m_buf[1], fencYuv->m_csize,
> tempPred->predYuv.m_buf[1], tempPred->predYuv.m_csize);
> -            tempPred->distortion +=
> primitives.sa8d[cpart](fencYuv->m_buf[2], fencYuv->m_csize,
> tempPred->predYuv.m_buf[2], tempPred->predYuv.m_csize);
> +            tempPred->distortion +=
> primitives.sa8d_inter[cpart](fencYuv->m_buf[1], fencYuv->m_csize,
> tempPred->predYuv.m_buf[1], tempPred->predYuv.m_csize);
> +            tempPred->distortion +=
> primitives.sa8d_inter[cpart](fencYuv->m_buf[2], fencYuv->m_csize,
> tempPred->predYuv.m_buf[2], tempPred->predYuv.m_csize);
>          }
>          tempPred->sa8dCost = m_rdCost.calcRdSADCost(tempPred->distortion,
> tempPred->sa8dBits);
>
> @@ -1458,8 +1458,8 @@
>          {
>              uint32_t cuSize = 1 << cuGeom.log2CUSize;
>              int cpart = partitionFromSizes(cuSize >> m_hChromaShift,
> cuSize >> m_vChromaShift);
> -            interMode.distortion +=
> primitives.sa8d[cpart](fencYuv.m_buf[1], fencYuv.m_csize, predYuv.m_buf[1],
> predYuv.m_csize);
> -            interMode.distortion +=
> primitives.sa8d[cpart](fencYuv.m_buf[2], fencYuv.m_csize, predYuv.m_buf[2],
> predYuv.m_csize);
> +            interMode.distortion +=
> primitives.sa8d_inter[cpart](fencYuv.m_buf[1], fencYuv.m_csize,
> predYuv.m_buf[1], predYuv.m_csize);
> +            interMode.distortion +=
> primitives.sa8d_inter[cpart](fencYuv.m_buf[2], fencYuv.m_csize,
> predYuv.m_buf[2], predYuv.m_csize);
>          }
>          interMode.sa8dCost = m_rdCost.calcRdSADCost(interMode.distortion,
> interMode.sa8dBits);
>
> @@ -1582,8 +1582,8 @@
>      if (m_bChromaSa8d)
>      {
>          /* Add in chroma distortion */
> -        sa8d += primitives.sa8d[cpart](fencYuv.m_buf[1], fencYuv.m_csize,
> bidir2Nx2N.predYuv.m_buf[1], bidir2Nx2N.predYuv.m_csize);
> -        sa8d += primitives.sa8d[cpart](fencYuv.m_buf[2], fencYuv.m_csize,
> bidir2Nx2N.predYuv.m_buf[2], bidir2Nx2N.predYuv.m_csize);
> +        sa8d += primitives.sa8d_inter[cpart](fencYuv.m_buf[1],
> fencYuv.m_csize, bidir2Nx2N.predYuv.m_buf[1], bidir2Nx2N.predYuv.m_csize);
> +        sa8d += primitives.sa8d_inter[cpart](fencYuv.m_buf[2],
> fencYuv.m_csize, bidir2Nx2N.predYuv.m_buf[2], bidir2Nx2N.predYuv.m_csize);
>      }
>      bidir2Nx2N.sa8dBits = bestME[0].bits + bestME[1].bits +
> m_listSelBits[2] - (m_listSelBits[0] + m_listSelBits[1]);
>      bidir2Nx2N.sa8dCost = sa8d + m_rdCost.getCost(bidir2Nx2N.sa8dBits);
> @@ -1616,8 +1616,8 @@
>          if (m_bChromaSa8d)
>          {
>              /* Add in chroma distortion */
> -            zsa8d += primitives.sa8d[cpart](fencYuv.m_buf[1],
> fencYuv.m_csize, tmpPredYuv.m_buf[1], tmpPredYuv.m_csize);
> -            zsa8d += primitives.sa8d[cpart](fencYuv.m_buf[2],
> fencYuv.m_csize, tmpPredYuv.m_buf[2], tmpPredYuv.m_csize);
> +            zsa8d += primitives.sa8d_inter[cpart](fencYuv.m_buf[1],
> fencYuv.m_csize, tmpPredYuv.m_buf[1], tmpPredYuv.m_csize);
> +            zsa8d += primitives.sa8d_inter[cpart](fencYuv.m_buf[2],
> fencYuv.m_csize, tmpPredYuv.m_buf[2], tmpPredYuv.m_csize);
>          }
>          uint32_t bits0 = bestME[0].bits - m_me.bitcost(bestME[0].mv,
> mvp0) + m_me.bitcost(mvzero, mvp0);
>          uint32_t bits1 = bestME[1].bits - m_me.bitcost(bestME[1].mv,
> mvp1) + m_me.bitcost(mvzero, mvp1);
> _______________________________________________
> 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/20141205/141deb3b/attachment.html>


More information about the x265-devel mailing list