Ticket #734: fix_RPR.diff

File fix_RPR.diff, 4.5 KB (added by Vadim, 4 years ago)
  • source/Lib/CommonLib/InterPrediction.cpp

     source/Lib/CommonLib/InterPrediction.cpp | 6 +++---
     source/Lib/CommonLib/Picture.cpp         | 2 ++
     source/Lib/CommonLib/Picture.h           | 8 ++++++--
     source/Lib/CommonLib/Slice.cpp           | 6 +++++-
     4 files changed, 16 insertions(+), 6 deletions(-)
    
    diff --git a/source/Lib/CommonLib/InterPrediction.cpp b/source/Lib/CommonLib/InterPrediction.cpp
    index e5f4322c..111ddb5a 100644
    a b void InterPrediction::xSubPuMC( PredictionUnit& pu, PelUnitBuf& predBuf, const R 
    305305  int  fstStep = (!verMC ? puHeight : puWidth);
    306306  int  secStep = (!verMC ? puWidth : puHeight);
    307307
    308   pu.refIdx[0] = 0; pu.refIdx[1] = pu.cs->slice->getSliceType() == B_SLICE ? 0 : -1;
    309   bool scaled = !PU::isRefPicSameSize( pu );
    310 
    311308  m_subPuMC = true;
    312309
    313310  for (int fstDim = fstStart; fstDim < fstEnd; fstDim += fstStep)
    void InterPrediction::xSubPuMC( PredictionUnit& pu, PelUnitBuf& predBuf, const R 
    324321      while (later < secEnd)
    325322      {
    326323        const MotionInfo &laterMi = !verMC ? pu.getMotionInfo(Position{ later, fstDim }) : pu.getMotionInfo(Position{ fstDim, later });
     324
     325        bool scaled = ( curMi.refIdx[0] < 0 ? false : pu.cs->slice->getScalingRatio( REF_PIC_LIST_0, curMi.refIdx[0] ) != SCALE_1X ) || ( curMi.refIdx[1] < 0 ? false : pu.cs->slice->getScalingRatio( REF_PIC_LIST_1, curMi.refIdx[1] ) != SCALE_1X );
     326
    327327        if (!scaled && laterMi == curMi)
    328328        {
    329329          length += secStep;
  • source/Lib/CommonLib/Picture.cpp

    diff --git a/source/Lib/CommonLib/Picture.cpp b/source/Lib/CommonLib/Picture.cpp
    index b722229d..e22d6e88 100644
    a b void Picture::finalInit( const SPS& sps, const PPS& pps, APS** alfApss, APS* lmc 
    982982  cs->scalinglistAps = scalingListAps;
    983983  cs->pcv     = pps.pcv;
    984984  m_conformanceWindow = pps.getConformanceWindow();
     985  m_picWidthInLumaSamples = pps.getPicWidthInLumaSamples();
     986  m_picHeightInLumaSamples = pps.getPicHeightInLumaSamples();
    985987
    986988  brickMap = new BrickMap;
    987989  brickMap->create( sps, pps );
  • source/Lib/CommonLib/Picture.h

    diff --git a/source/Lib/CommonLib/Picture.h b/source/Lib/CommonLib/Picture.h
    index 3f966660..bf5031c5 100644
    a b struct Picture : public UnitArea 
    259259
    260260private:
    261261  Window        m_conformanceWindow;
     262  uint32_t      m_picWidthInLumaSamples;
     263  uint32_t      m_picHeightInLumaSamples;
    262264
    263265public:
    264266  bool m_bIsBorderExtended;
    public: 
    299301  std::deque<Slice*> slices;
    300302  SEIMessages        SEIs;
    301303
    302   uint32_t           getPicWidthInLumaSamples() const                                { return  getRecoBuf( COMPONENT_Y ).width; }
    303   uint32_t           getPicHeightInLumaSamples() const                               { return  getRecoBuf( COMPONENT_Y ).height; }
     304  uint32_t           getPicWidthInLumaSamples() const                                { return  m_picWidthInLumaSamples;  }
     305  uint32_t           getPicHeightInLumaSamples() const                               { return  m_picHeightInLumaSamples; }
     306  void               setPicWidthInLumaSamples( uint32_t u )                          { m_picWidthInLumaSamples = u;  }
     307  void               setPicHeightInLumaSamples( uint32_t u )                         { m_picHeightInLumaSamples = u; }
    304308
    305309  Window&            getConformanceWindow()                                          { return  m_conformanceWindow; }
    306310  const Window&      getConformanceWindow() const                                    { return  m_conformanceWindow; }
  • source/Lib/CommonLib/Slice.cpp

    diff --git a/source/Lib/CommonLib/Slice.cpp b/source/Lib/CommonLib/Slice.cpp
    index bb648125..ca413325 100644
    a b void Slice::scaleRefPicList( Picture *scaledRefPic[ ], APS** apss, APS* lmcsAps, 
    28872887            scaledRefPic[j]->reconstructed = false;
    28882888            scaledRefPic[j]->referenced = true;
    28892889
    2890             scaledRefPic[ j ]->finalInit( *sps, *pps, apss, lmcsAps, scalingListAps );
     2890            scaledRefPic[j]->finalInit( *sps, *pps, apss, lmcsAps, scalingListAps );
     2891
     2892            // set unscaled picture width and height, scaled reference picture should have unscaled ratio
     2893            scaledRefPic[j]->setPicWidthInLumaSamples( m_apcRefPicList[refList][rIdx]->getPicWidthInLumaSamples() );
     2894            scaledRefPic[j]->setPicHeightInLumaSamples( m_apcRefPicList[refList][rIdx]->getPicHeightInLumaSamples() );
    28912895
    28922896            scaledRefPic[j]->poc = -1;
    28932897