Changeset 1344 in SHVCSoftware for branches/SHM-dev/source/Lib/TLibEncoder


Ignore:
Timestamp:
22 Jul 2015, 03:01:47 (9 years ago)
Author:
seregin
Message:

port rev 4422

Location:
branches/SHM-dev/source/Lib/TLibEncoder
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/SHM-dev/source/Lib/TLibEncoder/TEncGOP.cpp

    r1336 r1344  
    26052605      m_pcEncTop->getRDGoOnSbacCoder()->setBitstream(&tempBitCounter);
    26062606      m_pcSAO->initRDOCabacCoder(m_pcEncTop->getRDGoOnSbacCoder(), pcSlice);
    2607       m_pcSAO->SAOProcess(pcPic, sliceEnabled, pcPic->getSlice(0)->getLambdas(), m_pcCfg->getTestSAODisableAtPictureLevel(), m_pcCfg->getSaoEncodingRate(), m_pcCfg->getSaoEncodingRateChroma()
    2608 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    2609                           , m_pcCfg->getSaoCtuBoundary()
    2610 #endif
    2611                          );
     2607      m_pcSAO->SAOProcess(pcPic, sliceEnabled, pcPic->getSlice(0)->getLambdas(), m_pcCfg->getTestSAODisableAtPictureLevel(), m_pcCfg->getSaoEncodingRate(), m_pcCfg->getSaoEncodingRateChroma(), m_pcCfg->getSaoCtuBoundary());
    26122608      m_pcSAO->PCMLFDisableProcess(pcPic);
    26132609      m_pcEncTop->getRDGoOnSbacCoder()->setBitstream(NULL);
  • branches/SHM-dev/source/Lib/TLibEncoder/TEncSampleAdaptiveOffset.cpp

    r1332 r1344  
    6464  m_pppcBinCoderCABAC = NULL;
    6565  m_statData = NULL;
    66 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    6766  m_preDBFstatData = NULL;
    68 #endif
    6967}
    7068
     
    7472}
    7573
    76 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    7774Void TEncSampleAdaptiveOffset::createEncData(Bool isPreDBFSamplesUsed)
    78 #else
    79 Void TEncSampleAdaptiveOffset::createEncData()
    80 #endif
    8175{
    8276
     
    111105    }
    112106  }
    113 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    114107  if(isPreDBFSamplesUsed)
    115108  {
     
    125118
    126119  }
    127 #endif
    128120
    129121  ::memset(m_saoDisabledRate, 0, sizeof(m_saoDisabledRate));
     
    137129    m_skipLinesB[COMPONENT_Cb][typeIdc]= m_skipLinesB[COMPONENT_Cr][typeIdc]= 2;
    138130
    139 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    140131    if(isPreDBFSamplesUsed)
    141132    {
     
    187178      }
    188179    }
    189 #endif
    190180  }
    191181
     
    224214    delete[] m_statData; m_statData = NULL;
    225215  }
    226 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    227216  if(m_preDBFstatData != NULL)
    228217  {
     
    237226    delete[] m_preDBFstatData; m_preDBFstatData = NULL;
    238227  }
    239 
    240 #endif
    241228}
    242229
     
    252239
    253240
    254 Void TEncSampleAdaptiveOffset::SAOProcess(TComPic* pPic, Bool* sliceEnabled, const Double *lambdas, const Bool bTestSAODisableAtPictureLevel, const Double saoEncodingRate, const Double saoEncodingRateChroma
    255 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    256                                          , Bool isPreDBFSamplesUsed
    257 #endif
    258                                           )
     241Void TEncSampleAdaptiveOffset::SAOProcess(TComPic* pPic, Bool* sliceEnabled, const Double *lambdas, const Bool bTestSAODisableAtPictureLevel, const Double saoEncodingRate, const Double saoEncodingRateChroma, Bool isPreDBFSamplesUsed )
    259242{
    260243  TComPicYuv* orgYuv= pPic->getPicYuvOrg();
     
    268251  //collect statistics
    269252  getStatistics(m_statData, orgYuv, srcYuv, pPic);
    270 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    271253  if(isPreDBFSamplesUsed)
    272254  {
    273255    addPreDBFStatistics(m_statData);
    274256  }
    275 #endif
    276257  //slice on/off
    277258  decidePicParams(sliceEnabled, pPic->getSlice(0)->getDepth(), saoEncodingRate, saoEncodingRateChroma);
     
    283264}
    284265
    285 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    286266Void TEncSampleAdaptiveOffset::getPreDBFStatistics(TComPic* pPic)
    287267{
     
    303283}
    304284
    305 #endif
    306 
    307 Void TEncSampleAdaptiveOffset::getStatistics(SAOStatData*** blkStats, TComPicYuv* orgYuv, TComPicYuv* srcYuv, TComPic* pPic
    308 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    309                           , Bool isCalculatePreDeblockSamples
    310 #endif
    311                           )
     285Void TEncSampleAdaptiveOffset::getStatistics(SAOStatData*** blkStats, TComPicYuv* orgYuv, TComPicYuv* srcYuv, TComPic* pPic, Bool isCalculatePreDeblockSamples)
    312286{
    313287  Bool isLeftAvail,isRightAvail,isAboveAvail,isBelowAvail,isAboveLeftAvail,isAboveRightAvail,isBelowLeftAvail,isBelowRightAvail;
     
    353327                , srcBlk, orgBlk, srcStride, orgStride, (width  >> componentScaleX), (height >> componentScaleY)
    354328                , isLeftAvail,  isRightAvail, isAboveAvail, isBelowAvail, isAboveLeftAvail, isAboveRightAvail
    355 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    356329                , isCalculatePreDeblockSamples
    357 #endif
    358330                );
    359331
     
    933905                        , Pel* srcBlk, Pel* orgBlk, Int srcStride, Int orgStride, Int width, Int height
    934906                        , Bool isLeftAvail,  Bool isRightAvail, Bool isAboveAvail, Bool isBelowAvail, Bool isAboveLeftAvail, Bool isAboveRightAvail
    935 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    936907                        , Bool isCalculatePreDeblockSamples
    937 #endif
    938908                        )
    939909{
     
    980950        count+=2;
    981951        endY   = (isBelowAvail) ? (height - skipLinesB[typeIdx]) : height;
    982 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    983952        startX = (!isCalculatePreDeblockSamples) ? (isLeftAvail  ? 0 : 1)
    984953                                                 : (isRightAvail ? (width - skipLinesR[typeIdx]) : (width - 1))
    985954                                                 ;
    986 #else
    987         startX = isLeftAvail ? 0 : 1;
    988 #endif
    989 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    990955        endX   = (!isCalculatePreDeblockSamples) ? (isRightAvail ? (width - skipLinesR[typeIdx]) : (width - 1))
    991956                                                 : (isRightAvail ? width : (width - 1))
    992957                                                 ;
    993 #else
    994         endX   = isRightAvail ? (width - skipLinesR[typeIdx]): (width - 1);
    995 #endif
    996958        for (y=0; y<endY; y++)
    997959        {
     
    1009971          orgLine  += orgStride;
    1010972        }
    1011 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    1012973        if(isCalculatePreDeblockSamples)
    1013974        {
     
    1034995          }
    1035996        }
    1036 #endif
    1037997      }
    1038998      break;
     
    10431003        Char *signUpLine = m_signLineBuf1;
    10441004
    1045 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    10461005        startX = (!isCalculatePreDeblockSamples) ? 0
    10471006                                                 : (isRightAvail ? (width - skipLinesR[typeIdx]) : width)
    10481007                                                 ;
    1049 #endif
    10501008        startY = isAboveAvail ? 0 : 1;
    1051 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    10521009        endX   = (!isCalculatePreDeblockSamples) ? (isRightAvail ? (width - skipLinesR[typeIdx]) : width)
    10531010                                                 : width
    10541011                                                 ;
    1055 #else
    1056         endX   = isRightAvail ? (width - skipLinesR[typeIdx]) : width ;
    1057 #endif
    10581012        endY   = isBelowAvail ? (height - skipLinesB[typeIdx]) : (height - 1);
    10591013        if (!isAboveAvail)
     
    10641018
    10651019        Pel* srcLineAbove = srcLine - srcStride;
    1066 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    10671020        for (x=startX; x<endX; x++)
    1068 #else
    1069         for (x=0; x< endX; x++)
    1070 #endif
    10711021        {
    10721022          signUpLine[x] = (Char)sgn(srcLine[x] - srcLineAbove[x]);
     
    10781028          srcLineBelow = srcLine + srcStride;
    10791029
    1080 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    10811030          for (x=startX; x<endX; x++)
    1082 #else
    1083           for (x=0; x<endX; x++)
    1084 #endif
    10851031          {
    10861032            signDown  = (Char)sgn(srcLine[x] - srcLineBelow[x]);
     
    10941040          orgLine += orgStride;
    10951041        }
    1096 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    10971042        if(isCalculatePreDeblockSamples)
    10981043        {
     
    11181063          }
    11191064        }
    1120 #endif
    11211065
    11221066      }
     
    11311075        signDownLine= m_signLineBuf2;
    11321076
    1133 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    11341077        startX = (!isCalculatePreDeblockSamples) ? (isLeftAvail  ? 0 : 1)
    11351078                                                 : (isRightAvail ? (width - skipLinesR[typeIdx]) : (width - 1))
    11361079                                                 ;
    1137 #else
    1138         startX = isLeftAvail ? 0 : 1 ;
    1139 #endif
    1140 
    1141 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
     1080
    11421081        endX   = (!isCalculatePreDeblockSamples) ? (isRightAvail ? (width - skipLinesR[typeIdx]): (width - 1))
    11431082                                                 : (isRightAvail ? width : (width - 1))
    11441083                                                 ;
    1145 #else
    1146         endX   = isRightAvail ? (width - skipLinesR[typeIdx]): (width - 1);
    1147 #endif
    11481084        endY   = isBelowAvail ? (height - skipLinesB[typeIdx]) : (height - 1);
    11491085
     
    11571093        //1st line
    11581094        Pel* srcLineAbove = srcLine - srcStride;
    1159 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    11601095        firstLineStartX = (!isCalculatePreDeblockSamples) ? (isAboveLeftAvail ? 0    : 1) : startX;
    11611096        firstLineEndX   = (!isCalculatePreDeblockSamples) ? (isAboveAvail     ? endX : 1) : endX;
    1162 #else
    1163         firstLineStartX = isAboveLeftAvail ? 0    : 1;
    1164         firstLineEndX   = isAboveAvail     ? endX : 1;
    1165 #endif
    11661097        for(x=firstLineStartX; x<firstLineEndX; x++)
    11671098        {
     
    11971128          orgLine += orgStride;
    11981129        }
    1199 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    12001130        if(isCalculatePreDeblockSamples)
    12011131        {
     
    12211151          }
    12221152        }
    1223 #endif
    12241153      }
    12251154      break;
     
    12301159        Char *signUpLine = m_signLineBuf1+1;
    12311160
    1232 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    12331161        startX = (!isCalculatePreDeblockSamples) ? (isLeftAvail  ? 0 : 1)
    12341162                                                 : (isRightAvail ? (width - skipLinesR[typeIdx]) : (width - 1))
    12351163                                                 ;
    1236 #else
    1237         startX = isLeftAvail ? 0 : 1;
    1238 #endif
    1239 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    12401164        endX   = (!isCalculatePreDeblockSamples) ? (isRightAvail ? (width - skipLinesR[typeIdx]) : (width - 1))
    12411165                                                 : (isRightAvail ? width : (width - 1))
    12421166                                                 ;
    1243 #else
    1244         endX   = isRightAvail ? (width - skipLinesR[typeIdx]) : (width - 1);
    1245 #endif
    12461167        endY   = isBelowAvail ? (height - skipLinesB[typeIdx]) : (height - 1);
    12471168
     
    12561177        //first line
    12571178        Pel* srcLineAbove = srcLine - srcStride;
    1258 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    12591179        firstLineStartX = (!isCalculatePreDeblockSamples) ? (isAboveAvail ? startX : endX)
    12601180                                                          : startX
     
    12631183                                                          : endX
    12641184                                                          ;
    1265 #else
    1266         firstLineStartX = isAboveAvail ? startX : endX;
    1267         firstLineEndX   = (!isRightAvail && isAboveRightAvail) ? width : endX;
    1268 #endif
    12691185        for(x=firstLineStartX; x<firstLineEndX; x++)
    12701186        {
     
    12961212          orgLine  += orgStride;
    12971213        }
    1298 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    12991214        if(isCalculatePreDeblockSamples)
    13001215        {
     
    13201235          }
    13211236        }
    1322 #endif
    13231237      }
    13241238      break;
    13251239    case SAO_TYPE_BO:
    13261240      {
    1327 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    13281241        startX = (!isCalculatePreDeblockSamples)?0
    13291242                                                :( isRightAvail?(width- skipLinesR[typeIdx]):width)
     
    13321245                                                :width
    13331246                                                ;
    1334 #else
    1335         endX = isRightAvail ? (width- skipLinesR[typeIdx]) : width;
    1336 #endif
    13371247        endY = isBelowAvail ? (height- skipLinesB[typeIdx]) : height;
    13381248        Int shiftBits = channelBitDepth - NUM_SAO_BO_CLASSES_LOG2;
    13391249        for (y=0; y< endY; y++)
    13401250        {
    1341 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    13421251          for (x=startX; x< endX; x++)
    1343 #else
    1344           for (x=0; x< endX; x++)
    1345 #endif
    13461252          {
    13471253
     
    13531259          orgLine += orgStride;
    13541260        }
    1355 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    13561261        if(isCalculatePreDeblockSamples)
    13571262        {
     
    13761281          }
    13771282        }
    1378 #endif
    13791283      }
    13801284      break;
  • branches/SHM-dev/source/Lib/TLibEncoder/TEncSampleAdaptiveOffset.h

    r1332 r1344  
    8282    return *this;
    8383  }
    84 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    8584  const SAOStatData& operator+= (const SAOStatData& src)
    8685  {
     
    9291    return *this;
    9392  }
    94 #endif
    9593};
    9694
     
    102100
    103101  //interface
    104 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    105102  Void createEncData(Bool isPreDBFSamplesUsed);
    106 #else
    107   Void createEncData();
    108 #endif
    109103  Void destroyEncData();
    110104  Void initRDOCabacCoder(TEncSbac* pcRDGoOnSbacCoder, TComSlice* pcSlice) ;
    111   Void SAOProcess(TComPic* pPic, Bool* sliceEnabled, const Double *lambdas, const Bool bTestSAODisableAtPictureLevel, const Double saoEncodingRate, const Double saoEncodingRateChroma
    112 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    113                 , Bool isPreDBFSamplesUsed
    114 #endif
    115                 );
     105  Void SAOProcess(TComPic* pPic, Bool* sliceEnabled, const Double *lambdas, const Bool bTestSAODisableAtPictureLevel, const Double saoEncodingRate, const Double saoEncodingRateChroma, Bool isPreDBFSamplesUsed);
    116106public: //methods
    117 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    118107  Void getPreDBFStatistics(TComPic* pPic);
    119 #endif
    120108private: //methods
    121   Void getStatistics(SAOStatData*** blkStats, TComPicYuv* orgYuv, TComPicYuv* srcYuv,TComPic* pPic
    122 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    123                    , Bool isCalculatePreDeblockSamples = false
    124 #endif
    125                    );
     109  Void getStatistics(SAOStatData*** blkStats, TComPicYuv* orgYuv, TComPicYuv* srcYuv,TComPic* pPic, Bool isCalculatePreDeblockSamples = false);
    126110  Void decidePicParams(Bool* sliceEnabled, Int picTempLayer, const Double saoEncodingRate, const Double saoEncodingRateChroma);
    127111  Void decideBlkParams(TComPic* pic, Bool* sliceEnabled, SAOStatData*** blkStats, TComPicYuv* srcYuv, TComPicYuv* resYuv, SAOBlkParam* reconParams, SAOBlkParam* codedParams, const Bool bTestSAODisableAtPictureLevel, const Double saoEncodingRate, const Double saoEncodingRateChroma);
    128   Void getBlkStats(const ComponentID compIdx, const Int channelBitDepth, SAOStatData* statsDataTypes, Pel* srcBlk, Pel* orgBlk, Int srcStride, Int orgStride, Int width, Int height, Bool isLeftAvail,  Bool isRightAvail, Bool isAboveAvail, Bool isBelowAvail, Bool isAboveLeftAvail, Bool isAboveRightAvail
    129 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    130                   , Bool isCalculatePreDeblockSamples
    131 #endif
    132                   );
     112  Void getBlkStats(const ComponentID compIdx, const Int channelBitDepth, SAOStatData* statsDataTypes, Pel* srcBlk, Pel* orgBlk, Int srcStride, Int orgStride, Int width, Int height, Bool isLeftAvail,  Bool isRightAvail, Bool isAboveAvail, Bool isBelowAvail, Bool isAboveLeftAvail, Bool isAboveRightAvail, Bool isCalculatePreDeblockSamples);
    133113  Void deriveModeNewRDO(const BitDepths &bitDepths, Int ctuRsAddr, SAOBlkParam* mergeList[NUM_SAO_MERGE_TYPES], Bool* sliceEnabled, SAOStatData*** blkStats, SAOBlkParam& modeParam, Double& modeNormCost, TEncSbac** cabacCoderRDO, Int inCabacLabel);
    134114  Void deriveModeMergeRDO(const BitDepths &bitDepths, Int ctuRsAddr, SAOBlkParam* mergeList[NUM_SAO_MERGE_TYPES], Bool* sliceEnabled, SAOStatData*** blkStats, SAOBlkParam& modeParam, Double& modeNormCost, TEncSbac** cabacCoderRDO, Int inCabacLabel);
     
    137117  inline Int64 estSaoDist(Int64 count, Int64 offset, Int64 diffSum, Int shift);
    138118  inline Int estIterOffset(Int typeIdx, Double lambda, Int offsetInput, Int64 count, Int64 diffSum, Int shift, Int bitIncrease, Int64& bestDist, Double& bestCost, Int offsetTh );
    139 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    140119  Void addPreDBFStatistics(SAOStatData*** blkStats);
    141 #endif
    142120private: //members
    143121  //for RDO
     
    153131  //statistics
    154132  SAOStatData***         m_statData; //[ctu][comp][classes]
    155 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    156133  SAOStatData***         m_preDBFstatData;
    157 #endif
    158134  Double                 m_saoDisabledRate[MAX_NUM_COMPONENT][MAX_TLAYER];
    159135  Int                    m_skipLinesR[MAX_NUM_COMPONENT][NUM_SAO_NEW_TYPES];
  • branches/SHM-dev/source/Lib/TLibEncoder/TEncTop.cpp

    r1339 r1344  
    122122  {
    123123    m_cEncSAO.create( getSourceWidth(), getSourceHeight(), m_chromaFormatIDC, m_maxCUWidth, m_maxCUHeight, m_maxTotalCUDepth, m_log2SaoOffsetScale[CHANNEL_TYPE_LUMA], m_log2SaoOffsetScale[CHANNEL_TYPE_CHROMA] );
    124 #if SAO_ENCODE_ALLOW_USE_PREDEBLOCK
    125124    m_cEncSAO.createEncData(getSaoCtuBoundary());
    126 #else
    127     m_cEncSAO.createEncData();
    128 #endif
    129125  }
    130126#if ADAPTIVE_QP_SELECTION
Note: See TracChangeset for help on using the changeset viewer.