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
65 65 m_puhChromaIntraDir = NULL; 66 66 m_puhInterDir = NULL; 67 67 m_puhTrIdx = NULL; 68 #if NSQT_MOD2 69 m_puhNSQTPartIdx = NULL; 70 #endif 68 71 m_puhCbf[0] = NULL; 69 72 m_puhCbf[1] = NULL; 70 73 m_puhCbf[2] = NULL; … … 128 131 m_puhInterDir = (UChar* )xMalloc(UChar, uiNumPartition); 129 132 130 133 m_puhTrIdx = (UChar* )xMalloc(UChar, uiNumPartition); 134 #if NSQT_MOD2 135 m_puhNSQTPartIdx = (UChar* )xMalloc(UChar, uiNumPartition); 136 #endif 131 137 132 138 m_puhCbf[0] = (UChar* )xMalloc(UChar, uiNumPartition); 133 139 m_puhCbf[1] = (UChar* )xMalloc(UChar, uiNumPartition); … … 205 211 if ( m_puhLumaIntraDir ) { xFree(m_puhLumaIntraDir); m_puhLumaIntraDir = NULL; } 206 212 if ( m_puhChromaIntraDir ) { xFree(m_puhChromaIntraDir); m_puhChromaIntraDir = NULL; } 207 213 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 208 217 if ( m_pcTrCoeffY ) { xFree(m_pcTrCoeffY); m_pcTrCoeffY = NULL; } 209 218 if ( m_pcTrCoeffCb ) { xFree(m_pcTrCoeffCb); m_pcTrCoeffCb = NULL; } 210 219 if ( m_pcTrCoeffCr ) { xFree(m_pcTrCoeffCr); m_pcTrCoeffCr = NULL; } … … 289 298 memset( m_puhChromaIntraDir, 0, iSizeInUchar ); 290 299 memset( m_puhInterDir, 0, iSizeInUchar ); 291 300 memset( m_puhTrIdx, 0, iSizeInUchar ); 301 #if NSQT_MOD2 302 memset( m_puhNSQTPartIdx , 0, iSizeInUchar ); 303 #endif 292 304 memset( m_puhCbf[0], 0, iSizeInUchar ); 293 305 memset( m_puhCbf[1], 0, iSizeInUchar ); 294 306 memset( m_puhCbf[2], 0, iSizeInUchar ); … … 423 435 m_puhWidth [ui] = pcFrom->getWidth(ui); 424 436 m_puhHeight [ui] = pcFrom->getHeight(ui); 425 437 m_puhTrIdx [ui] = pcFrom->getTransformIdx(ui); 438 #if NSQT_MOD2 439 m_puhNSQTPartIdx[ui] = pcFrom->getNSQTPartIdx(ui); 440 #endif 426 441 m_apiMVPIdx[0][ui] = pcFrom->m_apiMVPIdx[0][ui];; 427 442 m_apiMVPIdx[1][ui] = pcFrom->m_apiMVPIdx[1][ui]; 428 443 m_apiMVPNum[0][ui] = pcFrom->m_apiMVPNum[0][ui]; … … 449 464 memset( m_pePredMode + firstElement, MODE_NONE, numElements * sizeof( *m_pePredMode ) ); 450 465 memset( m_puhDepth + firstElement, 0, numElements * sizeof( *m_puhDepth ) ); 451 466 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 452 470 memset( m_puhWidth + firstElement, g_uiMaxCUWidth, numElements * sizeof( *m_puhWidth ) ); 453 471 memset( m_puhHeight + firstElement, g_uiMaxCUHeight, numElements * sizeof( *m_puhHeight ) ); 454 472 memset( m_apiMVPIdx[0] + firstElement, -1, numElements * sizeof( *m_apiMVPIdx[0] ) ); … … 576 594 m_puhWidth [ui] = uhWidth; 577 595 m_puhHeight [ui] = uhHeight; 578 596 m_puhTrIdx [ui] = 0; 597 #if NSQT_MOD2 598 m_puhNSQTPartIdx[ui] = 0; 599 #endif 579 600 m_pePartSize[ui] = SIZE_NONE; 580 601 m_pePredMode[ui] = MODE_NONE; 581 602 m_pbIPCMFlag[ui] = 0; … … 629 650 memset( m_puhChromaIntraDir, 0, iSizeInUchar ); 630 651 memset( m_puhInterDir, 0, iSizeInUchar ); 631 652 memset( m_puhTrIdx, 0, iSizeInUchar ); 653 #if NSQT_MOD2 654 memset( m_puhNSQTPartIdx, 0, iSizeInUchar ); 655 #endif 632 656 memset( m_puhCbf[0], 0, iSizeInUchar ); 633 657 memset( m_puhCbf[1], 0, iSizeInUchar ); 634 658 memset( m_puhCbf[2], 0, iSizeInUchar ); … … 697 721 memset( m_puhChromaIntraDir, 0, iSizeInUchar ); 698 722 memset( m_puhInterDir, 0, iSizeInUchar ); 699 723 memset( m_puhTrIdx, 0, iSizeInUchar ); 724 #if NSQT_MOD2 725 memset( m_puhNSQTPartIdx, 0, iSizeInUchar ); 726 #endif 700 727 memset( m_puhCbf[0], 0, iSizeInUchar ); 701 728 memset( m_puhCbf[1], 0, iSizeInUchar ); 702 729 memset( m_puhCbf[2], 0, iSizeInUchar ); … … 803 830 m_puhWidth [ui] = pcCU->getWidth(uiPartOffset+ui); 804 831 m_puhHeight [ui] = pcCU->getHeight(uiPartOffset+ui); 805 832 m_puhTrIdx [ui] = pcCU->getTransformIdx(uiPartOffset+ui); 833 #if NSQT_MOD2 834 m_puhNSQTPartIdx[ui] = pcCU->getNSQTPartIdx(uiPartOffset+ui); 835 #endif 806 836 m_pePartSize[ui] = pcCU->getPartitionSize(uiPartOffset+ui); 807 837 m_pePredMode[ui] = pcCU->getPredictionMode(uiPartOffset+ui); 808 838 m_pbIPCMFlag[ui]=pcCU->m_pbIPCMFlag[uiPartOffset+ui]; … … 916 946 m_puhChromaIntraDir = pcCU->getChromaIntraDir() + uiPart; 917 947 m_puhInterDir = pcCU->getInterDir() + uiPart; 918 948 m_puhTrIdx = pcCU->getTransformIdx() + uiPart; 949 #if NSQT_MOD2 950 m_puhNSQTPartIdx = pcCU->getNSQTPartIdx() + uiPart; 951 #endif 919 952 920 953 m_puhCbf[0]= pcCU->getCbf(TEXT_LUMA) + uiPart; 921 954 m_puhCbf[1]= pcCU->getCbf(TEXT_CHROMA_U) + uiPart; … … 1039 1072 memcpy( m_puhChromaIntraDir + uiOffset, pcCU->getChromaIntraDir(), iSizeInUchar ); 1040 1073 memcpy( m_puhInterDir + uiOffset, pcCU->getInterDir(), iSizeInUchar ); 1041 1074 memcpy( m_puhTrIdx + uiOffset, pcCU->getTransformIdx(), iSizeInUchar ); 1075 #if NSQT_MOD2 1076 memcpy( m_puhNSQTPartIdx + uiOffset, pcCU->getNSQTPartIdx(), iSizeInUchar ); 1077 #endif 1042 1078 1043 1079 memcpy( m_puhCbf[0] + uiOffset, pcCU->getCbf(TEXT_LUMA) , iSizeInUchar ); 1044 1080 memcpy( m_puhCbf[1] + uiOffset, pcCU->getCbf(TEXT_CHROMA_U), iSizeInUchar ); … … 1112 1148 memcpy( rpcCU->getChromaIntraDir() + m_uiAbsIdxInLCU, m_puhChromaIntraDir, iSizeInUchar ); 1113 1149 memcpy( rpcCU->getInterDir() + m_uiAbsIdxInLCU, m_puhInterDir, iSizeInUchar ); 1114 1150 memcpy( rpcCU->getTransformIdx() + m_uiAbsIdxInLCU, m_puhTrIdx, iSizeInUchar ); 1151 #if NSQT_MOD2 1152 memcpy( rpcCU->getNSQTPartIdx() + m_uiAbsIdxInLCU, m_puhNSQTPartIdx, iSizeInUchar ); 1153 #endif 1115 1154 1116 1155 memcpy( rpcCU->getCbf(TEXT_LUMA) + m_uiAbsIdxInLCU, m_puhCbf[0], iSizeInUchar ); 1117 1156 memcpy( rpcCU->getCbf(TEXT_CHROMA_U) + m_uiAbsIdxInLCU, m_puhCbf[1], iSizeInUchar ); … … 1178 1217 memcpy( rpcCU->getChromaIntraDir() + uiPartOffset, m_puhChromaIntraDir, iSizeInUchar ); 1179 1218 memcpy( rpcCU->getInterDir() + uiPartOffset, m_puhInterDir, iSizeInUchar ); 1180 1219 memcpy( rpcCU->getTransformIdx() + uiPartOffset, m_puhTrIdx, iSizeInUchar ); 1220 #if NSQT_MOD2 1221 memcpy( rpcCU->getNSQTPartIdx() + uiPartOffset, m_puhNSQTPartIdx, iSizeInUchar ); 1222 #endif 1181 1223 1182 1224 memcpy( rpcCU->getCbf(TEXT_LUMA) + uiPartOffset, m_puhCbf[0], iSizeInUchar ); 1183 1225 memcpy( rpcCU->getCbf(TEXT_CHROMA_U) + uiPartOffset, m_puhCbf[1], iSizeInUchar ); … … 2595 2637 memset( m_puhTrIdx + uiAbsPartIdx, uiTrIdx, sizeof(UChar)*uiCurrPartNumb ); 2596 2638 } 2597 2639 2640 #if NSQT_MOD2 2641 UChar TComDataCU::getNSQTPartIdx(UInt uiIdx) 2642 { 2643 return m_puhNSQTPartIdx[uiIdx]; 2644 } 2645 2646 Void 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 2653 Void 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 2598 2709 Void TComDataCU::setSizeSubParts( UInt uiWidth, UInt uiHeight, UInt uiAbsPartIdx, UInt uiDepth ) 2599 2710 { 2600 2711 UInt uiCurrPartNumb = m_pcPic->getNumPartInCU() >> (uiDepth << 1); … … 4516 4627 } 4517 4628 } 4518 4629 4519 #if NSQT_MOD 4630 Bool 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 4520 4648 Bool TComDataCU::useNonSquareTrans(UInt uiTrMode, Int absPartIdx) 4521 4649 { 4522 4650 const UInt uiLog2TrSize = g_aucConvertToBit[ getSlice()->getSPS()->getMaxCUWidth() >> ( m_puhDepth[ absPartIdx ] + uiTrMode ) ] + 2; … … 4548 4676 #endif 4549 4677 } 4550 4678 } 4679 4680 UInt 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; 4551 4705 #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 } 4552 4737 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 4553 4762 Void TComDataCU::getPixOffset(UInt uiTrMode, UInt ui, UInt uiAbsPartIdx, UInt uiDepth, UInt& uiPix_X, UInt& uiPix_Y, TextType eTxt) 4554 4763 { 4555 4764 #if AMP -
Lib/TLibCommon/TComDataCU.h
93 93 Char* m_pePredMode; ///< array of prediction modes 94 94 UChar* m_phQP; ///< array of QP values 95 95 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 96 99 UChar* m_puhCbf[3]; ///< array of coded block flags (CBF) 97 100 TComCUMvField m_acCUMvField[2]; ///< array of motion vectors 98 101 TCoeff* m_pcTrCoeffY; ///< transformed coefficient buffer (Y) … … 261 264 Void setQP ( UInt uiIdx, UChar uh ) { m_phQP[uiIdx] = uh; } 262 265 Void setQPSubParts ( UInt uiQP, UInt uiAbsPartIdx, UInt uiDepth ); 263 266 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 264 274 265 275 UChar* getTransformIdx () { return m_puhTrIdx; } 266 276 UChar getTransformIdx ( UInt uiIdx ) { return m_puhTrIdx[uiIdx]; } … … 477 487 UInt getCoefScanIdx(UInt uiAbsPartIdx, UInt uiWidth, Bool bIsLuma, Bool bIsIntra); 478 488 479 489 #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; } 484 497 #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 ); 486 499 #endif 487 500 488 501 }; -
Lib/TLibCommon/TComLoopFilter.cpp
312 312 313 313 314 314 #if NSQT 315 #if NSQT_MOD_LF 316 Void TComLoopFilter::xSetEdgefilterMultiple( TComDataCU* pcCU, UInt uiScanIdx, UInt uiDepth, Int iDir, Int iEdgeIdx, Bool bValue,UInt uiWidthInBaseUnits, UInt uiHeightInBaseUnits, Bool bNonSquare) 317 #else 315 318 Void TComLoopFilter::xSetEdgefilterMultiple( TComDataCU* pcCU, UInt uiScanIdx, UInt uiDepth, Int iDir, Int iEdgeIdx, Bool bValue,UInt uiWidthInBaseUnits, UInt uiHeightInBaseUnits) 319 #endif 316 320 { 317 321 if ( uiWidthInBaseUnits == 0 ) 318 322 { … … 329 333 for( UInt ui = 0; ui < uiNumElem; ui++ ) 330 334 { 331 335 UInt uiBsIdx; 336 #if NSQT_MOD_LF 337 if( !bNonSquare) 338 #else 332 339 if ( uiWidthInBaseUnits == uiHeightInBaseUnits ) 340 #endif 333 341 { 334 342 uiBsIdx = xCalcBsIdx( pcCU, uiScanIdx, iDir, iEdgeIdx, ui, true ); 335 343 } … … 398 406 TComPic* const pcPic = pcCU->getPic(); 399 407 const UInt uiLCUWidthInBaseUnits = pcPic->getNumPartInWidth(); 400 408 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 401 413 if( ( ( 1 << uiLog2TrSize ) < ( pcCU->getSlice()->getSPS()->getMaxTrSize() >> 1 ) && pcCU->getDepth( uiAbsZorderIdx ) == uiDepth ) || 402 414 ( 1 << uiLog2TrSize ) == ( pcCU->getSlice()->getSPS()->getMaxTrSize() >> 1 ) ) 415 #endif 403 416 { 417 #if NSQT_MOD_LF 418 const UInt iBaseUnitIdx = ( uiLog2TrSize == 2 ) ? 1 :uiLCUWidthInBaseUnits >> ( uiDepth + 2 ); 419 #else 404 420 const UInt iBaseUnitIdx = uiLCUWidthInBaseUnits >> ( uiDepth + 2 ); 421 #endif 422 #if NSQT_MOD_LF 423 UInt offset; 424 if( uiLog2TrSize == 2 ) 425 { 405 426 #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 406 442 UInt offset = ( pcCU->getPartitionSize( uiAbsZorderIdx ) == SIZE_Nx2N || pcCU->getPartitionSize( uiAbsZorderIdx ) == SIZE_nLx2N || pcCU->getPartitionSize( uiAbsZorderIdx ) == SIZE_nRx2N ) ? iBaseUnitIdx : iBaseUnitIdx * uiLCUWidthInBaseUnits; 407 443 #else 408 444 UInt offset = ( pcCU->getPartitionSize( uiAbsZorderIdx ) == SIZE_Nx2N ) ? iBaseUnitIdx : iBaseUnitIdx * uiLCUWidthInBaseUnits; 409 445 #endif 446 #endif 410 447 for ( UInt uiPartIdx = 0; uiPartIdx < 4; uiPartIdx++, uiAbsZorderIdx += uiQNumParts ) 411 448 { 412 449 xSetEdgefilterTU( pcCU, uiRasterIdx+uiPartIdx * offset, uiAbsZorderIdx, uiDepth+1 ); … … 414 451 } 415 452 else 416 453 { 454 #if !NSQT_MOD_LF 417 455 if( ( 1 << uiLog2TrSize ) < DEBLOCK_SMALLEST_BLOCK ) 418 456 { 419 457 return; 420 458 } 459 #endif 421 460 #if AMP 422 461 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 ); 423 462 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 ); … … 436 475 for ( UInt uiPartIdx = 0; uiPartIdx < 4; uiPartIdx++, uiAbsZorderIdx+=uiQNumParts ) 437 476 { 438 477 #if NSQT 478 #if NSQT_MOD_LF 479 xSetEdgefilterTU( pcCU,g_auiZscanToRaster[ uiAbsZorderIdx ], uiAbsZorderIdx, uiDepth + 1 ); 480 #else 439 481 xSetEdgefilterTU( pcCU,uiRasterIdx, uiAbsZorderIdx, uiDepth + 1 ); 482 #endif 440 483 #else 441 484 xSetEdgefilterTU( pcCU, uiAbsZorderIdx, uiDepth+1 ); 442 485 #endif … … 454 497 ( pcCU->getPartitionSize( uiAbsZorderIdx ) == SIZE_Nx2N || pcCU->getPartitionSize( uiAbsZorderIdx ) == SIZE_2NxN ) ) 455 498 #endif 456 499 { 500 #if !NSQT_MOD_LF 457 501 if( ( 1 << uiLog2TrSize ) < DEBLOCK_SMALLEST_BLOCK ) 458 502 { 459 503 return; 460 504 } 505 #endif 461 506 462 507 UInt uiWidthInBaseUnits = pcCU->getPic()->getNumPartInWidth () >> uiDepth; 463 508 UInt uiHeightInBaseUnits = pcCU->getPic()->getNumPartInWidth () >> uiDepth; 464 509 510 #if NSQT_MOD_LF 511 if( uiLog2TrSize!=2 ) 512 { 513 #endif 465 514 #if AMP 466 515 if( pcCU->getPartitionSize( uiAbsZorderIdx ) == SIZE_Nx2N || pcCU->getPartitionSize( uiAbsZorderIdx ) == SIZE_nLx2N || pcCU->getPartitionSize( uiAbsZorderIdx ) == SIZE_nRx2N ) 467 516 #else … … 476 525 uiWidthInBaseUnits <<= 1; 477 526 uiHeightInBaseUnits >>= 1; 478 527 } 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 479 533 xSetEdgefilterMultiple( pcCU, uiRasterIdx, uiDepth, EDGE_VER, 0, m_stLFCUParam.bInternalEdge, uiWidthInBaseUnits, uiHeightInBaseUnits ); 480 534 xSetEdgefilterMultiple( pcCU, uiRasterIdx, uiDepth, EDGE_HOR, 0, m_stLFCUParam.bInternalEdge, uiWidthInBaseUnits, uiHeightInBaseUnits ); 535 #endif 481 536 } 482 537 else 483 538 { … … 652 707 //-- Set BS for not Intra MB : BS = 2 or 1 or 0 653 708 if ( !pcCUP->isIntra(uiPartP) && !pcCUQ->isIntra(uiPartQ) ) 654 709 { 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 655 722 #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 656 726 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 657 728 #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 658 732 if ( m_aapucBS[iDir][uiAbsPartIdx] && (pcCUQ->getCbf( uiPartQ, TEXT_LUMA, pcCUQ->getTransformIdx(uiPartQ)) != 0 || pcCUP->getCbf( uiPartP, TEXT_LUMA, pcCUP->getTransformIdx(uiPartP) ) != 0) ) 659 733 #endif 734 #endif 660 735 { 661 736 #if DEBLK_CLEANUP_G175_G620_G638 662 737 uiBs = 1; -
Lib/TLibCommon/TComLoopFilter.h
113 113 #endif 114 114 115 115 #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 116 119 Void xSetEdgefilterMultiple( TComDataCU* pcCU, UInt uiAbsZorderIdx, UInt uiDepth, Int iDir, Int iEdgeIdx, Bool bValue ,UInt uiWidthInBaseUnits = 0, UInt uiHeightInBaseUnits = 0 ); 120 #endif 117 121 #else 118 122 Void xSetEdgefilterMultiple( TComDataCU* pcCU, UInt uiAbsZorderIdx, UInt uiDepth, Int iDir, Int iEdgeIdx, Bool bValue ); 119 123 #endif -
Lib/TLibCommon/TypeDef.h
137 137 #define DISABLE_4x4_INTER 1 // Coding one flag into SPS to enable/disable INTER4x4 138 138 #define MRG_AMVP_ADD_CAND_F470 1 // 1:add new candidates following original ones 139 139 #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) 141 143 #define NSQT_DIAG_SCAN 1 ///< G1038: use diagonal and subblock scans for NSQT 142 144 #if NSQT_DIAG_SCAN && !(SUBBLOCK_SCAN && NSQT_MOD) 143 145 #error -
Lib/TLibDecoder/TDecCu.cpp
388 388 389 389 // Coefficient decoding 390 390 Bool bCodeDQP = getdQPFlag(); 391 #if NSQT_MOD2 392 pcCU->setZorderIdxInCU( uiAbsPartIdx ); 391 393 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 392 398 setdQPFlag( bCodeDQP ); 393 399 #if FINE_GRANULARITY_SLICES 394 400 xFinishDecodeCU( pcCU, uiAbsPartIdx, uiDepth, ruiIsLast ); -
Lib/TLibDecoder/TDecEntropy.cpp
678 678 #endif 679 679 } 680 680 681 #if NSQT_MOD2 682 Void TDecEntropy::xDecodeTransformSubdiv( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiNSAbsPartIdx, UInt uiDepth, UInt uiInnerQuadIdx, UInt& uiYCbfFront3, UInt& uiUCbfFront3, UInt& uiVCbfFront3 ) 683 #else 681 684 Void TDecEntropy::xDecodeTransformSubdiv( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiInnerQuadIdx, UInt& uiYCbfFront3, UInt& uiUCbfFront3, UInt& uiVCbfFront3 ) 685 #endif 682 686 { 683 687 UInt uiSubdiv; 684 688 const UInt uiLog2TrafoSize = g_aucConvertToBit[pcCU->getSlice()->getSPS()->getMaxCUWidth()]+2 - uiDepth; … … 737 741 UInt uiDummyCbfY = 0; 738 742 UInt uiDummyCbfU = 0; 739 743 UInt uiDummyCbfV = 0; 744 #if NSQT_MOD2 745 xDecodeTransformSubdiv( pcCU, uiAbsPartIdx, uiNSAbsPartIdx, uiDepth, i, uiDummyCbfY, uiDummyCbfU, uiDummyCbfV ); 746 #else 740 747 xDecodeTransformSubdiv( pcCU, uiAbsPartIdx, uiDepth, i, uiDummyCbfY, uiDummyCbfU, uiDummyCbfV ); 748 #endif 741 749 uiAbsPartIdx += uiQPartNum; 742 750 } 743 751 } … … 819 827 820 828 for( Int i = 0; i < 4; i++ ) 821 829 { 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 822 835 xDecodeTransformSubdiv( pcCU, uiAbsPartIdx, uiDepth, i, uiCurrentCbfY, uiCurrentCbfU, uiCurrentCbfV ); 836 #endif 823 837 uiYCbf |= pcCU->getCbf( uiAbsPartIdx, TEXT_LUMA, uiLumaTrMode ); 824 838 uiUCbf |= pcCU->getCbf( uiAbsPartIdx, TEXT_CHROMA_U, uiChromaTrMode ); 825 839 uiVCbf |= pcCU->getCbf( uiAbsPartIdx, TEXT_CHROMA_V, uiChromaTrMode ); … … 856 870 857 871 UInt uiLumaTrMode, uiChromaTrMode; 858 872 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 859 879 pcCU->setCbfSubParts ( 0, TEXT_LUMA, uiAbsPartIdx, uiDepth ); 860 880 if( pcCU->getPredictionMode(uiAbsPartIdx) != MODE_INTRA && uiDepth == pcCU->getDepth( uiAbsPartIdx ) && !pcCU->getCbf( uiAbsPartIdx, TEXT_CHROMA_U, 0 ) && !pcCU->getCbf( uiAbsPartIdx, TEXT_CHROMA_V, 0 ) ) 861 881 { … … 895 915 UInt temp = 0; 896 916 UInt temp1 = 0; 897 917 UInt temp2 = 0; 918 #if NSQT_MOD2 919 xDecodeTransformSubdiv( pcCU, uiAbsPartIdx, uiAbsPartIdx, uiDepth, 0, temp, temp1, temp2 ); 920 #else 898 921 xDecodeTransformSubdiv( pcCU, uiAbsPartIdx, uiDepth, 0, temp, temp1, temp2 ); 922 #endif 899 923 } 900 924 901 925 Void TDecEntropy::decodeQP ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) … … 1152 1176 { 1153 1177 pcCU->setCbfSubParts( 0, 0, 0, uiAbsPartIdx, uiDepth ); 1154 1178 pcCU->setTrIdxSubParts( 0 , uiAbsPartIdx, uiDepth ); 1179 #if NSQT_MOD2 1180 pcCU->setNSQTIdxSubParts( uiAbsPartIdx, uiDepth ); 1181 #endif 1155 1182 return; 1156 1183 } 1157 1184 } -
Lib/TLibDecoder/TDecEntropy.h
230 230 231 231 232 232 private: 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 233 236 Void xDecodeTransformSubdiv ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiInnerQuadIdx, UInt& uiYCbfFront3, UInt& uiUCbfFront3, UInt& uiVCbfFront3 ); 237 #endif 234 238 235 239 #if TU_LEVEL_COEFF_INTERLEAVE 236 240 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
1311 1311 1312 1312 // Encode Coefficients 1313 1313 Bool bCodeDQP = getdQPFlag(); 1314 #if NSQT_MOD2 1315 pcCU->setZorderIdxInCU( uiAbsPartIdx ); 1314 1316 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 1315 1321 setdQPFlag( bCodeDQP ); 1316 1322 1317 1323 // --- write terminating bit --- -
Lib/TLibEncoder/TEncEntropy.cpp
586 586 m_pcEntropyCoderIf->codeIPCMInfo ( pcCU, uiAbsPartIdx ); 587 587 } 588 588 589 #if NSQT_MOD2 590 Void TEncEntropy::xEncodeTransformSubdiv( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiNSAbsPartIdx, UInt uiDepth, UInt uiInnerQuadIdx, UInt& uiYCbfFront3, UInt& uiUCbfFront3, UInt& uiVCbfFront3 ) 591 #else 589 592 Void TEncEntropy::xEncodeTransformSubdiv( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiInnerQuadIdx, UInt& uiYCbfFront3, UInt& uiUCbfFront3, UInt& uiVCbfFront3 ) 593 #endif 590 594 { 591 595 const UInt uiSubdiv = pcCU->getTransformIdx( uiAbsPartIdx ) + pcCU->getDepth( uiAbsPartIdx ) > uiDepth; 592 596 const UInt uiLog2TrafoSize = g_aucConvertToBit[pcCU->getSlice()->getSPS()->getMaxCUWidth()]+2 - uiDepth; … … 644 648 UInt uiDummyCbfY = 0; 645 649 UInt uiDummyCbfU = 0; 646 650 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 647 660 xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiDepth, 0, uiDummyCbfY, uiDummyCbfU, uiDummyCbfV ); 648 661 uiAbsPartIdx += uiQPartNum; 649 662 xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiDepth, 1, uiDummyCbfY, uiDummyCbfU, uiDummyCbfV ); … … 651 664 xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiDepth, 2, uiDummyCbfY, uiDummyCbfU, uiDummyCbfV ); 652 665 uiAbsPartIdx += uiQPartNum; 653 666 xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiDepth, 3, uiDummyCbfY, uiDummyCbfU, uiDummyCbfV ); 667 #endif 654 668 } 655 669 } 656 670 else … … 706 720 UInt uiCurrentCbfU = 0; 707 721 UInt uiCurrentCbfV = 0; 708 722 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 709 740 xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiDepth, 0, uiCurrentCbfY, uiCurrentCbfU, uiCurrentCbfV ); 710 741 uiAbsPartIdx += uiQPartNum; 711 742 xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiDepth, 1, uiCurrentCbfY, uiCurrentCbfU, uiCurrentCbfV ); … … 713 744 xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiDepth, 2, uiCurrentCbfY, uiCurrentCbfU, uiCurrentCbfV ); 714 745 uiAbsPartIdx += uiQPartNum; 715 746 xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiDepth, 3, uiCurrentCbfY, uiCurrentCbfU, uiCurrentCbfV ); 747 #endif 716 748 717 749 uiYCbfFront3 += uiCurrentCbfY; 718 750 uiUCbfFront3 += uiCurrentCbfU; … … 732 764 } 733 765 UInt uiLumaTrMode, uiChromaTrMode; 734 766 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 735 773 if( pcCU->getPredictionMode(uiAbsPartIdx) != MODE_INTRA && uiDepth == pcCU->getDepth( uiAbsPartIdx ) && !pcCU->getCbf( uiAbsPartIdx, TEXT_CHROMA_U, 0 ) && !pcCU->getCbf( uiAbsPartIdx, TEXT_CHROMA_V, 0 ) ) 736 774 { 737 775 assert( pcCU->getCbf( uiAbsPartIdx, TEXT_LUMA, 0 ) ); … … 777 815 UInt temp = 0; 778 816 UInt temp1 = 0; 779 817 UInt temp2 = 0; 818 #if NSQT_MOD2 819 xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiAbsPartIdx, uiDepth, 0, temp, temp1, temp2 ); 820 #else 780 821 xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiDepth, 0, temp, temp1, temp2 ); 822 #endif 781 823 } 782 824 783 825 // Intra direction for Luma … … 1234 1276 UInt temp = 0; 1235 1277 UInt temp1 = 0; 1236 1278 UInt temp2 = 0; 1279 #if NSQT_MOD2 1280 xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiAbsPartIdx, uiDepth, 0, temp, temp1, temp2 ); 1281 #else 1237 1282 xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiDepth, 0, temp, temp1, temp2 ); 1283 #endif 1238 1284 1239 1285 } 1240 1286 else … … 1252 1298 } 1253 1299 if ( !pcCU->getQtRootCbf( uiAbsPartIdx ) ) 1254 1300 { 1301 #if NSQT_MOD2 1302 pcCU->setNSQTIdxSubParts(uiAbsPartIdx, uiDepth ); 1303 #endif 1255 1304 return; 1256 1305 } 1257 1306 } -
Lib/TLibEncoder/TEncEntropy.h
268 268 #endif 269 269 270 270 private: 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 271 274 Void xEncodeTransformSubdiv ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiInnerQuadIdx, UInt& uiYCbfFront3, UInt& uiUCbfFront3, UInt& uiVCbfFront3 ); 275 #endif 272 276 #if TU_LEVEL_COEFF_INTERLEAVE 273 277 Void xEncodeCoeff ( TComDataCU* pcCU, UInt uiLumaOffset, UInt uiChromaOffset, UInt uiAbsPartIdx, UInt uiDepth, UInt uiWidth, UInt uiHeight, UInt uiTrIdx, UInt uiCurrTrIdx, Bool& bCodeDQP ); 274 278 #else