[x265] analysis: encodeResidue() directly write to reconPic

Steve Borho steve at borho.org
Fri Nov 14 18:50:47 CET 2014


On 11/14, Satoshi Nakagawa wrote:
> # HG changeset patch
> # User Satoshi Nakagawa <nakagawa424 at oki.com>
> # Date 1415954107 -32400
> #      Fri Nov 14 17:35:07 2014 +0900
> # Node ID 5734fa1a54c35a7ee84490b8120898bdc6724255
> # Parent  64314f8061f1742c3c1278b455b15554c174b7b8
> analysis: encodeResidue() directly write to reconPic

queued, thanks

> diff -r 64314f8061f1 -r 5734fa1a54c3 source/encoder/analysis.cpp
> --- a/source/encoder/analysis.cpp	Thu Nov 13 18:40:35 2014 +0900
> +++ b/source/encoder/analysis.cpp	Fri Nov 14 17:35:07 2014 +0900
> @@ -1671,7 +1671,6 @@
>  
>      /* reuse the bestMode data structures at the current depth */
>      Mode *bestMode = m_modeDepth[cuGeom.depth].bestMode;
> -    Yuv& reconYuv = bestMode->reconYuv;
>      CUData& cu = bestMode->cu;
>  
>      cu.copyFromPic(ctu, cuGeom);
> @@ -1687,7 +1686,7 @@
>          getBestIntraModeChroma(*bestMode, cuGeom);
>          residualQTIntraChroma(*bestMode, cuGeom, 0, 0);
>      }
> -    else if (cu.isInter(0))
> +    else // if (cu.isInter(0))
>      {
>          X265_CHECK(!ctu.isSkipped(absPartIdx), "skip not expected prior to transform\n");
>  
> @@ -1721,37 +1720,31 @@
>          if (cu.m_mergeFlag[0] && cu.m_partSize[0] == SIZE_2Nx2N && !cu.getQtRootCbf(0))
>              cu.setPredModeSubParts(MODE_SKIP);
>  
> -        PicYuv& reconPicYuv = *m_frame->m_reconPic;
> -        if (cu.getQtRootCbf(0)) // TODO: split to each component
> -        {
> -            /* residualTransformQuantInter() wrote transformed residual back into
> -             * resiYuv. Generate the recon pixels by adding it to the prediction */
> +        /* residualTransformQuantInter() wrote transformed residual back into
> +         * resiYuv. Generate the recon pixels by adding it to the prediction */
>  
> -            primitives.luma_add_ps[sizeIdx](reconYuv.m_buf[0], reconYuv.m_size,
> +        PicYuv& reconPic = *m_frame->m_reconPic;
> +        if (cu.m_cbf[0][0])
> +            primitives.luma_add_ps[sizeIdx](reconPic.getLumaAddr(cu.m_cuAddr, absPartIdx), reconPic.m_stride,
>                                              predY, resiYuv.m_buf[0], predYuv.m_size, resiYuv.m_size);
> -            primitives.chroma[m_csp].add_ps[sizeIdx](reconYuv.m_buf[1], reconYuv.m_csize,
> -                                            predU, resiYuv.m_buf[1], predYuv.m_csize, resiYuv.m_csize);
> -            primitives.chroma[m_csp].add_ps[sizeIdx](reconYuv.m_buf[2], reconYuv.m_csize,
> -                                            predV, resiYuv.m_buf[2], predYuv.m_csize, resiYuv.m_csize);
> +        else
> +            primitives.luma_copy_pp[sizeIdx](reconPic.getLumaAddr(cu.m_cuAddr, absPartIdx), reconPic.m_stride,
> +                                             predY, predYuv.m_size);
>  
> -            /* copy the reconstructed part to the recon pic for later intra
> -             * predictions */
> -            reconYuv.copyToPicYuv(*m_frame->m_reconPic, cu.m_cuAddr, absPartIdx);
> -        }
> +        if (cu.m_cbf[1][0])
> +            primitives.chroma[m_csp].add_ps[sizeIdx](reconPic.getCbAddr(cu.m_cuAddr, absPartIdx), reconPic.m_strideC,
> +                                                     predU, resiYuv.m_buf[1], predYuv.m_csize, resiYuv.m_csize);
>          else
> -        {
> -            /* copy the prediction pixels to the recon pic for later intra
> -             * predictions */
> +            primitives.chroma[m_csp].copy_pp[sizeIdx](reconPic.getCbAddr(cu.m_cuAddr, absPartIdx), reconPic.m_strideC,
> +                                                      predU, predYuv.m_csize);
>  
> -            primitives.luma_copy_pp[sizeIdx](reconPicYuv.getLumaAddr(cu.m_cuAddr, absPartIdx), reconPicYuv.m_stride,
> -                                             predY, predYuv.m_size);
> -            primitives.chroma[m_csp].copy_pp[sizeIdx](reconPicYuv.getCbAddr(cu.m_cuAddr, absPartIdx), reconPicYuv.m_strideC,
> -                                                      predU, predYuv.m_csize);
> -            primitives.chroma[m_csp].copy_pp[sizeIdx](reconPicYuv.getCrAddr(cu.m_cuAddr, absPartIdx), reconPicYuv.m_strideC,
> +        if (cu.m_cbf[2][0])
> +            primitives.chroma[m_csp].add_ps[sizeIdx](reconPic.getCrAddr(cu.m_cuAddr, absPartIdx), reconPic.m_strideC,
> +                                                     predV, resiYuv.m_buf[2], predYuv.m_csize, resiYuv.m_csize);
> +        else
> +            primitives.chroma[m_csp].copy_pp[sizeIdx](reconPic.getCrAddr(cu.m_cuAddr, absPartIdx), reconPic.m_strideC,
>                                                        predV, predYuv.m_csize);
> -        }
>      }
> -    /* else if (cu.m_predMode[0] == MODE_NONE) {} */
>  
>      checkDQP(cu, cuGeom);
>      cu.updatePic(cuGeom.depth);
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel

-- 
Steve Borho


More information about the x265-devel mailing list