From 90cff8fad783d22f561558fb6015ab5fad10ac15 Mon Sep 17 00:00:00 2001
From: Brian Heng <brian.heng@broadcom.com>
Date: Fri, 6 Mar 2020 15:29:06 -0800
Subject: [PATCH] Fixes for Q0487 on encode side.

   - Configure scaling window correctly.
   - Use unscaled picture info for isRefScaled determination.
---
 source/Lib/CommonLib/Picture.h   | 4 ++--
 source/Lib/EncoderLib/EncLib.cpp | 4 ++++
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/source/Lib/CommonLib/Picture.h b/source/Lib/CommonLib/Picture.h
index 212a02c61..28440c240 100644
--- a/source/Lib/CommonLib/Picture.h
+++ b/source/Lib/CommonLib/Picture.h
@@ -243,8 +243,8 @@ public:
   Window&            getScalingWindow()                                              { return  m_scalingWindow; }
   const Window&      getScalingWindow()                                        const { return  m_scalingWindow; }
 #if JVET_Q0487_SCALING_WINDOW_ISSUES
-  bool               isRefScaled( const PPS* pps ) const                             { return  getPicWidthInLumaSamples()                 != pps->getPicWidthInLumaSamples()                ||
-                                                                                               getPicHeightInLumaSamples()                != pps->getPicHeightInLumaSamples()               ||
+  bool               isRefScaled( const PPS* pps ) const                             { return  unscaledPic->getPicWidthInLumaSamples()    != pps->getPicWidthInLumaSamples()                ||
+                                                                                               unscaledPic->getPicHeightInLumaSamples()   != pps->getPicHeightInLumaSamples()               ||
                                                                                                getScalingWindow().getWindowLeftOffset()   != pps->getScalingWindow().getWindowLeftOffset()  ||
                                                                                                getScalingWindow().getWindowRightOffset()  != pps->getScalingWindow().getWindowRightOffset() ||
                                                                                                getScalingWindow().getWindowTopOffset()    != pps->getScalingWindow().getWindowTopOffset()   ||
diff --git a/source/Lib/EncoderLib/EncLib.cpp b/source/Lib/EncoderLib/EncLib.cpp
index 69a2daa92..b97a0b312 100644
--- a/source/Lib/EncoderLib/EncLib.cpp
+++ b/source/Lib/EncoderLib/EncLib.cpp
@@ -316,7 +316,11 @@ void EncLib::init( bool isFieldCoding, AUWriterIf* auWriterIf )
     pps.setConformanceWindow( conformanceWindow );
 
     Window scalingWindow;
+#if JVET_Q0487_SCALING_WINDOW_ISSUES
+    scalingWindow.setWindow( 0, ( width - scaledWidth ) / SPS::getWinUnitX( sps0.getChromaFormatIdc() ), 0, ( height - scaledHeight ) / SPS::getWinUnitY( sps0.getChromaFormatIdc() ) );
+#else
     scalingWindow.setWindow( 0, width - scaledWidth, 0, height - scaledHeight );
+#endif
     pps.setScalingWindow( scalingWindow );
 
 #if JVET_Q0179_SCALING_WINDOW_SIZE_CONSTRAINT
-- 
GitLab