Irreversible decoding: partially revert previous commit, to fix failures in test suite
This commit is contained in:
parent
3cd1305596
commit
adccbc8336
|
@ -2608,6 +2608,14 @@ static void opj_v4dwt_decode_step2(opj_v4_t* l, opj_v4_t* w,
|
||||||
static void opj_v4dwt_decode(opj_v4dwt_t* OPJ_RESTRICT dwt)
|
static void opj_v4dwt_decode(opj_v4dwt_t* OPJ_RESTRICT dwt)
|
||||||
{
|
{
|
||||||
OPJ_INT32 a, b;
|
OPJ_INT32 a, b;
|
||||||
|
/* BUG_WEIRD_TWO_INVK (look for this identifier in tcd.c) */
|
||||||
|
/* Historic value for 2 / opj_invK */
|
||||||
|
/* Normally, we should use invK, but if we do so, we have failures in the */
|
||||||
|
/* conformance test, due to MSE and peak errors significantly higher than */
|
||||||
|
/* accepted value */
|
||||||
|
/* Due to using two_invK instead of invK, we have to compensate in tcd.c */
|
||||||
|
/* the computation of the stepsize for the non LL subbands */
|
||||||
|
const float two_invK = 1.625732422f;
|
||||||
if (dwt->cas == 0) {
|
if (dwt->cas == 0) {
|
||||||
if (!((dwt->dn > 0) || (dwt->sn > 1))) {
|
if (!((dwt->dn > 0) || (dwt->sn > 1))) {
|
||||||
return;
|
return;
|
||||||
|
@ -2625,7 +2633,7 @@ static void opj_v4dwt_decode(opj_v4dwt_t* OPJ_RESTRICT dwt)
|
||||||
opj_v4dwt_decode_step1_sse(dwt->wavelet + a, dwt->win_l_x0, dwt->win_l_x1,
|
opj_v4dwt_decode_step1_sse(dwt->wavelet + a, dwt->win_l_x0, dwt->win_l_x1,
|
||||||
_mm_set1_ps(opj_K));
|
_mm_set1_ps(opj_K));
|
||||||
opj_v4dwt_decode_step1_sse(dwt->wavelet + b, dwt->win_h_x0, dwt->win_h_x1,
|
opj_v4dwt_decode_step1_sse(dwt->wavelet + b, dwt->win_h_x0, dwt->win_h_x1,
|
||||||
_mm_set1_ps(opj_invK));
|
_mm_set1_ps(two_invK));
|
||||||
opj_v4dwt_decode_step2_sse(dwt->wavelet + b, dwt->wavelet + a + 1,
|
opj_v4dwt_decode_step2_sse(dwt->wavelet + b, dwt->wavelet + a + 1,
|
||||||
dwt->win_l_x0, dwt->win_l_x1,
|
dwt->win_l_x0, dwt->win_l_x1,
|
||||||
(OPJ_UINT32)opj_int_min(dwt->sn, dwt->dn - a),
|
(OPJ_UINT32)opj_int_min(dwt->sn, dwt->dn - a),
|
||||||
|
@ -2646,7 +2654,7 @@ static void opj_v4dwt_decode(opj_v4dwt_t* OPJ_RESTRICT dwt)
|
||||||
opj_v4dwt_decode_step1(dwt->wavelet + a, dwt->win_l_x0, dwt->win_l_x1,
|
opj_v4dwt_decode_step1(dwt->wavelet + a, dwt->win_l_x0, dwt->win_l_x1,
|
||||||
opj_K);
|
opj_K);
|
||||||
opj_v4dwt_decode_step1(dwt->wavelet + b, dwt->win_h_x0, dwt->win_h_x1,
|
opj_v4dwt_decode_step1(dwt->wavelet + b, dwt->win_h_x0, dwt->win_h_x1,
|
||||||
opj_invK);
|
two_invK);
|
||||||
opj_v4dwt_decode_step2(dwt->wavelet + b, dwt->wavelet + a + 1,
|
opj_v4dwt_decode_step2(dwt->wavelet + b, dwt->wavelet + a + 1,
|
||||||
dwt->win_l_x0, dwt->win_l_x1,
|
dwt->win_l_x0, dwt->win_l_x1,
|
||||||
(OPJ_UINT32)opj_int_min(dwt->sn, dwt->dn - a),
|
(OPJ_UINT32)opj_int_min(dwt->sn, dwt->dn - a),
|
||||||
|
|
|
@ -1000,7 +1000,11 @@ static INLINE OPJ_BOOL opj_tcd_init_tile(opj_tcd_t *p_tcd, OPJ_UINT32 p_tile_no,
|
||||||
|
|
||||||
{
|
{
|
||||||
/* Table E-1 - Sub-band gains */
|
/* Table E-1 - Sub-band gains */
|
||||||
const OPJ_INT32 log2_gain = (l_band->bandno == 0) ? 0 :
|
/* BUG_WEIRD_TWO_INVK (look for this identifier in dwt.c): */
|
||||||
|
/* the test (!isEncoder && l_tccp->qmfbid == 0) is strongly */
|
||||||
|
/* linked to the use of two_invK instead of invK */
|
||||||
|
const OPJ_INT32 log2_gain = (!isEncoder &&
|
||||||
|
l_tccp->qmfbid == 0) ? 0 : (l_band->bandno == 0) ? 0 :
|
||||||
(l_band->bandno == 3) ? 2 : 1;
|
(l_band->bandno == 3) ? 2 : 1;
|
||||||
|
|
||||||
/* Nominal dynamic range. Equation E-4 */
|
/* Nominal dynamic range. Equation E-4 */
|
||||||
|
|
Loading…
Reference in New Issue