Changeset 873 in SHVCSoftware for branches/SHM-dev/source/Lib/TLibDecoder


Ignore:
Timestamp:
21 Aug 2014, 03:10:10 (11 years ago)
Author:
sharp
Message:

Resampling bugfix -- (1) fix resampling bypass flag, (2) conformance check on resampling params
(Macro: RESAMPLING_FIX)

From: Tomoyuki Yamamoto <yamamoto.tomoyuki@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/SHM-dev/source/Lib/TLibDecoder/TDecTop.cpp

    r869 r873  
    381381#if REF_REGION_OFFSET
    382382        const Window refEL = pcSlice->getPPS()->getRefLayerWindowForLayer(pcSlice->getVPS()->getRefLayerId(m_layerId, i));
     383#if RESAMPLING_FIX
     384        Bool equalOffsets = scalEL.hasEqualOffset(refEL);
     385#if R0209_GENERIC_PHASE
     386        Bool zeroPhase = pcSlice->getPPS()->hasZeroResamplingPhase(pcSlice->getVPS()->getRefLayerId(m_layerId, i));
     387#endif
     388#else
    383389        Bool zeroOffsets = ( scalEL.getWindowLeftOffset() == 0 && scalEL.getWindowRightOffset() == 0 && scalEL.getWindowTopOffset() == 0 && scalEL.getWindowBottomOffset() == 0
    384390                             && refEL.getWindowLeftOffset() == 0 && refEL.getWindowRightOffset() == 0 && refEL.getWindowTopOffset() == 0 && refEL.getWindowBottomOffset() == 0 );
     391#endif
    385392#else
    386393        Bool zeroOffsets = ( scalEL.getWindowLeftOffset() == 0 && scalEL.getWindowRightOffset() == 0 && scalEL.getWindowTopOffset() == 0 && scalEL.getWindowBottomOffset() == 0 );
     
    399406        Bool sameBitDepths = ( g_bitDepthYLayer[m_layerId] == g_bitDepthYLayer[refLayerId] ) && ( g_bitDepthCLayer[m_layerId] == g_bitDepthCLayer[refLayerId] );
    400407
    401         if( pcPicYuvRecBase->getWidth() != pcSlice->getPicWidthInLumaSamples() || pcPicYuvRecBase->getHeight() != pcSlice->getPicHeightInLumaSamples() || !zeroOffsets || !sameBitDepths
     408        if( pcPicYuvRecBase->getWidth() != pcSlice->getPicWidthInLumaSamples() || pcPicYuvRecBase->getHeight() != pcSlice->getPicHeightInLumaSamples() || !sameBitDepths
     409#if REF_REGION_OFFSET && RESAMPLING_FIX
     410          || !equalOffsets
     411#if R0209_GENERIC_PHASE
     412          || !zeroPhase
     413#endif
     414#else
     415          || !zeroOffsets
     416#endif
    402417#if Q0048_CGS_3D_ASYMLUT
    403418          || pcSlice->getPPS()->getCGSFlag() > 0
     
    408423          )
    409424#else
    410         if(pcPicYuvRecBase->getWidth() != pcSlice->getPicWidthInLumaSamples() || pcPicYuvRecBase->getHeight() != pcSlice->getPicHeightInLumaSamples() || !zeroOffsets )
    411 #endif
    412 #else
    413         if(pcPicYuvRecBase->getWidth() != pcSlice->getSPS()->getPicWidthInLumaSamples() || pcPicYuvRecBase->getHeight() != pcSlice->getSPS()->getPicHeightInLumaSamples() || !zeroOffsets )
     425        if(pcPicYuvRecBase->getWidth() != pcSlice->getPicWidthInLumaSamples() || pcPicYuvRecBase->getHeight() != pcSlice->getPicHeightInLumaSamples()
     426#if REF_REGION_OFFSET && RESAMPLING_FIX
     427          || !equalOffsets
     428#if R0209_GENERIC_PHASE
     429          || !zeroPhase
     430#endif
     431#else
     432          || !zeroOffsets
     433#endif
     434        )
     435#endif
     436#else
     437        if(pcPicYuvRecBase->getWidth() != pcSlice->getSPS()->getPicWidthInLumaSamples() || pcPicYuvRecBase->getHeight() != pcSlice->getSPS()->getPicHeightInLumaSamples()
     438#if REF_REGION_OFFSET && RESAMPLING_FIX
     439          || !equalOffsets
     440#if R0209_GENERIC_PHASE
     441          || !zeroPhase
     442#endif
     443#else
     444          || !zeroOffsets
     445#endif
     446        )
    414447#endif
    415448        {
     
    19742007        Int widthEL   = pcPic->getPicYuvRec()->getWidth()  - scalEL.getWindowLeftOffset() - scalEL.getWindowRightOffset();
    19752008        Int heightEL  = pcPic->getPicYuvRec()->getHeight() - scalEL.getWindowTopOffset()  - scalEL.getWindowBottomOffset();
     2009
     2010#if RESAMPLING_FIX
     2011#if REF_REGION_OFFSET
     2012        // conformance check: the values of RefLayerRegionWidthInSamplesY, RefLayerRegionHeightInSamplesY, ScaledRefRegionWidthInSamplesY and ScaledRefRegionHeightInSamplesY shall be greater than 0
     2013        assert(widthEL > 0 && heightEL > 0 && widthBL > 0 && widthEL > 0);
     2014
     2015        // conformance check: ScaledRefRegionWidthInSamplesY shall be greater or equal to RefLayerRegionWidthInSamplesY and ScaledRefRegionHeightInSamplesY shall be greater or equal to RefLayerRegionHeightInSamplesY
     2016        assert(widthEL >= widthBL && heightEL >= heightBL);
     2017
     2018#if R0209_GENERIC_PHASE
     2019        // conformance check: when ScaledRefRegionWidthInSamplesY is equal to RefLayerRegionWidthInSamplesY, PhaseHorY shall be equal to 0, when ScaledRefRegionWidthInSamplesC is equal to RefLayerRegionWidthInSamplesC, PhaseHorC shall be equal to 0, when ScaledRefRegionHeightInSamplesY is equal to RefLayerRegionHeightInSamplesY, PhaseVerY shall be equal to 0, and when ScaledRefRegionHeightInSamplesC is equal to RefLayerRegionHeightInSamplesC, PhaseVerC shall be equal to 0.
     2020        Int phaseHorLuma   = pcSlice->getPPS()->getPhaseHorLuma(refLayerIdc);
     2021        Int phaseVerLuma   = pcSlice->getPPS()->getPhaseVerLuma(refLayerIdc);
     2022        Int phaseHorChroma = pcSlice->getPPS()->getPhaseHorChroma(refLayerIdc);
     2023        Int phaseVerChroma = pcSlice->getPPS()->getPhaseVerChroma(refLayerIdc);
     2024        assert( ( (widthEL  != widthBL)  || (phaseHorLuma == 0 && phaseHorChroma == 0) )
     2025             && ( (heightEL != heightBL) || (phaseVerLuma == 0 && phaseVerChroma == 0) ) );
     2026#endif
     2027#endif
     2028#endif
    19762029
    19772030        g_mvScalingFactor[refLayerIdc][0] = widthEL  == widthBL  ? 4096 : Clip3(-4096, 4095, ((widthEL  << 8) + (widthBL  >> 1)) / widthBL);
Note: See TracChangeset for help on using the changeset viewer.