diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2015-06-20 00:41:12 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2015-06-20 00:53:56 +0200 |
commit | 75651cd63f2d7b99fe92fa96eccdd18b7f9c37fe (patch) | |
tree | f53b2589da98098bcab4611b58f84530c5d02ced | |
parent | 7e2bdea764a565ad213f7676e558e5ce305bedef (diff) | |
download | ffmpeg-75651cd63f2d7b99fe92fa96eccdd18b7f9c37fe.tar.gz |
avcodec/jpeg2000dwt: Fix order of operations in integer decomposition wavelets
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavcodec/jpeg2000dwt.c | 66 | ||||
-rw-r--r-- | tests/ref/vsynth/vsynth1-jpeg2000 | 8 | ||||
-rw-r--r-- | tests/ref/vsynth/vsynth1-jpeg2000-97 | 8 | ||||
-rw-r--r-- | tests/ref/vsynth/vsynth2-jpeg2000 | 8 | ||||
-rw-r--r-- | tests/ref/vsynth/vsynth2-jpeg2000-97 | 8 | ||||
-rw-r--r-- | tests/ref/vsynth/vsynth3-jpeg2000 | 8 | ||||
-rw-r--r-- | tests/ref/vsynth/vsynth3-jpeg2000-97 | 8 | ||||
-rw-r--r-- | tests/ref/vsynth/vsynth_lena-jpeg2000 | 8 | ||||
-rw-r--r-- | tests/ref/vsynth/vsynth_lena-jpeg2000-97 | 8 |
9 files changed, 66 insertions, 64 deletions
diff --git a/libavcodec/jpeg2000dwt.c b/libavcodec/jpeg2000dwt.c index ae150fb433..381764f3ad 100644 --- a/libavcodec/jpeg2000dwt.c +++ b/libavcodec/jpeg2000dwt.c @@ -111,22 +111,6 @@ static void dwt_encode53(DWTContext *s, int *t) int *l; av_assert1(!mh && !mv); - // HOR_SD - l = line + mh; - for (lp = 0; lp < lv; lp++){ - int i, j = 0; - - for (i = 0; i < lh; i++) - l[i] = t[w*lp + i]; - - sd_1d53(line, mh, mh + lh); - - // copy back and deinterleave - for (i = mh; i < lh; i+=2, j++) - t[w*lp + j] = l[i]; - for (i = 1-mh; i < lh; i+=2, j++) - t[w*lp + j] = l[i]; - } // VER_SD l = line + mv; @@ -144,6 +128,23 @@ static void dwt_encode53(DWTContext *s, int *t) for (i = 1-mv; i < lv; i+=2, j++) t[w*j + lp] = l[i]; } + + // HOR_SD + l = line + mh; + for (lp = 0; lp < lv; lp++){ + int i, j = 0; + + for (i = 0; i < lh; i++) + l[i] = t[w*lp + i]; + + sd_1d53(line, mh, mh + lh); + + // copy back and deinterleave + for (i = mh; i < lh; i+=2, j++) + t[w*lp + j] = l[i]; + for (i = 1-mh; i < lh; i+=2, j++) + t[w*lp + j] = l[i]; + } } } static void sd_1d97_float(float *p, int i0, int i1) @@ -265,6 +266,23 @@ static void dwt_encode97_int(DWTContext *s, int *t) av_assert1(!mh && !mv); + // VER_SD + l = line + mv; + for (lp = 0; lp < lh; lp++) { + int i, j = 0; + + for (i = 0; i < lv; i++) + l[i] = t[w*i + lp]; + + sd_1d97_int(line, mv, mv + lv); + + // copy back and deinterleave + for (i = mv; i < lv; i+=2, j++) + t[w*j + lp] = ((l[i] * I_LFTG_X) + (1 << 16)) >> 17; + for (i = 1-mv; i < lv; i+=2, j++) + t[w*j + lp] = ((l[i] * I_LFTG_K) + (1 << 16)) >> 17; + } + // HOR_SD l = line + mh; for (lp = 0; lp < lv; lp++){ @@ -282,22 +300,6 @@ static void dwt_encode97_int(DWTContext *s, int *t) t[w*lp + j] = ((l[i] * I_LFTG_K) + (1 << 16)) >> 17; } - // VER_SD - l = line + mv; - for (lp = 0; lp < lh; lp++) { - int i, j = 0; - - for (i = 0; i < lv; i++) - l[i] = t[w*i + lp]; - - sd_1d97_int(line, mv, mv + lv); - - // copy back and deinterleave - for (i = mv; i < lv; i+=2, j++) - t[w*j + lp] = ((l[i] * I_LFTG_X) + (1 << 16)) >> 17; - for (i = 1-mv; i < lv; i+=2, j++) - t[w*j + lp] = ((l[i] * I_LFTG_K) + (1 << 16)) >> 17; - } } } diff --git a/tests/ref/vsynth/vsynth1-jpeg2000 b/tests/ref/vsynth/vsynth1-jpeg2000 index 5a93be04f0..2f7ea3c566 100644 --- a/tests/ref/vsynth/vsynth1-jpeg2000 +++ b/tests/ref/vsynth/vsynth1-jpeg2000 @@ -1,4 +1,4 @@ -5572e09ae6826a5671fc868da4b153f5 *tests/data/fate/vsynth1-jpeg2000.avi -2261220 tests/data/fate/vsynth1-jpeg2000.avi -5cdeb5efd2343994b949718e278819f2 *tests/data/fate/vsynth1-jpeg2000.out.rawvideo -stddev: 5.37 PSNR: 33.53 MAXDIFF: 60 bytes: 7603200/ 7603200 +c742e656f20e6f4dfcf39d3c00a4d78c *tests/data/fate/vsynth1-jpeg2000.avi +2265498 tests/data/fate/vsynth1-jpeg2000.avi +15a8e49f6fd014193bbafd72f84936c7 *tests/data/fate/vsynth1-jpeg2000.out.rawvideo +stddev: 5.36 PSNR: 33.55 MAXDIFF: 61 bytes: 7603200/ 7603200 diff --git a/tests/ref/vsynth/vsynth1-jpeg2000-97 b/tests/ref/vsynth/vsynth1-jpeg2000-97 index a959e3b446..6be35d98d4 100644 --- a/tests/ref/vsynth/vsynth1-jpeg2000-97 +++ b/tests/ref/vsynth/vsynth1-jpeg2000-97 @@ -1,4 +1,4 @@ -26fdfa1bd7c072002ba9a8feefb8092a *tests/data/fate/vsynth1-jpeg2000-97.avi -2200030 tests/data/fate/vsynth1-jpeg2000-97.avi -99f8f9436e6d9d42a71e3d2a90de61d0 *tests/data/fate/vsynth1-jpeg2000-97.out.rawvideo -stddev: 6.21 PSNR: 32.27 MAXDIFF: 60 bytes: 7603200/ 7603200 +0bbcba25aaf987d1719a12c3f6e5a333 *tests/data/fate/vsynth1-jpeg2000-97.avi +2188416 tests/data/fate/vsynth1-jpeg2000-97.avi +9dd595c219b4ab5219a96b08cd18851f *tests/data/fate/vsynth1-jpeg2000-97.out.rawvideo +stddev: 6.19 PSNR: 32.30 MAXDIFF: 57 bytes: 7603200/ 7603200 diff --git a/tests/ref/vsynth/vsynth2-jpeg2000 b/tests/ref/vsynth/vsynth2-jpeg2000 index caedf807b6..0a9df9baa3 100644 --- a/tests/ref/vsynth/vsynth2-jpeg2000 +++ b/tests/ref/vsynth/vsynth2-jpeg2000 @@ -1,4 +1,4 @@ -5118a520a8f776493ee6aeef9849e4a4 *tests/data/fate/vsynth2-jpeg2000.avi -1495578 tests/data/fate/vsynth2-jpeg2000.avi -025b1592f31bc71bb249af7e1124b50b *tests/data/fate/vsynth2-jpeg2000.out.rawvideo -stddev: 5.00 PSNR: 34.14 MAXDIFF: 59 bytes: 7603200/ 7603200 +618d3b5c498a0fde4debce5235fcc334 *tests/data/fate/vsynth2-jpeg2000.avi +1494316 tests/data/fate/vsynth2-jpeg2000.avi +36afd96d6e55bc83166fd615351ba366 *tests/data/fate/vsynth2-jpeg2000.out.rawvideo +stddev: 5.00 PSNR: 34.15 MAXDIFF: 59 bytes: 7603200/ 7603200 diff --git a/tests/ref/vsynth/vsynth2-jpeg2000-97 b/tests/ref/vsynth/vsynth2-jpeg2000-97 index 3bae07d213..0c0782e621 100644 --- a/tests/ref/vsynth/vsynth2-jpeg2000-97 +++ b/tests/ref/vsynth/vsynth2-jpeg2000-97 @@ -1,4 +1,4 @@ -f72998d38afd03608e918a73a122595f *tests/data/fate/vsynth2-jpeg2000-97.avi -1451520 tests/data/fate/vsynth2-jpeg2000-97.avi -3351e4a11b4da2971194be7f571f2655 *tests/data/fate/vsynth2-jpeg2000-97.out.rawvideo -stddev: 5.40 PSNR: 33.47 MAXDIFF: 58 bytes: 7603200/ 7603200 +1894f3c438f817b6101a444e2af430d3 *tests/data/fate/vsynth2-jpeg2000-97.avi +1448224 tests/data/fate/vsynth2-jpeg2000-97.avi +c95f2c7138ec20a6f388d1d945cf0cf4 *tests/data/fate/vsynth2-jpeg2000-97.out.rawvideo +stddev: 5.35 PSNR: 33.56 MAXDIFF: 55 bytes: 7603200/ 7603200 diff --git a/tests/ref/vsynth/vsynth3-jpeg2000 b/tests/ref/vsynth/vsynth3-jpeg2000 index 404cb1884c..0f4c8f481a 100644 --- a/tests/ref/vsynth/vsynth3-jpeg2000 +++ b/tests/ref/vsynth/vsynth3-jpeg2000 @@ -1,4 +1,4 @@ -a9f02a1a91b1c261835ad457a18960e4 *tests/data/fate/vsynth3-jpeg2000.avi -65358 tests/data/fate/vsynth3-jpeg2000.avi -861d660c6618202cbbc70b71d5eae25b *tests/data/fate/vsynth3-jpeg2000.out.rawvideo -stddev: 5.49 PSNR: 33.32 MAXDIFF: 47 bytes: 86700/ 86700 +6a0f2a14f6b4628c8c51c360d7355093 *tests/data/fate/vsynth3-jpeg2000.avi +65348 tests/data/fate/vsynth3-jpeg2000.avi +2d8bd94d558755c47d7e23fd9556e164 *tests/data/fate/vsynth3-jpeg2000.out.rawvideo +stddev: 5.48 PSNR: 33.34 MAXDIFF: 47 bytes: 86700/ 86700 diff --git a/tests/ref/vsynth/vsynth3-jpeg2000-97 b/tests/ref/vsynth/vsynth3-jpeg2000-97 index c0b19c263d..6af082d5c0 100644 --- a/tests/ref/vsynth/vsynth3-jpeg2000-97 +++ b/tests/ref/vsynth/vsynth3-jpeg2000-97 @@ -1,4 +1,4 @@ -696175c8fe6673baa7f91d5e0844c053 *tests/data/fate/vsynth3-jpeg2000-97.avi -66706 tests/data/fate/vsynth3-jpeg2000-97.avi -38058e324177a0ff064b48497ac2af4b *tests/data/fate/vsynth3-jpeg2000-97.out.rawvideo -stddev: 6.26 PSNR: 32.19 MAXDIFF: 54 bytes: 86700/ 86700 +324eac3241a5580725ba817a9d60f3f3 *tests/data/fate/vsynth3-jpeg2000-97.avi +66568 tests/data/fate/vsynth3-jpeg2000-97.avi +eb32ff15b5a23fc29cedd43430e1d46a *tests/data/fate/vsynth3-jpeg2000-97.out.rawvideo +stddev: 6.15 PSNR: 32.35 MAXDIFF: 47 bytes: 86700/ 86700 diff --git a/tests/ref/vsynth/vsynth_lena-jpeg2000 b/tests/ref/vsynth/vsynth_lena-jpeg2000 index 2b2789935c..cbb25b4ea7 100644 --- a/tests/ref/vsynth/vsynth_lena-jpeg2000 +++ b/tests/ref/vsynth/vsynth_lena-jpeg2000 @@ -1,4 +1,4 @@ -f47a18d3e5fc745e79d5677cbf65a66d *tests/data/fate/vsynth_lena-jpeg2000.avi -1137232 tests/data/fate/vsynth_lena-jpeg2000.avi -7630a7f2ae57be5827b4ade8323717e5 *tests/data/fate/vsynth_lena-jpeg2000.out.rawvideo -stddev: 4.41 PSNR: 35.24 MAXDIFF: 58 bytes: 7603200/ 7603200 +90976c5b9539111b33a46b4c882a3cb0 *tests/data/fate/vsynth_lena-jpeg2000.avi +1137854 tests/data/fate/vsynth_lena-jpeg2000.avi +955653ca7a08447e7b1501b444f24562 *tests/data/fate/vsynth_lena-jpeg2000.out.rawvideo +stddev: 4.40 PSNR: 35.25 MAXDIFF: 58 bytes: 7603200/ 7603200 diff --git a/tests/ref/vsynth/vsynth_lena-jpeg2000-97 b/tests/ref/vsynth/vsynth_lena-jpeg2000-97 index bcdb7585dc..ce90be0d99 100644 --- a/tests/ref/vsynth/vsynth_lena-jpeg2000-97 +++ b/tests/ref/vsynth/vsynth_lena-jpeg2000-97 @@ -1,4 +1,4 @@ -718f89507f5dfcf703290b9db796a073 *tests/data/fate/vsynth_lena-jpeg2000-97.avi -1106208 tests/data/fate/vsynth_lena-jpeg2000-97.avi -44f4d7a4cb6b0de932e2538fa75e983c *tests/data/fate/vsynth_lena-jpeg2000-97.out.rawvideo -stddev: 4.91 PSNR: 34.30 MAXDIFF: 54 bytes: 7603200/ 7603200 +aebe3eaa1fa5c6698cd1abc8d0569d7f *tests/data/fate/vsynth_lena-jpeg2000-97.avi +1105382 tests/data/fate/vsynth_lena-jpeg2000-97.avi +32069295493de2b3e348ecbed2ff41ab *tests/data/fate/vsynth_lena-jpeg2000-97.out.rawvideo +stddev: 4.85 PSNR: 34.41 MAXDIFF: 58 bytes: 7603200/ 7603200 |