From 5f02757eef51dc834401e2ba5500312a9edab95e Mon Sep 17 00:00:00 2001 From: mayeut Date: Thu, 10 Sep 2015 00:39:23 +0200 Subject: Correct lossless issue on linux x86 Update uclouvain/openjpeg#571 --- src/lib/openjp2/tcd.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/lib') diff --git a/src/lib/openjp2/tcd.c b/src/lib/openjp2/tcd.c index 8f1c9410..df9272ff 100644 --- a/src/lib/openjp2/tcd.c +++ b/src/lib/openjp2/tcd.c @@ -268,7 +268,7 @@ void opj_tcd_makelayer( opj_tcd_t *tcd, n = passno + 1; continue; } - if (dd / dr >= thresh) + if (dd / dr > thresh) n = passno + 1; } @@ -565,7 +565,7 @@ OPJ_BOOL opj_tcd_rateallocate( opj_tcd_t *tcd, opj_t2_destroy(t2); } else { success = OPJ_TRUE; - goodthresh = min; + goodthresh = min - DBL_MAX; /* do not rely on float equality for lossless transform */ } if (!success) { -- cgit v1.2.3 From ccdce606f1baa945e5c717064bc17e8218b7cb29 Mon Sep 17 00:00:00 2001 From: Matthieu Darbois Date: Thu, 10 Sep 2015 15:10:14 +0200 Subject: Fix threshold calculation It doesn't change the outcome of the test suite, that's weird... --- src/lib/openjp2/tcd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/lib') diff --git a/src/lib/openjp2/tcd.c b/src/lib/openjp2/tcd.c index df9272ff..d227e388 100644 --- a/src/lib/openjp2/tcd.c +++ b/src/lib/openjp2/tcd.c @@ -565,7 +565,7 @@ OPJ_BOOL opj_tcd_rateallocate( opj_tcd_t *tcd, opj_t2_destroy(t2); } else { success = OPJ_TRUE; - goodthresh = min - DBL_MAX; /* do not rely on float equality for lossless transform */ + goodthresh = min - DBL_EPSILON; /* do not rely on float equality for lossless transform */ } if (!success) { -- cgit v1.2.3 From ee0f3138482fc5ef44f92e6164206bc8df34efe4 Mon Sep 17 00:00:00 2001 From: Matthieu Darbois Date: Thu, 10 Sep 2015 15:46:51 +0200 Subject: Update check in opj_tcd_makelayer to be robust to different float precisions --- src/lib/openjp2/tcd.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/lib') diff --git a/src/lib/openjp2/tcd.c b/src/lib/openjp2/tcd.c index d227e388..32db260b 100644 --- a/src/lib/openjp2/tcd.c +++ b/src/lib/openjp2/tcd.c @@ -268,7 +268,7 @@ void opj_tcd_makelayer( opj_tcd_t *tcd, n = passno + 1; continue; } - if (dd / dr > thresh) + if (thresh - (dd / dr) <= DBL_EPSILON) /* do not rely on float equality, check with DBL_EPSILON margin */ n = passno + 1; } @@ -565,7 +565,7 @@ OPJ_BOOL opj_tcd_rateallocate( opj_tcd_t *tcd, opj_t2_destroy(t2); } else { success = OPJ_TRUE; - goodthresh = min - DBL_EPSILON; /* do not rely on float equality for lossless transform */ + goodthresh = min; } if (!success) { -- cgit v1.2.3 From bac2c9e0a37a79a35e39cbe18572ec40bcfc3f29 Mon Sep 17 00:00:00 2001 From: Matthieu Darbois Date: Fri, 11 Sep 2015 14:17:30 +0200 Subject: Change test in opj_tcd_makelayer Remove float equality test. Such a test has no meaning. --- src/lib/openjp2/tcd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/lib') diff --git a/src/lib/openjp2/tcd.c b/src/lib/openjp2/tcd.c index 32db260b..2fccff1c 100644 --- a/src/lib/openjp2/tcd.c +++ b/src/lib/openjp2/tcd.c @@ -268,7 +268,7 @@ void opj_tcd_makelayer( opj_tcd_t *tcd, n = passno + 1; continue; } - if (thresh - (dd / dr) <= DBL_EPSILON) /* do not rely on float equality, check with DBL_EPSILON margin */ + if (thresh - (dd / dr) < DBL_EPSILON) /* do not rely on float equality, check with DBL_EPSILON margin */ n = passno + 1; } -- cgit v1.2.3