[x265] fix invalid copy source context in rdLevel==0

Steve Borho steve at borho.org
Wed Oct 8 19:52:02 CEST 2014


On 10/08, Satoshi Nakagawa wrote:
> # HG changeset patch
> # User Satoshi Nakagawa <nakagawa424 at oki.com>
> # Date 1412754238 -32400
> #      Wed Oct 08 16:43:58 2014 +0900
> # Node ID 84c960cf1552f3f317690fa1d35f6536bf4b36b4
> # Parent  46c4b98d92ece7ff25d790b0fc69a8185d575524
> fix invalid copy source context in rdLevel==0

I have a huge rewrite of analysis.cpp that is in the final stages of
debugging, and it includes this particular fix and the fix in Gopu's
patch as well. So I think I'll sit on both of these for the moment.

> diff -r 46c4b98d92ec -r 84c960cf1552 source/encoder/analysis.cpp
> --- a/source/encoder/analysis.cpp	Mon Oct 06 22:07:54 2014 -0500
> +++ b/source/encoder/analysis.cpp	Wed Oct 08 16:43:58 2014 +0900
> @@ -1275,6 +1275,8 @@
>  
>          uint32_t nextDepth = depth + 1;
>          invalidateContexts(nextDepth);
> +        // initialize RD with previous depth buffer
> +        m_rdContexts[nextDepth].cur.load(m_rdContexts[depth].cur);
>          TComDataCU* subTempPartCU = m_tempCU[nextDepth];
>          for (uint32_t partUnitIdx = 0; partUnitIdx < 4; partUnitIdx++)
>          {
> @@ -1285,10 +1287,8 @@
>  
>              if (child_cu->flags & CU::PRESENT)
>              {
> -                if (partUnitIdx) // initialize RD with previous depth buffer
> +                if (partUnitIdx && m_param->rdLevel)
>                      m_rdContexts[nextDepth].cur.load(m_rdContexts[nextDepth].next);
> -                else
> -                    m_rdContexts[nextDepth].cur.load(m_rdContexts[depth].cur);
>  
>                  compressInterCU_rd0_4(subBestPartCU, subTempPartCU, outTempCU, nextDepth, child_cu, cu_unsplit_flag, partUnitIdx, minDepth);
>  
> @@ -1372,7 +1372,8 @@
>                  std::swap(m_bestRecoYuv[depth], m_tmpRecoYuv[depth]);
>                  std::swap(m_bestPredYuv[depth], m_tmpPredYuv[depth]);
>                  // copy 'next' state from last CU of next depth as next state of this CU
> -                m_rdContexts[nextDepth].next.store(m_rdContexts[depth].next);
> +                if (m_param->rdLevel)
> +                    m_rdContexts[nextDepth].next.store(m_rdContexts[depth].next);
>              }
>          }
>          else
> @@ -1381,7 +1382,8 @@
>              std::swap(m_bestRecoYuv[depth], m_tmpRecoYuv[depth]);
>              std::swap(m_bestPredYuv[depth], m_tmpPredYuv[depth]);
>              // copy 'next' state from last CU of next depth as next state of this CU
> -            m_rdContexts[nextDepth].next.store(m_rdContexts[depth].next);
> +            if (m_param->rdLevel)
> +                m_rdContexts[nextDepth].next.store(m_rdContexts[depth].next);
>          }
>      }
>  
> _______________________________________________
> 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