Ticket #278: patch_nsqt_deblocking_fixed.patch

File patch_nsqt_deblocking_fixed.patch, 38.7 KB (added by xzheng, 12 years ago)
  • Lib/TLibCommon/TComDataCU.cpp

     
    6565  m_puhChromaIntraDir  = NULL;
    6666  m_puhInterDir        = NULL;
    6767  m_puhTrIdx           = NULL;
     68#if NSQT_MOD2
     69  m_puhNSQTPartIdx     = NULL;
     70#endif
    6871  m_puhCbf[0]          = NULL;
    6972  m_puhCbf[1]          = NULL;
    7073  m_puhCbf[2]          = NULL;
     
    128131    m_puhInterDir        = (UChar* )xMalloc(UChar,  uiNumPartition);
    129132   
    130133    m_puhTrIdx           = (UChar* )xMalloc(UChar,  uiNumPartition);
     134#if NSQT_MOD2
     135    m_puhNSQTPartIdx     = (UChar* )xMalloc(UChar,  uiNumPartition);
     136#endif
    131137   
    132138    m_puhCbf[0]          = (UChar* )xMalloc(UChar,  uiNumPartition);
    133139    m_puhCbf[1]          = (UChar* )xMalloc(UChar,  uiNumPartition);
     
    205211    if ( m_puhLumaIntraDir    ) { xFree(m_puhLumaIntraDir);     m_puhLumaIntraDir   = NULL; }
    206212    if ( m_puhChromaIntraDir  ) { xFree(m_puhChromaIntraDir);   m_puhChromaIntraDir = NULL; }
    207213    if ( m_puhTrIdx           ) { xFree(m_puhTrIdx);            m_puhTrIdx          = NULL; }
     214#if NSQT_MOD2
     215    if ( m_puhNSQTPartIdx     ) { xFree(m_puhNSQTPartIdx);      m_puhNSQTPartIdx    = NULL; }
     216#endif
    208217    if ( m_pcTrCoeffY         ) { xFree(m_pcTrCoeffY);          m_pcTrCoeffY        = NULL; }
    209218    if ( m_pcTrCoeffCb        ) { xFree(m_pcTrCoeffCb);         m_pcTrCoeffCb       = NULL; }
    210219    if ( m_pcTrCoeffCr        ) { xFree(m_pcTrCoeffCr);         m_pcTrCoeffCr       = NULL; }
     
    289298  memset( m_puhChromaIntraDir,  0, iSizeInUchar );
    290299  memset( m_puhInterDir,        0, iSizeInUchar );
    291300  memset( m_puhTrIdx,           0, iSizeInUchar );
     301#if NSQT_MOD2
     302  memset( m_puhNSQTPartIdx ,    0, iSizeInUchar );
     303#endif
    292304  memset( m_puhCbf[0],          0, iSizeInUchar );
    293305  memset( m_puhCbf[1],          0, iSizeInUchar );
    294306  memset( m_puhCbf[2],          0, iSizeInUchar );
     
    423435    m_puhWidth  [ui] = pcFrom->getWidth(ui);
    424436    m_puhHeight [ui] = pcFrom->getHeight(ui);
    425437    m_puhTrIdx  [ui] = pcFrom->getTransformIdx(ui);
     438#if NSQT_MOD2
     439    m_puhNSQTPartIdx[ui] = pcFrom->getNSQTPartIdx(ui);
     440#endif
    426441    m_apiMVPIdx[0][ui] = pcFrom->m_apiMVPIdx[0][ui];;
    427442    m_apiMVPIdx[1][ui] = pcFrom->m_apiMVPIdx[1][ui];
    428443    m_apiMVPNum[0][ui] = pcFrom->m_apiMVPNum[0][ui];
     
    449464    memset( m_pePredMode        + firstElement, MODE_NONE,                numElements * sizeof( *m_pePredMode ) );
    450465    memset( m_puhDepth          + firstElement, 0,                        numElements * sizeof( *m_puhDepth ) );
    451466    memset( m_puhTrIdx          + firstElement, 0,                        numElements * sizeof( *m_puhTrIdx ) );
     467#if NSQT_MOD2
     468    memset( m_puhNSQTPartIdx    + firstElement, 0,                        numElements * sizeof( *m_puhNSQTPartIdx) );
     469#endif
    452470    memset( m_puhWidth          + firstElement, g_uiMaxCUWidth,           numElements * sizeof( *m_puhWidth ) );
    453471    memset( m_puhHeight         + firstElement, g_uiMaxCUHeight,          numElements * sizeof( *m_puhHeight ) );
    454472    memset( m_apiMVPIdx[0]      + firstElement, -1,                       numElements * sizeof( *m_apiMVPIdx[0] ) );
     
    576594      m_puhWidth  [ui] = uhWidth;
    577595      m_puhHeight [ui] = uhHeight;
    578596      m_puhTrIdx  [ui] = 0;
     597#if NSQT_MOD2
     598      m_puhNSQTPartIdx[ui] = 0;
     599#endif
    579600      m_pePartSize[ui] = SIZE_NONE;
    580601      m_pePredMode[ui] = MODE_NONE;
    581602      m_pbIPCMFlag[ui] = 0;
     
    629650  memset( m_puhChromaIntraDir,  0, iSizeInUchar );
    630651  memset( m_puhInterDir,        0, iSizeInUchar );
    631652  memset( m_puhTrIdx,           0, iSizeInUchar );
     653#if NSQT_MOD2
     654  memset( m_puhNSQTPartIdx,     0, iSizeInUchar );
     655#endif
    632656  memset( m_puhCbf[0],          0, iSizeInUchar );
    633657  memset( m_puhCbf[1],          0, iSizeInUchar );
    634658  memset( m_puhCbf[2],          0, iSizeInUchar );
     
    697721  memset( m_puhChromaIntraDir,  0, iSizeInUchar );
    698722  memset( m_puhInterDir,        0, iSizeInUchar );
    699723  memset( m_puhTrIdx,           0, iSizeInUchar );
     724#if NSQT_MOD2
     725  memset( m_puhNSQTPartIdx,     0, iSizeInUchar );
     726#endif
    700727  memset( m_puhCbf[0],          0, iSizeInUchar );
    701728  memset( m_puhCbf[1],          0, iSizeInUchar );
    702729  memset( m_puhCbf[2],          0, iSizeInUchar );
     
    803830      m_puhWidth  [ui] = pcCU->getWidth(uiPartOffset+ui);
    804831      m_puhHeight  [ui] = pcCU->getHeight(uiPartOffset+ui);
    805832      m_puhTrIdx  [ui] = pcCU->getTransformIdx(uiPartOffset+ui);
     833#if NSQT_MOD2
     834      m_puhNSQTPartIdx[ui] = pcCU->getNSQTPartIdx(uiPartOffset+ui);
     835#endif
    806836      m_pePartSize[ui] = pcCU->getPartitionSize(uiPartOffset+ui);
    807837      m_pePredMode[ui] = pcCU->getPredictionMode(uiPartOffset+ui);
    808838      m_pbIPCMFlag[ui]=pcCU->m_pbIPCMFlag[uiPartOffset+ui];
     
    916946  m_puhChromaIntraDir   = pcCU->getChromaIntraDir()   + uiPart;
    917947  m_puhInterDir         = pcCU->getInterDir()         + uiPart;
    918948  m_puhTrIdx            = pcCU->getTransformIdx()     + uiPart;
     949#if NSQT_MOD2
     950  m_puhNSQTPartIdx      = pcCU->getNSQTPartIdx()      + uiPart;
     951#endif
    919952 
    920953  m_puhCbf[0]= pcCU->getCbf(TEXT_LUMA)            + uiPart;
    921954  m_puhCbf[1]= pcCU->getCbf(TEXT_CHROMA_U)        + uiPart;
     
    10391072  memcpy( m_puhChromaIntraDir   + uiOffset, pcCU->getChromaIntraDir(),    iSizeInUchar );
    10401073  memcpy( m_puhInterDir         + uiOffset, pcCU->getInterDir(),          iSizeInUchar );
    10411074  memcpy( m_puhTrIdx            + uiOffset, pcCU->getTransformIdx(),      iSizeInUchar );
     1075#if NSQT_MOD2
     1076  memcpy( m_puhNSQTPartIdx      + uiOffset, pcCU->getNSQTPartIdx(),       iSizeInUchar );
     1077#endif
    10421078 
    10431079  memcpy( m_puhCbf[0] + uiOffset, pcCU->getCbf(TEXT_LUMA)    , iSizeInUchar );
    10441080  memcpy( m_puhCbf[1] + uiOffset, pcCU->getCbf(TEXT_CHROMA_U), iSizeInUchar );
     
    11121148  memcpy( rpcCU->getChromaIntraDir()    + m_uiAbsIdxInLCU, m_puhChromaIntraDir,   iSizeInUchar );
    11131149  memcpy( rpcCU->getInterDir()          + m_uiAbsIdxInLCU, m_puhInterDir,         iSizeInUchar );
    11141150  memcpy( rpcCU->getTransformIdx()      + m_uiAbsIdxInLCU, m_puhTrIdx,            iSizeInUchar );
     1151#if NSQT_MOD2
     1152  memcpy( rpcCU->getNSQTPartIdx()       + m_uiAbsIdxInLCU, m_puhNSQTPartIdx,      iSizeInUchar );
     1153#endif
    11151154 
    11161155  memcpy( rpcCU->getCbf(TEXT_LUMA)     + m_uiAbsIdxInLCU, m_puhCbf[0], iSizeInUchar );
    11171156  memcpy( rpcCU->getCbf(TEXT_CHROMA_U) + m_uiAbsIdxInLCU, m_puhCbf[1], iSizeInUchar );
     
    11781217  memcpy( rpcCU->getChromaIntraDir()    + uiPartOffset, m_puhChromaIntraDir,   iSizeInUchar );
    11791218  memcpy( rpcCU->getInterDir()          + uiPartOffset, m_puhInterDir,         iSizeInUchar );
    11801219  memcpy( rpcCU->getTransformIdx()      + uiPartOffset, m_puhTrIdx,            iSizeInUchar );
     1220#if NSQT_MOD2
     1221  memcpy( rpcCU->getNSQTPartIdx()       + uiPartOffset, m_puhNSQTPartIdx,      iSizeInUchar );
     1222#endif
    11811223 
    11821224  memcpy( rpcCU->getCbf(TEXT_LUMA)     + uiPartOffset, m_puhCbf[0], iSizeInUchar );
    11831225  memcpy( rpcCU->getCbf(TEXT_CHROMA_U) + uiPartOffset, m_puhCbf[1], iSizeInUchar );
     
    25952637  memset( m_puhTrIdx + uiAbsPartIdx, uiTrIdx, sizeof(UChar)*uiCurrPartNumb );
    25962638}
    25972639
     2640#if NSQT_MOD2
     2641UChar TComDataCU::getNSQTPartIdx(UInt uiIdx)
     2642{   
     2643  return m_puhNSQTPartIdx[uiIdx];
     2644}
     2645
     2646Void TComDataCU::setNSQTIdxSubParts(  UInt uiAbsPartIdx, UInt uiDepth )
     2647{
     2648  UInt uiCurrPartNumb = m_pcPic->getNumPartInCU() >> (uiDepth << 1);
     2649 
     2650  memset( m_puhNSQTPartIdx + uiAbsPartIdx, uiAbsPartIdx, sizeof(UChar)*uiCurrPartNumb );
     2651}
     2652
     2653Void  TComDataCU::setNSQTIdxSubParts    ( UInt uiLog2TrafoSize, UInt uiAbsPartIdx, UInt uiNSAbsPartIdx, UInt uiTrMode )
     2654{
     2655  UInt uiTrWidth, uiTrHeight;
     2656  UInt uiNSTUWidthInBaseUnits, uiNSTUHeightInBaseUnits;
     2657  const UInt uiLCUWidthInBaseUnits = getPic()->getNumPartInWidth();
     2658
     2659  UInt uiQPartNumSubdiv = getPic()->getNumPartInCU() >> ( getDepth(uiAbsPartIdx)<< 1 );
     2660  UInt uiCUPartIdxInLCU = (uiAbsPartIdx/uiQPartNumSubdiv) ? uiQPartNumSubdiv*(uiAbsPartIdx/uiQPartNumSubdiv) : 0;
     2661  Bool bReallCoding = uiCUPartIdxInLCU == getZorderIdxInCU();
     2662
     2663  if ( !bReallCoding )
     2664  {
     2665    return;
     2666  }
     2667 
     2668
     2669  uiTrWidth = uiTrHeight = ( 1 << uiLog2TrafoSize );
     2670
     2671  if ( useNonSquareTrans( uiTrMode, uiAbsPartIdx ) && uiTrWidth > 4 )
     2672  {
     2673#if AMP
     2674    uiTrWidth  = ( m_pePartSize[uiAbsPartIdx] == SIZE_Nx2N || m_pePartSize[uiAbsPartIdx] == SIZE_nLx2N || m_pePartSize[uiAbsPartIdx] == SIZE_nRx2N )? uiTrWidth >> 1  : uiTrWidth << 1;
     2675    uiTrHeight = ( m_pePartSize[uiAbsPartIdx] == SIZE_Nx2N || m_pePartSize[uiAbsPartIdx] == SIZE_nLx2N || m_pePartSize[uiAbsPartIdx] == SIZE_nRx2N )? uiTrHeight << 1 : uiTrHeight >> 1;
     2676#else
     2677    uiTrWidth  = ( m_pePartSize[uiAbsPartIdx] == SIZE_Nx2N )? uiTrWidth >> 1  : uiTrWidth << 1;
     2678    uiTrHeight = ( m_pePartSize[uiAbsPartIdx] == SIZE_Nx2N )? uiTrHeight << 1 : uiTrHeight >> 1;
     2679#endif
     2680  }
     2681
     2682  uiNSTUWidthInBaseUnits  = uiTrWidth / getPic()->getMinCUWidth();
     2683  uiNSTUHeightInBaseUnits = uiTrHeight / getPic()->getMinCUHeight();
     2684 
     2685  if ( uiNSTUWidthInBaseUnits > uiNSTUHeightInBaseUnits )
     2686  {
     2687    UInt uiCurrPartNumb = uiNSTUHeightInBaseUnits*uiNSTUHeightInBaseUnits;
     2688    memset( m_puhNSQTPartIdx + uiNSAbsPartIdx                                                                  , uiAbsPartIdx, sizeof(UChar)*(uiCurrPartNumb) );
     2689    memset( m_puhNSQTPartIdx + g_auiRasterToZscan[g_auiZscanToRaster[uiNSAbsPartIdx]+  uiNSTUHeightInBaseUnits], uiAbsPartIdx, sizeof(UChar)*(uiCurrPartNumb) );
     2690    memset( m_puhNSQTPartIdx + g_auiRasterToZscan[g_auiZscanToRaster[uiNSAbsPartIdx]+2*uiNSTUHeightInBaseUnits], uiAbsPartIdx, sizeof(UChar)*(uiCurrPartNumb) );
     2691    memset( m_puhNSQTPartIdx + g_auiRasterToZscan[g_auiZscanToRaster[uiNSAbsPartIdx]+3*uiNSTUHeightInBaseUnits], uiAbsPartIdx, sizeof(UChar)*(uiCurrPartNumb) );
     2692  }
     2693  else if ( uiNSTUWidthInBaseUnits < uiNSTUHeightInBaseUnits )
     2694  {
     2695    UInt uiCurrPartNumb = uiNSTUWidthInBaseUnits*uiNSTUWidthInBaseUnits;
     2696    memset( m_puhNSQTPartIdx + uiNSAbsPartIdx                                                                                       , uiAbsPartIdx, sizeof(UChar)*(uiCurrPartNumb) );
     2697    memset( m_puhNSQTPartIdx + g_auiRasterToZscan[g_auiZscanToRaster[uiNSAbsPartIdx]+  uiNSTUWidthInBaseUnits*uiLCUWidthInBaseUnits], uiAbsPartIdx, sizeof(UChar)*(uiCurrPartNumb) );
     2698    memset( m_puhNSQTPartIdx + g_auiRasterToZscan[g_auiZscanToRaster[uiNSAbsPartIdx]+2*uiNSTUWidthInBaseUnits*uiLCUWidthInBaseUnits], uiAbsPartIdx, sizeof(UChar)*(uiCurrPartNumb) );
     2699    memset( m_puhNSQTPartIdx + g_auiRasterToZscan[g_auiZscanToRaster[uiNSAbsPartIdx]+3*uiNSTUWidthInBaseUnits*uiLCUWidthInBaseUnits], uiAbsPartIdx, sizeof(UChar)*(uiCurrPartNumb) );
     2700  }
     2701  else
     2702  {
     2703    UInt uiCurrPartNumb = uiNSTUWidthInBaseUnits*uiNSTUHeightInBaseUnits;
     2704    memset( m_puhNSQTPartIdx + uiNSAbsPartIdx, uiAbsPartIdx, sizeof(UChar)*(uiCurrPartNumb) );
     2705  }
     2706}
     2707#endif
     2708
    25982709Void TComDataCU::setSizeSubParts( UInt uiWidth, UInt uiHeight, UInt uiAbsPartIdx, UInt uiDepth )
    25992710{
    26002711  UInt uiCurrPartNumb = m_pcPic->getNumPartInCU() >> (uiDepth << 1);
     
    45164627   }
    45174628}
    45184629
    4519 #if NSQT_MOD
     4630Bool TComDataCU::useNonSquarePU(UInt uiAbsPartIdx)
     4631{
     4632#if AMP
     4633  if ( m_pePartSize[uiAbsPartIdx] == SIZE_Nx2N || m_pePartSize[uiAbsPartIdx] == SIZE_2NxN || ( m_pePartSize[uiAbsPartIdx] >= SIZE_2NxnU && m_pePartSize[uiAbsPartIdx] <= SIZE_nRx2N ) )
     4634#else
     4635  if( m_pePartSize[uiAbsPartIdx] == SIZE_Nx2N || m_pePartSize[uiAbsPartIdx] == SIZE_2NxN )
     4636#endif
     4637  {
     4638    return true;
     4639  }
     4640  else
     4641  {
     4642    return false;
     4643  }
     4644
     4645}
     4646
     4647#if NSQT_MOD || NSQT_MOD2
    45204648Bool TComDataCU::useNonSquareTrans(UInt uiTrMode, Int absPartIdx)
    45214649{
    45224650  const UInt uiLog2TrSize = g_aucConvertToBit[ getSlice()->getSPS()->getMaxCUWidth() >> ( m_puhDepth[ absPartIdx ] + uiTrMode ) ] + 2;
     
    45484676#endif
    45494677  }
    45504678}
     4679
     4680UInt TComDataCU::getNSAbsPartIdx ( UInt uiLog2TrafoSize, UInt uiAbsPartIdx, UInt uiNSAbsPartIdx, UInt uiInnerQuadIdx, UInt uiTrMode )
     4681{
     4682  UInt uiTrWidth, uiTrHeight;
     4683  const UInt uiLCUWidthInBaseUnits = getPic()->getNumPartInWidth();
     4684  UInt uiNSTUWidthInBaseUnits, uiNSTUHeightInBaseUnits;
     4685  UInt uiInterTUSplitDirection = 2;
     4686
     4687  UInt uiQPartNumSubdiv = getPic()->getNumPartInCU() >> ( getDepth(uiAbsPartIdx)<< 1 );
     4688  UInt uiCUPartIdxInLCU = (uiAbsPartIdx/uiQPartNumSubdiv) ? uiQPartNumSubdiv*(uiAbsPartIdx/uiQPartNumSubdiv) : 0;
     4689  Bool bReallCoding = uiCUPartIdxInLCU == getZorderIdxInCU();
     4690
     4691  if ( !bReallCoding )
     4692  {
     4693    return uiAbsPartIdx;
     4694  }
     4695
     4696  if( isIntra(uiAbsPartIdx) )
     4697  {
     4698    return uiNSAbsPartIdx;
     4699  }
     4700
     4701#if AMP
     4702  UInt uiPartDir = ( m_pePartSize[ uiAbsPartIdx ] == SIZE_Nx2N || m_pePartSize[ uiAbsPartIdx ] == SIZE_nLx2N || m_pePartSize[ uiAbsPartIdx ] == SIZE_nRx2N ) ? 0 : 1;
     4703#else
     4704  UInt uiPartDir = ( m_pePartSize[ uiAbsPartIdx ] == SIZE_Nx2N ) ? 0 : 1;
    45514705#endif
     4706
     4707  uiTrWidth = uiTrHeight = ( 1 << uiLog2TrafoSize );
     4708
     4709  if ( useNonSquareTrans( uiTrMode, uiAbsPartIdx ) && uiTrWidth > 4 )
     4710  {
     4711#if AMP
     4712    uiTrWidth  = ( m_pePartSize[uiAbsPartIdx] == SIZE_Nx2N || m_pePartSize[uiAbsPartIdx] == SIZE_nLx2N || m_pePartSize[uiAbsPartIdx] == SIZE_nRx2N )? uiTrWidth >> 1  : uiTrWidth << 1;
     4713    uiTrHeight = ( m_pePartSize[uiAbsPartIdx] == SIZE_Nx2N || m_pePartSize[uiAbsPartIdx] == SIZE_nLx2N || m_pePartSize[uiAbsPartIdx] == SIZE_nRx2N )? uiTrHeight << 1 : uiTrHeight >> 1;
     4714#else
     4715    uiTrWidth  = ( m_pePartSize[uiAbsPartIdx] == SIZE_Nx2N )? uiTrWidth >> 1  : uiTrWidth << 1;
     4716    uiTrHeight = ( m_pePartSize[uiAbsPartIdx] == SIZE_Nx2N )? uiTrHeight << 1 : uiTrHeight >> 1;
     4717#endif
     4718  }
     4719
     4720  uiNSTUWidthInBaseUnits  = uiTrWidth / getPic()->getMinCUWidth();
     4721  uiNSTUHeightInBaseUnits = uiTrHeight / getPic()->getMinCUHeight();
     4722
     4723  if ( useNonSquareTrans( uiTrMode, uiAbsPartIdx ) )
     4724  {
     4725    if( uiTrMode == 1 )
     4726    {
     4727      uiInterTUSplitDirection = 1 - uiPartDir;
     4728    }
     4729    else if( uiLog2TrafoSize == ( getSlice()->getSPS()->getQuadtreeTULog2MaxSize() - 1 ) )
     4730    {
     4731      uiInterTUSplitDirection = 1 - uiPartDir;
     4732    }
     4733    else if ( ( 1 << uiLog2TrafoSize ) == 4 )
     4734    {
     4735      uiInterTUSplitDirection = uiPartDir;
     4736    }
    45524737 
     4738    if ( uiInterTUSplitDirection == 0 )  // vertical split
     4739    {
     4740      UInt uiNSTUBaseUnits = uiNSTUWidthInBaseUnits < uiNSTUHeightInBaseUnits ? uiNSTUWidthInBaseUnits : uiNSTUHeightInBaseUnits;
     4741      uiNSAbsPartIdx = g_auiRasterToZscan[ g_auiZscanToRaster[uiNSAbsPartIdx] + ( uiInnerQuadIdx * uiNSTUBaseUnits * uiLCUWidthInBaseUnits ) ];
     4742    }
     4743    else if ( uiInterTUSplitDirection == 1 )  // horizontal split
     4744    {
     4745      UInt uiNSTUBaseUnits = uiNSTUWidthInBaseUnits < uiNSTUHeightInBaseUnits ? uiNSTUWidthInBaseUnits : uiNSTUHeightInBaseUnits;
     4746      uiNSAbsPartIdx = g_auiRasterToZscan[ g_auiZscanToRaster[uiNSAbsPartIdx] + uiInnerQuadIdx * uiNSTUBaseUnits ];
     4747    }
     4748    else  // cross split
     4749    {
     4750      uiNSAbsPartIdx = g_auiRasterToZscan[ g_auiZscanToRaster[uiNSAbsPartIdx] + (uiInnerQuadIdx & 0x01) * uiNSTUWidthInBaseUnits + ( ( uiInnerQuadIdx >> 1 ) & 0x01 ) * uiNSTUHeightInBaseUnits * uiLCUWidthInBaseUnits ];
     4751    }
     4752  }
     4753  else
     4754  {
     4755    uiNSAbsPartIdx = uiAbsPartIdx;
     4756  }
     4757
     4758  return uiNSAbsPartIdx; 
     4759}
     4760#endif
     4761 
    45534762Void TComDataCU::getPixOffset(UInt uiTrMode,  UInt ui, UInt uiAbsPartIdx, UInt uiDepth, UInt& uiPix_X, UInt& uiPix_Y, TextType eTxt)
    45544763{
    45554764#if AMP
  • Lib/TLibCommon/TComDataCU.h

     
    9393  Char*         m_pePredMode;         ///< array of prediction modes
    9494  UChar*        m_phQP;               ///< array of QP values
    9595  UChar*        m_puhTrIdx;           ///< array of transform indices
     96#if NSQT_MOD2
     97  UChar*        m_puhNSQTPartIdx;     ///< array of absPartIdx mapping table, map zigzag to NSQT
     98#endif
    9699  UChar*        m_puhCbf[3];          ///< array of coded block flags (CBF)
    97100  TComCUMvField m_acCUMvField[2];     ///< array of motion vectors
    98101  TCoeff*       m_pcTrCoeffY;         ///< transformed coefficient buffer (Y)
     
    261264  Void          setQP                 ( UInt uiIdx, UChar  uh ) { m_phQP[uiIdx] = uh;         }
    262265  Void          setQPSubParts         ( UInt uiQP,   UInt uiAbsPartIdx, UInt uiDepth );
    263266  UChar         getLastCodedQP        ( UInt uiAbsPartIdx );
     267
     268#if NSQT_MOD2
     269  UChar*        getNSQTPartIdx        ()                        { return m_puhNSQTPartIdx;          }
     270  UChar         getNSQTPartIdx        ( UInt uiIdx )            ;//{ return m_puhNSQTPartIdx[uiIdx] + getZorderIdxInCU(); }
     271  Void          setNSQTIdxSubParts    ( UInt uiAbsPartIdx, UInt uidepth );
     272  Void          setNSQTIdxSubParts    ( UInt uiLog2TrafoSize, UInt uiAbsPartIdx, UInt uiNSAbsPartIdx, UInt uiTrMode );
     273#endif
    264274 
    265275  UChar*        getTransformIdx       ()                        { return m_puhTrIdx;          }
    266276  UChar         getTransformIdx       ( UInt uiIdx )            { return m_puhTrIdx[uiIdx];   }
     
    477487  UInt          getCoefScanIdx(UInt uiAbsPartIdx, UInt uiWidth, Bool bIsLuma, Bool bIsIntra);
    478488
    479489#if NSQT
    480   Bool useNonSquareTrans( UInt uiTrMode );
    481 #if NSQT_MOD
    482   Bool useNonSquareTrans( UInt uiTrMode, Int absPartIdx );
    483   Void getNSQTSize(Int trMode, Int absPartIdx, Int &trWidth, Int &trHeight);
     490  Bool          useNonSquareTrans( UInt uiTrMode );
     491#if NSQT_MOD || NSQT_MOD2
     492  Bool          useNonSquareTrans( UInt uiTrMode, Int absPartIdx );
     493  Bool          useNonSquarePU   ( UInt uiAbsPartIdx);
     494  Void          getNSQTSize      ( Int trMode, Int absPartIdx, Int &trWidth, Int &trHeight);
     495  UInt          getNSAbsPartIdx  ( UInt uiLog2TrafoSize, UInt uiAbsPartIdx, UInt uiNSAbsPartIdx, UInt uiInnerQuadIdx, UInt uiTrMode );
     496  Void          setZorderIdxInCU ( UInt uiAbsPartIdx )  { m_uiAbsIdxInLCU = uiAbsPartIdx; }
    484497#endif
    485   Void getPixOffset( UInt uiTrMode, UInt ui, UInt uiAbsPartIdx, UInt uiDepth, UInt& uiPix_X, UInt& uiPix_Y, TextType eTxt );
     498  Void          getPixOffset( UInt uiTrMode, UInt ui, UInt uiAbsPartIdx, UInt uiDepth, UInt& uiPix_X, UInt& uiPix_Y, TextType eTxt );
    486499#endif
    487500
    488501};
  • Lib/TLibCommon/TComLoopFilter.cpp

     
    312312
    313313
    314314#if NSQT
     315#if NSQT_MOD_LF
     316Void TComLoopFilter::xSetEdgefilterMultiple( TComDataCU* pcCU, UInt uiScanIdx, UInt uiDepth, Int iDir, Int iEdgeIdx, Bool bValue,UInt uiWidthInBaseUnits, UInt uiHeightInBaseUnits, Bool bNonSquare)
     317#else
    315318Void TComLoopFilter::xSetEdgefilterMultiple( TComDataCU* pcCU, UInt uiScanIdx, UInt uiDepth, Int iDir, Int iEdgeIdx, Bool bValue,UInt uiWidthInBaseUnits, UInt uiHeightInBaseUnits)
     319#endif
    316320
    317321  if ( uiWidthInBaseUnits == 0 )
    318322  {
     
    329333  for( UInt ui = 0; ui < uiNumElem; ui++ )
    330334  {
    331335    UInt uiBsIdx;
     336#if NSQT_MOD_LF
     337    if( !bNonSquare)
     338#else
    332339    if ( uiWidthInBaseUnits == uiHeightInBaseUnits )
     340#endif
    333341    {
    334342      uiBsIdx = xCalcBsIdx( pcCU, uiScanIdx, iDir, iEdgeIdx, ui, true );
    335343    }
     
    398406      TComPic* const pcPic = pcCU->getPic();
    399407      const UInt uiLCUWidthInBaseUnits = pcPic->getNumPartInWidth();
    400408
     409#if NSQT_MOD_LF
     410      if( ( ( 1 << uiLog2TrSize ) < pcCU->getSlice()->getSPS()->getMaxTrSize() && pcCU->getDepth( uiAbsZorderIdx ) == uiDepth ) ||
     411        ( 1 << uiLog2TrSize ) == ( pcCU->getSlice()->getSPS()->getMaxTrSize() >> 1 ) || ( uiLog2TrSize == 2 ) )
     412#else
    401413      if( ( ( 1 << uiLog2TrSize ) < ( pcCU->getSlice()->getSPS()->getMaxTrSize() >> 1 ) && pcCU->getDepth( uiAbsZorderIdx ) == uiDepth ) ||
    402414        ( 1 << uiLog2TrSize ) == ( pcCU->getSlice()->getSPS()->getMaxTrSize() >> 1 ) )
     415#endif
    403416      {
     417#if NSQT_MOD_LF
     418        const UInt iBaseUnitIdx = ( uiLog2TrSize == 2 ) ? 1 :uiLCUWidthInBaseUnits >> ( uiDepth + 2 );
     419#else
    404420        const UInt iBaseUnitIdx = uiLCUWidthInBaseUnits >> ( uiDepth + 2 );
     421#endif
     422#if NSQT_MOD_LF
     423        UInt offset;
     424        if( uiLog2TrSize == 2 )
     425        {
    405426#if AMP
     427          offset = ( pcCU->getPartitionSize( uiAbsZorderIdx ) == SIZE_Nx2N || pcCU->getPartitionSize( uiAbsZorderIdx ) == SIZE_nLx2N || pcCU->getPartitionSize( uiAbsZorderIdx ) == SIZE_nRx2N ) ? iBaseUnitIdx * uiLCUWidthInBaseUnits : iBaseUnitIdx;
     428#else
     429          offset = ( pcCU->getPartitionSize( uiAbsZorderIdx ) == SIZE_Nx2N ) ? iBaseUnitIdx : iBaseUnitIdx * uiLCUWidthInBaseUnits;
     430#endif
     431        }
     432        else
     433        {
     434#if AMP
     435          offset = ( pcCU->getPartitionSize( uiAbsZorderIdx ) == SIZE_Nx2N || pcCU->getPartitionSize( uiAbsZorderIdx ) == SIZE_nLx2N || pcCU->getPartitionSize( uiAbsZorderIdx ) == SIZE_nRx2N ) ? iBaseUnitIdx : iBaseUnitIdx * uiLCUWidthInBaseUnits;
     436#else
     437          offset = ( pcCU->getPartitionSize( uiAbsZorderIdx ) == SIZE_Nx2N ) ? iBaseUnitIdx : iBaseUnitIdx * uiLCUWidthInBaseUnits;
     438#endif
     439        }
     440#else
     441#if AMP
    406442        UInt offset = ( pcCU->getPartitionSize( uiAbsZorderIdx ) == SIZE_Nx2N || pcCU->getPartitionSize( uiAbsZorderIdx ) == SIZE_nLx2N || pcCU->getPartitionSize( uiAbsZorderIdx ) == SIZE_nRx2N ) ? iBaseUnitIdx : iBaseUnitIdx * uiLCUWidthInBaseUnits;
    407443#else
    408444        UInt offset = ( pcCU->getPartitionSize( uiAbsZorderIdx ) == SIZE_Nx2N ) ? iBaseUnitIdx : iBaseUnitIdx * uiLCUWidthInBaseUnits;
    409445#endif
     446#endif
    410447        for ( UInt uiPartIdx = 0; uiPartIdx < 4; uiPartIdx++, uiAbsZorderIdx += uiQNumParts )
    411448        {
    412449          xSetEdgefilterTU( pcCU, uiRasterIdx+uiPartIdx * offset, uiAbsZorderIdx, uiDepth+1 );
     
    414451      }
    415452      else
    416453      {
     454#if !NSQT_MOD_LF
    417455        if( ( 1 << uiLog2TrSize ) < DEBLOCK_SMALLEST_BLOCK )
    418456        {
    419457          return;
    420458        }
     459#endif
    421460#if AMP
    422461        UInt uiTrWidth  = ( pcCU->getPartitionSize( uiAbsZorderIdx ) == SIZE_Nx2N || pcCU->getPartitionSize( uiAbsZorderIdx ) == SIZE_nLx2N || pcCU->getPartitionSize( uiAbsZorderIdx ) == SIZE_nRx2N ) ? 1 << ( uiLog2TrSize - 4 + 1) : 1 << ( uiLog2TrSize - 2 + 1 );
    423462        UInt uiTrHeight = ( pcCU->getPartitionSize( uiAbsZorderIdx  )== SIZE_Nx2N || pcCU->getPartitionSize( uiAbsZorderIdx ) == SIZE_nLx2N || pcCU->getPartitionSize( uiAbsZorderIdx ) == SIZE_nRx2N ) ? 1 << ( uiLog2TrSize - 2 + 1) : 1 << ( uiLog2TrSize - 4 + 1 );
     
    436475    for ( UInt uiPartIdx = 0; uiPartIdx < 4; uiPartIdx++, uiAbsZorderIdx+=uiQNumParts )
    437476    {
    438477#if NSQT
     478#if NSQT_MOD_LF
     479      xSetEdgefilterTU( pcCU,g_auiZscanToRaster[ uiAbsZorderIdx ], uiAbsZorderIdx, uiDepth + 1 );
     480#else
    439481      xSetEdgefilterTU( pcCU,uiRasterIdx, uiAbsZorderIdx, uiDepth + 1 );
     482#endif
    440483#else
    441484      xSetEdgefilterTU( pcCU, uiAbsZorderIdx, uiDepth+1 );
    442485#endif
     
    454497    ( pcCU->getPartitionSize( uiAbsZorderIdx ) == SIZE_Nx2N || pcCU->getPartitionSize( uiAbsZorderIdx ) == SIZE_2NxN ) )
    455498#endif
    456499  {
     500#if !NSQT_MOD_LF
    457501    if( ( 1 << uiLog2TrSize ) < DEBLOCK_SMALLEST_BLOCK )
    458502    {
    459503      return;
    460504    }
     505#endif
    461506   
    462507    UInt uiWidthInBaseUnits  = pcCU->getPic()->getNumPartInWidth () >> uiDepth;
    463508    UInt uiHeightInBaseUnits = pcCU->getPic()->getNumPartInWidth () >> uiDepth;
    464509
     510#if NSQT_MOD_LF
     511    if( uiLog2TrSize!=2 )
     512    {
     513#endif
    465514#if AMP
    466515    if( pcCU->getPartitionSize( uiAbsZorderIdx ) == SIZE_Nx2N || pcCU->getPartitionSize( uiAbsZorderIdx ) == SIZE_nLx2N || pcCU->getPartitionSize( uiAbsZorderIdx ) == SIZE_nRx2N )
    467516#else
     
    476525      uiWidthInBaseUnits  <<= 1;
    477526      uiHeightInBaseUnits >>= 1;
    478527    }
     528#if NSQT_MOD_LF
     529    }
     530    xSetEdgefilterMultiple( pcCU, uiRasterIdx, uiDepth, EDGE_VER, 0, m_stLFCUParam.bInternalEdge, uiWidthInBaseUnits, uiHeightInBaseUnits, true);
     531    xSetEdgefilterMultiple( pcCU, uiRasterIdx, uiDepth, EDGE_HOR, 0, m_stLFCUParam.bInternalEdge, uiWidthInBaseUnits, uiHeightInBaseUnits, true);
     532#else
    479533    xSetEdgefilterMultiple( pcCU, uiRasterIdx, uiDepth, EDGE_VER, 0, m_stLFCUParam.bInternalEdge, uiWidthInBaseUnits, uiHeightInBaseUnits );
    480534    xSetEdgefilterMultiple( pcCU, uiRasterIdx, uiDepth, EDGE_HOR, 0, m_stLFCUParam.bInternalEdge, uiWidthInBaseUnits, uiHeightInBaseUnits );
     535#endif
    481536  }
    482537  else
    483538  {
     
    652707  //-- Set BS for not Intra MB : BS = 2 or 1 or 0
    653708  if ( !pcCUP->isIntra(uiPartP) && !pcCUQ->isIntra(uiPartQ) )
    654709  {
     710#if NSQT_MOD2
     711    UInt uiNSPartQ = uiPartQ;
     712    UInt uiNSPartP = uiPartP;
     713    if(pcCUQ->getPredictionMode(uiPartQ) == MODE_INTER && pcCUQ->useNonSquarePU(uiPartQ))
     714    {
     715      uiNSPartQ = pcCUQ->getNSQTPartIdx( uiAbsPartIdx );
     716    }
     717    if(pcCUP->getPredictionMode(uiPartP) == MODE_INTER && pcCUP->useNonSquarePU(uiPartP))
     718    {
     719      uiNSPartP = pcCUP->getNSQTPartIdx( uiPartP );
     720    }
     721#endif
    655722#if !DEBLK_CLEANUP_CHROMA_BS
     723#if NSQT_MOD2
     724    if ( m_aapucBS[iDir][0][uiAbsPartIdx] && (pcCUQ->getCbf( uiNSPartQ, TEXT_LUMA, pcCUQ->getTransformIdx(uiNSPartQ)) != 0 || pcCUP->getCbf( uiNSPartP, TEXT_LUMA, pcCUP->getTransformIdx(uiNSPartP) ) != 0) )
     725#else
    656726    if ( m_aapucBS[iDir][0][uiAbsPartIdx] && (pcCUQ->getCbf( uiPartQ, TEXT_LUMA, pcCUQ->getTransformIdx(uiPartQ)) != 0 || pcCUP->getCbf( uiPartP, TEXT_LUMA, pcCUP->getTransformIdx(uiPartP) ) != 0) )
     727#endif
    657728#else
     729#if NSQT_MOD2
     730    if ( m_aapucBS[iDir][uiAbsPartIdx] && (pcCUQ->getCbf( uiNSPartQ, TEXT_LUMA, pcCUQ->getTransformIdx(uiNSPartQ)) != 0 || pcCUP->getCbf( uiNSPartP, TEXT_LUMA, pcCUP->getTransformIdx(uiNSPartP) ) != 0) )
     731#else
    658732    if ( m_aapucBS[iDir][uiAbsPartIdx] && (pcCUQ->getCbf( uiPartQ, TEXT_LUMA, pcCUQ->getTransformIdx(uiPartQ)) != 0 || pcCUP->getCbf( uiPartP, TEXT_LUMA, pcCUP->getTransformIdx(uiPartP) ) != 0) )
    659733#endif
     734#endif
    660735    {
    661736#if DEBLK_CLEANUP_G175_G620_G638
    662737      uiBs = 1;
  • Lib/TLibCommon/TComLoopFilter.h

     
    113113#endif 
    114114 
    115115#if NSQT 
     116#if NSQT_MOD_LF
     117  Void xSetEdgefilterMultiple( TComDataCU* pcCU, UInt uiAbsZorderIdx, UInt uiDepth, Int iDir, Int iEdgeIdx, Bool bValue ,UInt uiWidthInBaseUnits = 0, UInt uiHeightInBaseUnits = 0, Bool bNonSquare = false);
     118#else
    116119  Void xSetEdgefilterMultiple( TComDataCU* pcCU, UInt uiAbsZorderIdx, UInt uiDepth, Int iDir, Int iEdgeIdx, Bool bValue ,UInt uiWidthInBaseUnits = 0, UInt uiHeightInBaseUnits = 0 );
     120#endif
    117121#else
    118122  Void xSetEdgefilterMultiple( TComDataCU* pcCU, UInt uiAbsZorderIdx, UInt uiDepth, Int iDir, Int iEdgeIdx, Bool bValue );
    119123#endif
  • Lib/TLibCommon/TypeDef.h

     
    137137#define DISABLE_4x4_INTER                    1       // Coding one flag into SPS to enable/disable INTER4x4
    138138#define MRG_AMVP_ADD_CAND_F470               1       // 1:add new candidates following original ones
    139139#define NSQT                                 1       // F410 & F412 : Non-Square Quadtree Transform
    140 #define NSQT_MOD (NSQT && 1) // Modify NSQT such as to always pass proper width/height to coeff coding functions
     140#define NSQT_MOD (NSQT && 1)                         // Modify NSQT such as to always pass proper width/height to coeff coding functions
     141#define NSQT_MOD2  (NSQT & 1)                        // Modify LF bug
     142#define NSQT_MOD_LF   (NSQT & 1)
    141143#define NSQT_DIAG_SCAN                      1      ///< G1038: use diagonal and subblock scans for NSQT
    142144#if NSQT_DIAG_SCAN && !(SUBBLOCK_SCAN && NSQT_MOD)
    143145#error
  • Lib/TLibDecoder/TDecCu.cpp

     
    388388 
    389389  // Coefficient decoding
    390390  Bool bCodeDQP = getdQPFlag();
     391#if NSQT_MOD2
     392  pcCU->setZorderIdxInCU( uiAbsPartIdx );
    391393  m_pcEntropyDecoder->decodeCoeff( pcCU, uiAbsPartIdx, uiDepth, uiCurrWidth, uiCurrHeight, bCodeDQP );
     394  pcCU->setZorderIdxInCU( 0 );
     395#else
     396  m_pcEntropyDecoder->decodeCoeff( pcCU, uiAbsPartIdx, uiDepth, uiCurrWidth, uiCurrHeight, bCodeDQP );
     397#endif
    392398  setdQPFlag( bCodeDQP );
    393399#if FINE_GRANULARITY_SLICES 
    394400  xFinishDecodeCU( pcCU, uiAbsPartIdx, uiDepth, ruiIsLast );
  • Lib/TLibDecoder/TDecEntropy.cpp

     
    678678#endif
    679679}
    680680
     681#if NSQT_MOD2
     682Void TDecEntropy::xDecodeTransformSubdiv( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiNSAbsPartIdx, UInt uiDepth, UInt uiInnerQuadIdx, UInt& uiYCbfFront3, UInt& uiUCbfFront3, UInt& uiVCbfFront3 )
     683#else
    681684Void TDecEntropy::xDecodeTransformSubdiv( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiInnerQuadIdx, UInt& uiYCbfFront3, UInt& uiUCbfFront3, UInt& uiVCbfFront3 )
     685#endif
    682686{
    683687  UInt uiSubdiv;
    684688  const UInt uiLog2TrafoSize = g_aucConvertToBit[pcCU->getSlice()->getSPS()->getMaxCUWidth()]+2 - uiDepth;
     
    737741        UInt uiDummyCbfY = 0;
    738742        UInt uiDummyCbfU = 0;
    739743        UInt uiDummyCbfV = 0;
     744#if NSQT_MOD2
     745        xDecodeTransformSubdiv( pcCU, uiAbsPartIdx, uiNSAbsPartIdx, uiDepth, i, uiDummyCbfY, uiDummyCbfU, uiDummyCbfV );
     746#else
    740747        xDecodeTransformSubdiv( pcCU, uiAbsPartIdx, uiDepth, i, uiDummyCbfY, uiDummyCbfU, uiDummyCbfV );
     748#endif
    741749        uiAbsPartIdx += uiQPartNum;
    742750      }
    743751    }
     
    819827     
    820828      for( Int i = 0; i < 4; i++ )
    821829      {
     830#if NSQT_MOD2
     831        UInt uiNSAddr = 0;
     832        uiNSAddr = pcCU->getNSAbsPartIdx( uiLog2TrafoSize-1, uiAbsPartIdx, uiNSAbsPartIdx, i, uiTrDepth+1 );
     833        xDecodeTransformSubdiv( pcCU, uiAbsPartIdx, uiNSAddr, uiDepth, i, uiCurrentCbfY, uiCurrentCbfU, uiCurrentCbfV );
     834#else
    822835        xDecodeTransformSubdiv( pcCU, uiAbsPartIdx, uiDepth, i, uiCurrentCbfY, uiCurrentCbfU, uiCurrentCbfV );
     836#endif
    823837        uiYCbf |= pcCU->getCbf( uiAbsPartIdx, TEXT_LUMA, uiLumaTrMode );
    824838        uiUCbf |= pcCU->getCbf( uiAbsPartIdx, TEXT_CHROMA_U, uiChromaTrMode );
    825839        uiVCbf |= pcCU->getCbf( uiAbsPartIdx, TEXT_CHROMA_V, uiChromaTrMode );
     
    856870     
    857871      UInt uiLumaTrMode, uiChromaTrMode;
    858872      pcCU->convertTransIdx( uiAbsPartIdx, uiTrDepth, uiLumaTrMode, uiChromaTrMode );
     873#if NSQT_MOD2
     874      if(pcCU->getPredictionMode( uiAbsPartIdx ) == MODE_INTER && pcCU->useNonSquarePU( uiAbsPartIdx ) )
     875      {
     876        pcCU->setNSQTIdxSubParts( uiLog2TrafoSize, uiAbsPartIdx, uiNSAbsPartIdx, uiLumaTrMode );
     877      }
     878#endif
    859879      pcCU->setCbfSubParts ( 0, TEXT_LUMA, uiAbsPartIdx, uiDepth );
    860880      if( pcCU->getPredictionMode(uiAbsPartIdx) != MODE_INTRA && uiDepth == pcCU->getDepth( uiAbsPartIdx ) && !pcCU->getCbf( uiAbsPartIdx, TEXT_CHROMA_U, 0 ) && !pcCU->getCbf( uiAbsPartIdx, TEXT_CHROMA_V, 0 ) )
    861881      {
     
    895915  UInt temp = 0;
    896916  UInt temp1 = 0;
    897917  UInt temp2 = 0;
     918#if NSQT_MOD2
     919  xDecodeTransformSubdiv( pcCU, uiAbsPartIdx, uiAbsPartIdx, uiDepth, 0, temp, temp1, temp2 );
     920#else
    898921  xDecodeTransformSubdiv( pcCU, uiAbsPartIdx, uiDepth, 0, temp, temp1, temp2 );
     922#endif
    899923}
    900924
    901925Void TDecEntropy::decodeQP          ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth )
     
    11521176      {
    11531177        pcCU->setCbfSubParts( 0, 0, 0, uiAbsPartIdx, uiDepth );
    11541178        pcCU->setTrIdxSubParts( 0 , uiAbsPartIdx, uiDepth );
     1179#if NSQT_MOD2
     1180        pcCU->setNSQTIdxSubParts( uiAbsPartIdx, uiDepth );
     1181#endif
    11551182        return;
    11561183      }
    11571184    }
  • Lib/TLibDecoder/TDecEntropy.h

     
    230230 
    231231 
    232232private:
     233#if NSQT_MOD2
     234  Void xDecodeTransformSubdiv  ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiNSAbsPartIdx, UInt uiDepth, UInt uiInnerQuadIdx, UInt& uiYCbfFront3, UInt& uiUCbfFront3, UInt& uiVCbfFront3 );
     235#else
    233236  Void xDecodeTransformSubdiv  ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiInnerQuadIdx, UInt& uiYCbfFront3, UInt& uiUCbfFront3, UInt& uiVCbfFront3 );
     237#endif
    234238 
    235239#if TU_LEVEL_COEFF_INTERLEAVE
    236240  Void xDecodeCoeff            ( TComDataCU* pcCU, UInt uiLumaOffset, UInt uiChromaOffset, UInt uiAbsPartIdx, UInt uiDepth, UInt uiWidth, UInt uiHeight, UInt uiTrIdx, UInt uiCurrTrIdx, Bool& bCodeDQP );
  • Lib/TLibEncoder/TEncCu.cpp

     
    13111311 
    13121312  // Encode Coefficients
    13131313  Bool bCodeDQP = getdQPFlag();
     1314#if NSQT_MOD2
     1315  pcCU->setZorderIdxInCU( uiAbsPartIdx );
    13141316  m_pcEntropyCoder->encodeCoeff( pcCU, uiAbsPartIdx, uiDepth, pcCU->getWidth (uiAbsPartIdx), pcCU->getHeight(uiAbsPartIdx), bCodeDQP );
     1317  pcCU->setZorderIdxInCU( 0 );
     1318#else
     1319  m_pcEntropyCoder->encodeCoeff( pcCU, uiAbsPartIdx, uiDepth, pcCU->getWidth (uiAbsPartIdx), pcCU->getHeight(uiAbsPartIdx), bCodeDQP );
     1320#endif
    13151321  setdQPFlag( bCodeDQP );
    13161322
    13171323  // --- write terminating bit ---
  • Lib/TLibEncoder/TEncEntropy.cpp

     
    586586  m_pcEntropyCoderIf->codeIPCMInfo ( pcCU, uiAbsPartIdx );
    587587}
    588588
     589#if NSQT_MOD2
     590Void TEncEntropy::xEncodeTransformSubdiv( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiNSAbsPartIdx, UInt uiDepth, UInt uiInnerQuadIdx, UInt& uiYCbfFront3, UInt& uiUCbfFront3, UInt& uiVCbfFront3 )
     591#else
    589592Void TEncEntropy::xEncodeTransformSubdiv( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiInnerQuadIdx, UInt& uiYCbfFront3, UInt& uiUCbfFront3, UInt& uiVCbfFront3 )
     593#endif
    590594{
    591595  const UInt uiSubdiv = pcCU->getTransformIdx( uiAbsPartIdx ) + pcCU->getDepth( uiAbsPartIdx ) > uiDepth;
    592596  const UInt uiLog2TrafoSize = g_aucConvertToBit[pcCU->getSlice()->getSPS()->getMaxCUWidth()]+2 - uiDepth;
     
    644648      UInt uiDummyCbfY = 0;
    645649      UInt uiDummyCbfU = 0;
    646650      UInt uiDummyCbfV = 0;
     651#if NSQT_MOD2
     652      xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiNSAbsPartIdx, uiDepth, 0, uiDummyCbfY, uiDummyCbfU, uiDummyCbfV );
     653      uiAbsPartIdx += uiQPartNum;
     654      xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiNSAbsPartIdx, uiDepth, 1, uiDummyCbfY, uiDummyCbfU, uiDummyCbfV );
     655      uiAbsPartIdx += uiQPartNum;
     656      xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiNSAbsPartIdx, uiDepth, 2, uiDummyCbfY, uiDummyCbfU, uiDummyCbfV );
     657      uiAbsPartIdx += uiQPartNum;
     658      xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiNSAbsPartIdx, uiDepth, 3, uiDummyCbfY, uiDummyCbfU, uiDummyCbfV );
     659#else
    647660      xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiDepth, 0, uiDummyCbfY, uiDummyCbfU, uiDummyCbfV );
    648661      uiAbsPartIdx += uiQPartNum;
    649662      xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiDepth, 1, uiDummyCbfY, uiDummyCbfU, uiDummyCbfV );
     
    651664      xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiDepth, 2, uiDummyCbfY, uiDummyCbfU, uiDummyCbfV );
    652665      uiAbsPartIdx += uiQPartNum;
    653666      xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiDepth, 3, uiDummyCbfY, uiDummyCbfU, uiDummyCbfV );
     667#endif
    654668    }
    655669  }
    656670  else
     
    706720      UInt uiCurrentCbfU = 0;
    707721      UInt uiCurrentCbfV = 0;
    708722     
     723#if NSQT_MOD2
     724      UInt uiNSAddr = 0;
     725      uiNSAddr = pcCU->getNSAbsPartIdx( uiLog2TrafoSize-1, uiAbsPartIdx, uiNSAbsPartIdx, 0, uiDepth - pcCU->getDepth( uiAbsPartIdx ) );
     726      xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiNSAddr, uiDepth, 0, uiCurrentCbfY, uiCurrentCbfU, uiCurrentCbfV );
     727
     728      uiAbsPartIdx += uiQPartNum;
     729      uiNSAddr = pcCU->getNSAbsPartIdx( uiLog2TrafoSize-1, uiAbsPartIdx, uiNSAbsPartIdx, 1, uiDepth - pcCU->getDepth( uiAbsPartIdx ) );
     730      xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiNSAddr, uiDepth, 1, uiCurrentCbfY, uiCurrentCbfU, uiCurrentCbfV );
     731
     732      uiAbsPartIdx += uiQPartNum;
     733      uiNSAddr = pcCU->getNSAbsPartIdx( uiLog2TrafoSize-1, uiAbsPartIdx, uiNSAbsPartIdx, 2, uiDepth - pcCU->getDepth( uiAbsPartIdx ) );
     734      xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiNSAddr, uiDepth, 2, uiCurrentCbfY, uiCurrentCbfU, uiCurrentCbfV );
     735
     736      uiAbsPartIdx += uiQPartNum;
     737      uiNSAddr = pcCU->getNSAbsPartIdx( uiLog2TrafoSize-1, uiAbsPartIdx, uiNSAbsPartIdx, 3, uiDepth - pcCU->getDepth( uiAbsPartIdx ) );
     738      xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiNSAddr, uiDepth, 3, uiCurrentCbfY, uiCurrentCbfU, uiCurrentCbfV );
     739#else
    709740      xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiDepth, 0, uiCurrentCbfY, uiCurrentCbfU, uiCurrentCbfV );
    710741      uiAbsPartIdx += uiQPartNum;
    711742      xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiDepth, 1, uiCurrentCbfY, uiCurrentCbfU, uiCurrentCbfV );
     
    713744      xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiDepth, 2, uiCurrentCbfY, uiCurrentCbfU, uiCurrentCbfV );
    714745      uiAbsPartIdx += uiQPartNum;
    715746      xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiDepth, 3, uiCurrentCbfY, uiCurrentCbfU, uiCurrentCbfV );
     747#endif
    716748     
    717749      uiYCbfFront3 += uiCurrentCbfY;
    718750      uiUCbfFront3 += uiCurrentCbfU;
     
    732764      }
    733765      UInt uiLumaTrMode, uiChromaTrMode;
    734766      pcCU->convertTransIdx( uiAbsPartIdx, pcCU->getTransformIdx( uiAbsPartIdx ), uiLumaTrMode, uiChromaTrMode );
     767#if NSQT_MOD2
     768      if(pcCU->getPredictionMode( uiAbsPartIdx ) == MODE_INTER && pcCU->useNonSquarePU( uiAbsPartIdx ) )
     769      {
     770        pcCU->setNSQTIdxSubParts( uiLog2TrafoSize, uiAbsPartIdx, uiNSAbsPartIdx, uiLumaTrMode );
     771      }
     772#endif
    735773      if( pcCU->getPredictionMode(uiAbsPartIdx) != MODE_INTRA && uiDepth == pcCU->getDepth( uiAbsPartIdx ) && !pcCU->getCbf( uiAbsPartIdx, TEXT_CHROMA_U, 0 ) && !pcCU->getCbf( uiAbsPartIdx, TEXT_CHROMA_V, 0 ) )
    736774      {
    737775        assert( pcCU->getCbf( uiAbsPartIdx, TEXT_LUMA, 0 ) );
     
    777815  UInt temp = 0;
    778816  UInt temp1 = 0;
    779817  UInt temp2 = 0;
     818#if NSQT_MOD2
     819  xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiAbsPartIdx, uiDepth, 0, temp, temp1, temp2 );
     820#else
    780821  xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiDepth, 0, temp, temp1, temp2 );
     822#endif
    781823}
    782824
    783825// Intra direction for Luma
     
    12341276    UInt temp = 0;
    12351277    UInt temp1 = 0;
    12361278    UInt temp2 = 0;
     1279#if NSQT_MOD2
     1280    xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiAbsPartIdx, uiDepth, 0, temp, temp1, temp2 );
     1281#else
    12371282    xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiDepth, 0, temp, temp1, temp2 );
     1283#endif
    12381284   
    12391285  }
    12401286  else
     
    12521298      }
    12531299      if ( !pcCU->getQtRootCbf( uiAbsPartIdx ) )
    12541300      {
     1301#if NSQT_MOD2
     1302        pcCU->setNSQTIdxSubParts(uiAbsPartIdx, uiDepth );
     1303#endif
    12551304        return;
    12561305      }
    12571306    }
  • Lib/TLibEncoder/TEncEntropy.h

     
    268268#endif
    269269
    270270private:
     271#if NSQT_MOD2
     272  Void xEncodeTransformSubdiv  ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiNSAbsPartIdx, UInt uiDepth, UInt uiInnerQuadIdx, UInt& uiYCbfFront3, UInt& uiUCbfFront3, UInt& uiVCbfFront3 );
     273#else
    271274  Void xEncodeTransformSubdiv  ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiInnerQuadIdx, UInt& uiYCbfFront3, UInt& uiUCbfFront3, UInt& uiVCbfFront3 );
     275#endif
    272276#if TU_LEVEL_COEFF_INTERLEAVE
    273277  Void xEncodeCoeff            ( TComDataCU* pcCU, UInt uiLumaOffset, UInt uiChromaOffset, UInt uiAbsPartIdx, UInt uiDepth, UInt uiWidth, UInt uiHeight, UInt uiTrIdx, UInt uiCurrTrIdx, Bool& bCodeDQP );
    274278#else