Erroring out appropriately when _read_openjpeg gets differing sampling

If the subsampling factors are different, we should error out when using
read with libopenjpeg.  Closed #72
This commit is contained in:
jevans 2013-07-06 17:50:39 -04:00
commit a8219236aa
4 changed files with 17 additions and 9 deletions

View file

@ -613,9 +613,19 @@ class Jp2k(Jp2kBox):
Raises
------
IOError
RuntimeError
If the image has differing subsample factors.
"""
# Check for differing subsample factors.
codestream = self.get_codestream(header_only=True)
dxs = np.array(codestream.segment[1].XRsiz)
dys = np.array(codestream.segment[1].YRsiz)
if np.any(dxs - dxs[0]) or np.any(dys - dys[0]):
msg = "Components must all have the same subsampling factors "
msg += "to use this method with OpenJPEG 1.5.1. Please consider "
msg += "using OPENJP2 instead."
raise RuntimeError(msg)
with ExitStack() as stack:
# Set decoding parameters.
@ -653,7 +663,6 @@ class Jp2k(Jp2kBox):
stack.callback(opj._cio_close, cio)
ncomps = image.contents.numcomps
component = image.contents.comps[0]
if component.sgnd:
if component.prec <= 8:
@ -726,7 +735,7 @@ class Jp2k(Jp2kBox):
Raises
------
IOError
RuntimeError
If the image has differing subsample factors.
"""
# Check for differing subsample factors.
@ -735,7 +744,7 @@ class Jp2k(Jp2kBox):
dys = np.array(codestream.segment[1].YRsiz)
if np.any(dxs - dxs[0]) or np.any(dys - dys[0]):
msg = "Components must all have the same subsampling factors."
raise IOError(msg)
raise RuntimeError(msg)
img_array = self._read_common(reduce=reduce,
layer=layer,

View file

@ -319,7 +319,7 @@ class TestJp2k(unittest.TestCase):
# Issue 86.
filename = os.path.join(data_root, 'input/conformance/p0_05.j2k')
j = Jp2k(filename)
with self.assertRaises(IOError):
with self.assertRaises(RuntimeError):
j.read()
@unittest.skipIf(data_root is None,

View file

@ -794,12 +794,11 @@ class TestSuite(unittest.TestCase):
data = Jp2k(jfile).read()
self.assertTrue(True)
@unittest.skip("Should have worked, must be investigated.")
def test_NR_DEC_file_409752_jp2_40_decode(self):
jfile = os.path.join(data_root, 'input/nonregression/file409752.jp2')
j = Jp2k(jfile)
data = j.read()
self.assertTrue(True)
with self.assertRaises(RuntimeError) as ce:
data = j.read()
if __name__ == "__main__":
unittest.main()

View file

@ -1068,7 +1068,7 @@ class TestSuite(unittest.TestCase):
def test_NR_DEC_file_409752_jp2_40_decode(self):
jfile = os.path.join(data_root,
'input/nonregression/file409752.jp2')
with self.assertRaises(IOError):
with self.assertRaises(RuntimeError):
data = Jp2k(jfile).read()
@unittest.skipIf(sys.hexversion < 0x03020000,