From: Steinar H. Gunderson Date: Sat, 21 Feb 2015 14:33:33 +0000 (+0100) Subject: Fix combining in ResampleEffect again. X-Git-Tag: 1.1.3~13 X-Git-Url: https://git.sesse.net/?p=movit;a=commitdiff_plain;h=fe7a508885d19950c43e46dc60db675375f49ffb Fix combining in ResampleEffect again. It was completely broken after the last patch, so we'd effectively never combine. --- diff --git a/resample_effect_test.cpp b/resample_effect_test.cpp index 9082b26..5b620fd 100644 --- a/resample_effect_test.cpp +++ b/resample_effect_test.cpp @@ -96,11 +96,11 @@ TEST(ResampleEffectTest, DownscaleByTwoGetsCorrectPixelCenters) { // the texel center right (everything is nicely symmetric). // The approximate magnitudes have been checked against ImageMagick. float expected_data[size * size] = { - 0.0046, -0.0068, -0.0611, -0.0068, 0.0047, - -0.0068, 0.0100, 0.0895, 0.0100, -0.0068, - -0.0603, 0.0892, 0.7993, 0.0895, -0.0611, - -0.0067, 0.0100, 0.0892, 0.0100, -0.0068, - 0.0045, -0.0067, -0.0603, -0.0068, 0.0046, + 0.0045, -0.0067, -0.0599, -0.0067, 0.0045, + -0.0067, 0.0100, 0.0892, 0.0100, -0.0067, + -0.0599, 0.0890, 0.7925, 0.0892, -0.0599, + -0.0067, 0.0100, 0.0890, 0.0100, -0.0067, + 0.0045, -0.0067, -0.0599, -0.0067, 0.0045, }; float data[size * size * 4], out_data[size * size]; @@ -205,7 +205,7 @@ TEST(ResampleEffectTest, HeavyResampleGetsSumRight) { // Require that we are within 10-bit accuracy. Note that this limit is for // one pass only, but the limit is tight enough that it should be good enough // for 10-bit accuracy even after two passes. - expect_equal(expected_data, out_data, dwidth, dheight, 0.1 / 1023.0); + expect_equal(expected_data, out_data, dwidth, dheight, 0.12 / 1023.0); } TEST(ResampleEffectTest, ReadWholePixelFromLeft) { diff --git a/util.cpp b/util.cpp index 61f3e4d..7fbc67a 100644 --- a/util.cpp +++ b/util.cpp @@ -174,7 +174,7 @@ void combine_two_samples(float w1, float w2, float pos1, float pos2, unsigned si if (rounding_behavior == COMBINE_ROUND_TO_FP16) { // Round to fp16. Note that this might take z outside the 0..1 range. *offset = fp16_to_fp64(fp64_to_fp16(*offset)); - z = (z - pos1) / (pos2 - pos1); + z = (*offset - pos1) / (pos2 - pos1); } else { assert(rounding_behavior == COMBINE_DO_NOT_ROUND); }