On Wed, Jul 2, 2014 at 7:08 AM,  <kavi...@multicorewareinc.com> wrote:
> # HG changeset patch
> # User Kavitha Sampath <kavi...@multicorewareinc.com>
> # Date 1404297383 -19800
> #      Wed Jul 02 16:06:23 2014 +0530
> # Node ID 731068beca7e5e1403c39c5ede610101b3e6e69f
> # Parent  a18972fd05b1d6242a881bef979b9e1ff17543d9
> frame: initialize recon to avoid SAO read of uninitialized pixels beyond 
> picture end
>
> diff -r a18972fd05b1 -r 731068beca7e source/common/frame.cpp
> --- a/source/common/frame.cpp   Tue Jul 01 14:58:35 2014 -0500
> +++ b/source/common/frame.cpp   Wed Jul 02 16:06:23 2014 +0530
> @@ -106,14 +106,24 @@
>  {
>      m_picSym = new TComPicSym;
>      m_reconPicYuv = new TComPicYuv;
> +    bool picCreate = false, reconCreate = false;

I don't like this style of declaring variables up here and giving them
initial values, and then unconditionally re-assigning them later.  It
adds needless work to the function, and doesn't make it any easier to
read.

>      if (m_picSym && m_reconPicYuv)
>      {
>          m_picSym->m_reconPicYuv = m_reconPicYuv;
> -        return m_picSym->create(param) &&
> -          m_reconPicYuv->create(param->sourceWidth, param->sourceHeight, 
> param->internalCsp, g_maxCUSize, g_maxCUDepth);
> +        picCreate = m_picSym->create(param);
> +        reconCreate = m_reconPicYuv->create(param->sourceWidth, 
> param->sourceHeight,
> +                                            param->internalCsp, g_maxCUSize, 
> g_maxCUDepth);
> +

if reconCreate was false, there is no point in doing any memsets

> +        // initialize m_reconpicYuv as SAO may read beyond the end of the 
> picture accessing uninitialized pixels
> +        int maxHeight = m_reconPicYuv->m_numCuInHeight * g_maxCUSize;
> +        memset(m_reconPicYuv->m_picBuf[0], 0, m_reconPicYuv->m_stride * 
> (maxHeight +
> +               (m_reconPicYuv->m_lumaMarginY * 2)));
> +        memset(m_reconPicYuv->m_picBuf[1], 0, m_reconPicYuv->m_strideC * 
> ((maxHeight >>
> +               m_reconPicYuv->m_vChromaShift) + 
> (m_reconPicYuv->m_chromaMarginY * 2)));
> +        memset(m_reconPicYuv->m_picBuf[2], 0, m_reconPicYuv->m_strideC * 
> ((maxHeight >>
> +               m_reconPicYuv->m_vChromaShift) + 
> (m_reconPicYuv->m_chromaMarginY * 2)));
>      }
> -    else
> -        return false;
> +    return picCreate && reconCreate;
>  }
>
>  void Frame::reinit(x265_param *param)
> _______________________________________________
> x265-devel mailing list
> x265-devel@videolan.org
> https://mailman.videolan.org/listinfo/x265-devel



-- 
Steve Borho
_______________________________________________
x265-devel mailing list
x265-devel@videolan.org
https://mailman.videolan.org/listinfo/x265-devel

Reply via email to