From 7cbf1f6d8d1053e82a876932f47b39e4629764b8 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Wed, 12 Sep 2018 14:24:41 +0200 Subject: [PATCH] Fix calculation of interpolation parameters for negative block shifts, #4774, #4777 --- rtengine/CA_correct_RT.cc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/rtengine/CA_correct_RT.cc b/rtengine/CA_correct_RT.cc index 81fd8d593..a27ee7998 100644 --- a/rtengine/CA_correct_RT.cc +++ b/rtengine/CA_correct_RT.cc @@ -1029,11 +1029,17 @@ float* RawImageSource::CA_correct_RT( //some parameters for the bilinear interpolation shiftvfloor[c] = floor((float)lblockshifts[c>>1][0]); shiftvceil[c] = ceil((float)lblockshifts[c>>1][0]); - shiftvfrac[c] = lblockshifts[c>>1][0] - shiftvfloor[c]; + if (lblockshifts[c>>1][0] < 0.f) { + std::swap(shiftvfloor[c], shiftvceil[c]); + } + shiftvfrac[c] = fabs(lblockshifts[c>>1][0] - shiftvfloor[c]); shifthfloor[c] = floor((float)lblockshifts[c>>1][1]); shifthceil[c] = ceil((float)lblockshifts[c>>1][1]); - shifthfrac[c] = lblockshifts[c>>1][1] - shifthfloor[c]; + if (lblockshifts[c>>1][1] < 0.f) { + std::swap(shifthfloor[c], shifthceil[c]); + } + shifthfrac[c] = fabs(lblockshifts[c>>1][1] - shifthfloor[c]); GRBdir[0][c] = lblockshifts[c>>1][0] > 0 ? 2 : -2; GRBdir[1][c] = lblockshifts[c>>1][1] > 0 ? 2 : -2;