Closed gcode-importer closed 9 years ago
This issue can be followed on the openjpeg dashboard :
http://my.cdash.org/testSummary.php?project=237&name=ETS-C1P0-p0_07.j2k-decode&date=2011-08-11
The name of this test is ETS-C1P0-p0_07.j2k-decode and it could be found for trunk
and openjpeg 1.5 branch.
Mickaël
Reported by savmickael on 2011-08-11 16:03:51
I have used OpenJPEG-1.5.0-revision-863.
Problem 1:
==========
[WARNING] SOT marker inconsistency in tile 0: tile-part index greater (0) than number
of tile-parts (0)
This warning tells that '0' is greater than '0'. But the
test condition is:
if (partno >= numparts)
Problem 2:
==========
[ERROR] Expected EPH marker
I have written a trace line into 't2.c':
t2.c:494:hd(0xff,0x92) <== EPH nr 73
t2.c:494:hd(0x06,0x05) <== expected nr 74
[ERROR] Expected EPH marker
I have a simple J2K reader that shows:
Observation 1:
==============
NAME(p0_07.j2k)
LENG(7885684)
ENTER read_jp2c
[0]marker(0xff4f)
soc len(0)
[2]marker(0xff51)
siz len(47)
capabilities(1)
x(0 : 2048) y(0 : 2048)
xt(0 : 128) yt(0 : 128)
nr_components(3)
component[0]signed(1) prec(12) hsep(1) vsep(1)
component[1]signed(1) prec(12) hsep(1) vsep(1)
component[2]signed(1) prec(12) hsep(1) vsep(1)
[51]marker(0xff52)
cod len(12)
[65]marker(0xff5c)
qcd len(13)
[80]marker(0xff64)
com len(16)
R[1](General use (ISO 8859-1 (latin-1) values))
T(Kakadu-3.0.7)
[98]marker(0xff90)
sot tile_nr(0) Psot(9951) TPsot(0) TNsot(0)
len(10)
(...)
[7836303]marker(0xff90)
sot tile_nr(255) Psot(34820) TPsot(0) TNsot(1)
len(10)
and after this tile nr 255:
---------------------------
[7871123]marker(0xff90)
sot tile_nr(0) Psot(14559) TPsot(1) TNsot(2)
len(10)
Observation 2:
==============
[10049]marker(0xff90)
sot tile_nr(1) Psot(23681) TPsot(0) TNsot(1)
len(10)
[10061]marker(0xff58)
plt len(134)
[10197]marker(0xff93)
sod len(0)
[10199]marker(0xff91)
sop data(4)
[10209]marker(0xff92)
eph skip_len(137) <== EPH nr 73
[10348]marker(0xff91)
sop data(3)
[10357]marker(0xff92)
eph skip_len(172) <== EPH nr 74
(...)
winfried
Reported by szukw000 on 2011-08-12 04:42:37
Many thanks Winfried.
Problem 1 is actually a separate problem I should fix aside from this issue. Thanks
for pointing this.
Problem 2 seems to come from the fact that the first tile is divided into 2 tile-parts,
one located at the very beginning of the code-stream and the second one at the very
end (with all the 255 remaining tiles in between).
Attached is a useful file showing the structure of all the code-stream.
Still investigating ...
Antonin
Reported by detonin on 2011-08-12 10:01:07
[98]marker(0xff90)
sot tile_nr(0) Psot(9951) TPsot(0) TNsot(0)
(...)
[10049]marker(0xff90)
sot tile_nr(1) Psot(23681) TPsot(0) TNsot(1)
98 + 9951 => 10049
Is there no possibility to test against the end of the tile?
winfried
Reported by szukw000 on 2011-08-12 17:56:56
tileno(0) is split into two parts.
The first part has a totlen of 9951.
The second part has a totlen of 14559.
j2k.c:1529:j2k_read_eoc
tileno(0) tile_len(24319)
(...)
t2.c:724:ENTER t2_decode_packets
tileno(0) tilelen(24319)
(...)
t2.c:340:ENTER t2_decode_packet len(14942)
t2.c:365:SOP(0xff,0x91)
t2.c:445:bandno(0) cblkno(0)
t2.c:445:bandno(1) cblkno(0)
t2.c:445:bandno(2) cblkno(0)
t2.c:506:bio_numbytes(7)
t2.c:520:EPH(0xff,0x92)
t2.c:743:t2_decode_packet returns(448) len(24319) curlen(9825)
t2.c:733:tileno(0) pino(0) poc.prg(0)
t2.c:340:ENTER t2_decode_packet len(14494)
t2.c:365:SOP(0xff,0x91)
t2.c:445:bandno(0) cblkno(0)
t2.c:506:bio_numbytes(1)
t2.c:520:EPH(0xff,0x92)
t2.c:743:t2_decode_packet returns(9) len(24319) curlen(9834)
t2.c:733:tileno(0) pino(0) poc.prg(0)
t2.c:340:ENTER t2_decode_packet len(14485)
t2.c:365:SOP(0xff,0x91)
t2.c:445:bandno(0) cblkno(0)
t2.c:506:bio_numbytes(2)
t2.c:515:ERR(0x06,0x05)
[ERROR] Expected EPH marker
t2.c:743:t2_decode_packet returns(-999) tilelen(24319) curlen(9834)
-------------------
tileno(0) seems to use the second len value for the first part.
So the pointer runs into tileno(1).
Apart from the different length values: is splitting is allowed?
If yes: could there be a collector?
add to tileno(0)
add to tileno(1)
(...)
add to tileno(255)
add to tileno(0)
winfried
Reported by szukw000 on 2011-08-13 03:52:30
No, I am wrong. The contents of both tile parts are in
one buffer. The pointer does not run into tileno(1).
The len of the first part is 9825 byte.
t2.c:520:[13]EPH(0xff,0x92)
t2.c:743:t2_decode_packet returns(448) tilelen(24319) curlen(9825)
t2.c:733:tileno(0) pino(0) poc.prg(0)
------------ start of second part of tileno(0) ------------
t2.c:340:ENTER t2_decode_packet len(14494)
t2.c:365:[0]SOP(0xff,0x91)
t2.c:445:bandno(0) cblkno(0)
t2.c:506:bio_numbytes(1)
t2.c:520:[7]EPH(0xff,0x92)
t2.c:743:t2_decode_packet returns(9) tilelen(24319) curlen(9834)
t2.c:733:tileno(0) pino(0) poc.prg(0)
t2.c:340:ENTER t2_decode_packet len(14485)
t2.c:365:[0]SOP(0xff,0x91)
t2.c:445:bandno(0) cblkno(0)
t2.c:506:bio_numbytes(2)
t2.c:515:ERR(0x06,0x05)
+2(0xd5,0x80) +4(0xff,0x92) +6(0xe2,0x63)
[ERROR] Expected EPH marker
t2.c:743:t2_decode_packet returns(-999) tilelen(24319) curlen(9834)
[ERROR] tcd_decode: incomplete bistream
ERROR -> j2k_to_image: failed to decode image!
-------------------------------
winfried
Reported by szukw000 on 2011-08-17 18:38:57
In 'j2k_read_sod()' I have sent some values of part2 of
tileno(0) to stderr:
tileno(0)
OLD data(0x812a060) len(9825)
NEW len(14494)
The new data:
[0](0xff,0x91) sop(0xff,0x91)
[1](0x00,0x04) len(4) + data(1)
[2](0x00,0x48) seq_nr(72)(0x00,0x48)
[3](0x80,0xff) eph(0xff,0x92), data(0)
[4](0x92,0xff) sop(0xff,0x91)
[5](0x91,0x00) len(4) + data(6)
[6](0x04,0x00) seq_nr(73)(0x00,0x49)
[7](0x49,0xc1)
[8](0xdd,0x06) ERR((0x06,0x05)) : bio_numbytes(2)
[9](0x05,0xd5)
[10](0x80,0xff) eph((0xff,0x92), data(108)
(...)
winfried
Reported by szukw000 on 2011-08-17 22:44:50
seq 70 and 71, the last two sequences in part 1, have the
'included' flag set; their sum of all 'segs[segno].newlen'
is correct (the same holds for all other before).
seq 72, the first sequence in part 2, does not have the
'included' flag set.
seq 73 has the 'included' flag set. And fails.
'segs[segno].newlen' is 7, 'bio_numbytes()' is 2.
The restart begins at the third byte within the sop:
'0x06'; instead of at the first byte after the sop:
'0xff'.
winfried
Reported by szukw000 on 2011-08-19 02:05:20
p0_07.j2k has two different resno1(i.e. REpoc) values:
j2k.c:1005:TRACE ENTER j2k_read_poc old_nr(0) new_nr(1)
[0]resno0(0) compno0(0) layno1(9) resno1(3) compno1(3) prg(0)
j2k.c:1005:TRACE ENTER j2k_read_poc old_nr(1) new_nr(2)
[1]resno0(0) compno0(0) layno1(9) resno1(8) compno1(3) prg(0)
The first part ends with seqno(71).
The second part starts with seqno(72).
t2.c:720:TRACE ENTER t2_decode_packets
tileno(0) max_pino(1)
t2.c:339:TRACE ENTER t2_decode_packet
resno(0) compno(0) layno(0) precno(0)
t2.c:375:SOP(0xff,0x91) len(4) seqno(0)
(...)
t2.c:339:TRACE ENTER t2_decode_packet
resno(2) compno(2) layno(7) precno(0)
t2.c:375:SOP(0xff,0x91) len(4) seqno(71)
t2.c:339:TRACE ENTER t2_decode_packet
resno(0) compno(0) layno(8) precno(0)
t2.c:375:SOP(0xff,0x91) len(4) seqno(72)
t2.c:339:TRACE ENTER t2_decode_packet
resno(0) compno(1) layno(8) precno(0)
t2.c:375:SOP(0xff,0x91) len(4) seqno(73)
[ERROR] Expected EPH marker
[ERROR] tcd_decode: incomplete bistream
ERROR -> j2k_to_image: failed to decode image!
winfried
Reported by szukw000 on 2011-09-03 11:42:07
I have the same problem with trunk and V2 style (rev961):
http://my.cdash.org/testDetails.php?test=7655496&build=242949
Mickaël
Reported by savmickael on 2011-10-05 16:48:53
Hi,
Dashboard (rev998 + winfried heap corruption fix) provide some observations about this
bug:
all the platform and v1.5 failed to decode this file: http://my.cdash.org/testSummary.php?project=237&name=ETS-C1P0-p0_07.j2k-decode&date=2011-10-12
because EPH marker is not detected as attended.
with trunk, windows platform decode the file (without eph marker error) and the output
image is equal to the conformance image: http://my.cdash.org/testDetails.php?test=7684271&build=246254
and http://my.cdash.org/testDetails.php?test=7684272&build=246254
On the other hand, the macOS and ubuntu decode the file with the EPH error and the
comparison between output image and reference image failed: http://my.cdash.org/testDetails.php?test=7664016&build=246236
Any idea, why these differences ?
Mickaël
Reported by savmickael on 2011-10-12 15:01:58
Looks like a struct is not being initialized:
[WARNING] SOT marker inconsistency in tile 0: tile-part index greater (0) than number
of tile-parts (0)
[INFO] tile 1 of 256
==7949== Invalid read of size 2
==7949== at 0x4E3DA57: pi_next_lrcp (pi.c:109)
==7949== by 0x4E413A2: pi_next (pi.c:713)
==7949== by 0x4E49070: t2_decode_packets (t2.c:706)
==7949== by 0x4E4FBA9: tcd_decode_tile (tcd.c:1367)
==7949== by 0x4E36662: j2k_read_eoc (j2k.c:1566)
==7949== by 0x4E36CF5: j2k_decode (j2k.c:1877)
==7949== by 0x4E3D32B: opj_decode_with_info (openjpeg.c:163)
==7949== by 0x4E3D2D7: opj_decode (openjpeg.c:156)
==7949== by 0x404458: main (j2k_to_image.c:631)
==7949== Address 0x72b64b0 is 0 bytes after a block of size 192 alloc'd
==7949== at 0x4C2380C: calloc (vg_replace_malloc.c:467)
==7949== by 0x4E3FB65: pi_create_decode (pi.c:505)
==7949== by 0x4E48B68: t2_decode_packets (t2.c:697)
==7949== by 0x4E4FBA9: tcd_decode_tile (tcd.c:1367)
==7949== by 0x4E36662: j2k_read_eoc (j2k.c:1566)
==7949== by 0x4E36CF5: j2k_decode (j2k.c:1877)
==7949== by 0x4E3D32B: opj_decode_with_info (openjpeg.c:163)
==7949== by 0x4E3D2D7: opj_decode (openjpeg.c:156)
==7949== by 0x404458: main (j2k_to_image.c:631)
==7949==
==7949== Invalid write of size 2
==7949== at 0x4E3DA71: pi_next_lrcp (pi.c:110)
==7949== by 0x4E413A2: pi_next (pi.c:713)
==7949== by 0x4E49070: t2_decode_packets (t2.c:706)
==7949== by 0x4E4FBA9: tcd_decode_tile (tcd.c:1367)
==7949== by 0x4E36662: j2k_read_eoc (j2k.c:1566)
==7949== by 0x4E36CF5: j2k_decode (j2k.c:1877)
==7949== by 0x4E3D32B: opj_decode_with_info (openjpeg.c:163)
==7949== by 0x4E3D2D7: opj_decode (openjpeg.c:156)
==7949== by 0x404458: main (j2k_to_image.c:631)
==7949== Address 0x72b64b0 is 0 bytes after a block of size 192 alloc'd
==7949== at 0x4C2380C: calloc (vg_replace_malloc.c:467)
==7949== by 0x4E3FB65: pi_create_decode (pi.c:505)
==7949== by 0x4E48B68: t2_decode_packets (t2.c:697)
==7949== by 0x4E4FBA9: tcd_decode_tile (tcd.c:1367)
==7949== by 0x4E36662: j2k_read_eoc (j2k.c:1566)
==7949== by 0x4E36CF5: j2k_decode (j2k.c:1877)
==7949== by 0x4E3D32B: opj_decode_with_info (openjpeg.c:163)
==7949== by 0x4E3D2D7: opj_decode (openjpeg.c:156)
==7949== by 0x404458: main (j2k_to_image.c:631)
==7949==
Reported by malaterre on 2012-01-11 09:37:58
Have you tried to read this same image using V2? I get expected EPH marker errors there
too and the first tile is messed up.
Reported by Bobndc
on 2013-05-22 16:46:32
Reported by malaterre on 2014-02-20 11:24:39
Here is what I see in the svn log:
------------------------------------------------------------------------
r1007 | savmickael | 2011-10-12 16:44:46 +0200 (mer. 12 oct. 2011) | 1 ligne
[trunk] WIP: resolve heap corruption with p0_07.j2k (credit to Winfried)
------------------------------------------------------------------------
Reported by malaterre on 2014-02-20 14:25:52
openjpeg trunk was able to cope (= parse) with this file during changes introduce in
r961
Reported by malaterre on 2014-02-20 16:29:51
the following code in j2k.c is bogus:
partno = cio_read(cio, 1);
numparts = cio_read(cio, 1);
if (partno >= numparts) {
opj_event_msg(j2k->cinfo, EVT_WARNING, "SOT marker inconsistency in tile %d: tile-part
index greater (%d) than number of tile-parts (%d)\n", tileno, partno, numparts);
numparts = partno+1;
}
The case where numparts is 0 (unknown) is not handled at all.
Reported by malaterre on 2014-02-20 16:50:00
Reported by malaterre on 2014-02-25 15:26:30
Seems like this is working today, I can get an output very close to the expected PGX
(conformance). Need to add a PSNR test.
Reported by malaterre on 2014-02-27 10:10:18
Started
PSNR test is already included in the test suite. This is precisely because PSNR is out
of tolerated range that compare2ref test is failing
Reported by detonin on 2014-02-27 10:30:47
Reported by detonin on 2014-03-04 21:08:03
yes this file is not correctly decoded according to the conformance file. I have spend
some time to understand why but it is not tricky.
Reported by savmickael on 2014-03-06 11:42:03
I suspect the issue comes from the weird tile ordering of the file:
[...]
99 : New marker: SOT (Start of tile-part)
Tile : 0
Length : 9850
Index : 0
Tile-Parts : unknown
[...]
7833153 : New marker: SOT (Start of tile-part)
Tile : 0
Length : 14519
Index : 1
Tile-Parts : 2
Reported by malaterre on 2014-03-11 11:43:05
Confirmed. If I re-organize the file:
$ kdu_transcode -i data/input/conformance/p0_07.j2k -o clean.j2k Porder:T0={0,0,9,8,3,LRCP}
openjpeg is able to decompress the first tile properly (= the whole image).
Note the original image was compressed using something like:
kdu_compress [...] Porder:T0={0,0,9,3,3,LRCP} Porder:T0={0,0,9,8,3,LRCP}
Reported by malaterre on 2014-03-11 11:55:33
Let's divide the issue into sub issues:
$ kdu_expand -i input/conformance/p0_07.j2k -o 1.tif,2.tif,3.tif -record ref.txt
$ kdu_compress -no_info -i 1.tif,2.tif,3.tif -o kdu_ref.tif.j2k Creversible=yes -record
test.txt Stiles="{128,128}" Corder=RLCP Clayers=8 Cuse_sop=yes Cuse_eph=yes Clevels=3
Sprofile=PROFILE0 Porder:T0="{0,0,9,3,3,LRCP}" Porder:T0="{0,0,9,8,3,LRCP}" Cycc=no
ORGgen_plt=yes
-> this is approximately the same image as p0_07.j2k
Let's start by removing the tile handling:
$ kdu_compress -no_info -i 1.tif,2.tif,3.tif -o kdu_ref.tif.j2k Creversible=yes -record
test.txt Corder=RLCP Clayers=8 Cuse_sop=yes Cuse_eph=yes Clevels=3 Sprofile=PROFILE2
Porder:T0="{0,0,9,3,3,LRCP}" Porder:T0="{0,0,9,8,3,LRCP}" Cycc=no ORGgen_plt=yes
Reported by malaterre on 2014-03-11 14:33:06
Using a smaller image might be easier:
$ kdu_compress -no_info -i lena512.pgm -o lena512.i80.j2k Creversible=yes -record test.txt
Corder=RLCP Clayers=8 Cuse_sop=yes Cuse_eph=yes Clevels=3 Sprofile=PROFILE0 Porder:T0="{0,0,9,3,3,LRCP}"
Porder:T0="{0,0,9,8,3,LRCP}" Cycc=no ORGgen_plt=yes
Steps:
$ ./bin/opj_decompress -i lena512.i80.j2k -o lena512.i80.j2k.pgm
[INFO] Start to read j2k main header (0).
[INFO] Main header has been correctly decoded.
[INFO] No decoded area parameters, set the decoded area to the whole image
[INFO] Header of tile 0 / 0 has been read.
Error : expected EPH marker
Error : expected EPH marker
Error : expected EPH marker
Error : expected EPH marker
Error : expected EPH marker
Error : expected EPH marker
[INFO] Tile 1/1 has been decoded.
[INFO] Image data has been updated with tile 1.
Generated Outfile lena512.i80.j2k.pgm
Reported by malaterre on 2014-03-11 14:35:33
Just for reference EPH handling seems broken according to previous notes. Removing the
EPH leads to the same error.
Reported by malaterre on 2014-03-11 14:52:00
This issue was updated by revision r2690.
Reported by malaterre on 2014-03-11 15:17:42
This issue was closed by revision r2692.
Reported by malaterre on 2014-03-12 10:10:25
Fixed
This issue was updated by revision r2693.
Reported by malaterre on 2014-03-12 10:35:05
Both images are OK. Thank you :-)
winfried
Reported by szukw000 on 2014-03-12 12:26:10
This issue was updated by revision r2710.
Reported by malaterre on 2014-03-13 10:56:54
Reported by detonin on 2014-03-24 15:57:45
Originally reported on Google Code with ID 80
Reported by detonin on 2011-08-10 15:39:35