diff --git a/glymur/jp2box.py b/glymur/jp2box.py index 9291fe4..5887864 100644 --- a/glymur/jp2box.py +++ b/glymur/jp2box.py @@ -990,14 +990,18 @@ class ContiguousCodestreamBox(Jp2kBox): offset of the box from the start of the file. longname : str more verbose description of the box. - main_header : list - List of segments in the codestream header. + main_header : Codestream object + contains list of main header marker/segments + main_header_offset : int + offset of main header from start of file """ - def __init__(self, main_header=None, length=0, offset=-1): + def __init__(self, main_header=None, main_header_offset=None, length=0, + offset=-1): Jp2kBox.__init__(self, box_id='jp2c', longname='Contiguous Codestream') self._main_header = main_header self.length = length self.offset = offset + self.main_header_offset = main_header_offset # The filename can be set if lazy loading is desired. self._filename = None @@ -1046,11 +1050,13 @@ class ContiguousCodestreamBox(Jp2kBox): ------- ContiguousCodestreamBox instance """ + main_header_offset = fptr.tell() if _parseoptions['codestream'] is True: main_header = Codestream(fptr, length, header_only=True) else: main_header = None - box = cls(main_header, length=length, offset=offset) + box = cls(main_header, main_header_offset=main_header_offset, + length=length, offset=offset) box._filename = fptr.name box._length = length box._offset = offset diff --git a/glymur/test/test_jp2box.py b/glymur/test/test_jp2box.py index 1a00715..90f205d 100644 --- a/glymur/test/test_jp2box.py +++ b/glymur/test/test_jp2box.py @@ -935,6 +935,9 @@ class TestWrap(unittest.TestCase): class TestJp2Boxes(unittest.TestCase): """Tests for canonical JP2 boxes.""" + def setUp(self): + self.jpxfile = glymur.data.jpxfile() + def test_default_jp2k(self): """Should be able to instantiate a JPEG2000SignatureBox""" jp2k = glymur.jp2box.JPEG2000SignatureBox() @@ -971,6 +974,12 @@ class TestJp2Boxes(unittest.TestCase): self.assertEqual(box.box_id, 'jp2c') self.assertIsNone(box.main_header) + def test_codestream_main_header_offset(self): + """main_header_offset is an attribute of the CCS box""" + j = Jp2k(self.jpxfile); + self.assertEqual(j.box[5].main_header_offset, + j.box[5].offset + 8) + class TestRepr(unittest.TestCase): """Tests for __repr__ methods."""