summaryrefslogtreecommitdiff
path: root/src/lib
AgeCommit message (Collapse)Author
2017-09-01opj_j2k_update_image_data(): avoid zero-ing the buffer if not neededEven Rouault
2017-09-01Optimize reading/write into sparse arrayEven Rouault
2017-09-01Allow several repeated calls to opj_set_decode_area() and opj_decode() for ↵Even Rouault
single-tiled images * Only works for single-tiled images --> will error out cleanly, as currently in other cases * Save re-reading the codestream for the tile, and re-use code-blocks of the previous decoding pass. * Future improvements might involve improving opj_decompress, and the image writing logic, to use this strategy.
2017-09-01opj_j2k_decode_tiles(): apply whole single tile image decoding optimization ↵Even Rouault
to reading at reduced resolution as well
2017-09-01Various changes to allow tile buffers of more than 4giga pixelsEven Rouault
Untested though, since that means a tile buffer of at least 16 GB. So there might be places where uint32 overflow on multiplication still occur...
2017-09-01TCD: allow tile buffer to be greater than 4GB on 64 bit hosts (but number of ↵Even Rouault
pixels must remain under 4 billion)
2017-09-01Fix compiler warning in release modeEven Rouault
2017-09-01Remove limitation that prevents from opening images bigger than 4 billion pixelsEven Rouault
However the intermediate buffer for decoding must still be smaller than 4 billion pixels, so this is useful for decoding at a lower resolution level, or subtile decoding.
2017-09-01opj_tcd_init_tile(): fix typo on overflow detection condition (introduced in ↵Even Rouault
previous commit)
2017-09-01opj_dwt_decode_partial_tile(): avoid undefined behaviour in lifting ↵Even Rouault
operation by properly initializing working buffer
2017-09-01Sub-tile decoding: only allocate tile component buffer of the needed dimensionEven Rouault
Instead of being the full tile size. * Use a sparse array mechanism to store code-blocks and intermediate stages of IDWT. * IDWT, DC level shift and MCT stages are done just on that smaller array. * Improve copy of tile component array to final image, by saving an intermediate buffer. * For full-tile decoding at reduced resolution, only allocate the tile buffer to the reduced size, instead of the full-resolution size.
2017-09-01opj_j2k_setup_encoder(): validate code block width/heightEven Rouault
2017-09-01opj_t1_allocate_buffers(): remove useless overflow checksEven Rouault
2017-09-01Fix undefined shift behaviour in opj_dwt_is_whole_tile_decoding(). Fixes ↵Even Rouault
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3255. Credit to OSS Fuzz
2017-08-29Use IDWT whole tile decoding if the area of interest equals to the image ↵Even Rouault
bounds, taking into account the reduced resolution factor
2017-08-28Subtile decoding: fix overflows in subband coordinate computation that cause ↵Even Rouault
later buffer overflow. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3115. Credit to OSS Fuzz. master only
2017-08-28Make opj_set_decode_area() and opj_decode() take into account ↵Even Rouault
opj_set_decoded_resolution_factor() (#1006, affect API use) * Better document usage of opj_set_decode_area(), ie expecting coordinates in full resolution/reference grid even if requesting at a lower resolution factor * Make sure that image->comps[].factor is set by opj_set_decode_area() and opj_decode() from the value specified in opj_set_decoded_resolution_factor() * opj_decompress: add 2 environmenet variables to test alternate ways of using the API, namely USE_OPJ_SET_DECODED_RESOLUTION_FACTOR=YES to use opj_set_decoded_resolution_factor() instead of parameters.cp_reduce, and SKIP_OPJ_SET_DECODE_AREA=YES to not call opj_set_decode_area() if -d is not specified.
2017-08-23opj_dwt_decode_partial_97(): perf improvement: limit copy of coefficients at ↵Even Rouault
end of horizontal pass to actual range of interest
2017-08-21j2k.c: fix comment, and remove FIXMEEven Rouault
2017-08-21Add commentEven Rouault
2017-08-21Add comments for filter_width valuesEven Rouault
2017-08-20Subtile decoding: only do 9x7 IDWT computations on relevant areas of ↵Even Rouault
tile-component buffer.
2017-08-18Subtile decoding: only do 5x3 IDWT computations on relevant areas of ↵Even Rouault
tile-component buffer. This lowers 'bin/opj_decompress -i ../MAPA.jp2 -o out.tif -d 0,0,256,256' down to 0.860s
2017-08-17opj_j2k_update_rates(): grow tile size buffer for some situationsEven Rouault
2017-08-17Zero-initialize tile buffer regions of skipped code-blocks, so as to make ↵Even Rouault
Valgrind happy
2017-08-17Sub-tile decoding: only decode precincts and codeblocks that intersect the ↵Even Rouault
window specified in opj_set_decode_area()
2017-08-17bench_dwt.c: fix signedness related warningsEven Rouault
2017-08-17Avoid asserting on assert(i == pcol) in opj_jp2_apply_pclr() by adding new ↵Even Rouault
check in opj_jp2_check_color(). Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3068. Credit to OSS Fuzz
2017-08-16opj_t1_encode_cblk(): avoid uint32 overflow when numbps = 0 (which is well ↵Even Rouault
defined behaviour, and is properly handled here, but better avoid it to detect real issues)
2017-08-16Fix build issue of JPWL by adding opj_image_data_alloc() and ↵Even Rouault
opj_image_data_free() to src/lib/openmj2 (#994)
2017-08-16opj_t2_encode_packet(): fix potential write heap buffer overflow (#992)Even Rouault
2017-08-16opj_j2k_write_sot(): fix potential write heap buffer overflow (#991)Even Rouault
2017-08-16opj_t2_encode_packet(): only emit an error about insufficiently large output ↵Even Rouault
buffer in FINAL_PASS mode. Fixes (master-only) regression added in 0b4fef6d1901254e41ab74ed681daba477d724c3
2017-08-15Fix assertion in debug mode / heap-based buffer overflow in ↵Even Rouault
opj_write_bytes_LE for Cinema profiles with numresolutions = 1 (#985)
2017-08-14Merge pull request #984 from stweil/constEven Rouault
Use more const qualifiers
2017-08-14Encoder: grow buffer size in opj_tcd_code_block_enc_allocate_data() to avoid ↵Even Rouault
write heap buffer overflow in opj_mqc_flush (#982)
2017-08-14Use const qualifier for mqc_statesStefan Weil
This allows more compiler optimizations. Signed-off-by: Stefan Weil <sw@weilnetz.de>
2017-08-14Use const qualifier for j2k_prog_order_listStefan Weil
This allows more compiler optimizations. Signed-off-by: Stefan Weil <sw@weilnetz.de>
2017-08-10Fix argument order in error message of previous commitEven Rouault
2017-08-10Propagate event manager down to opj_t2_encode_packet() and use it to emit an ↵Even Rouault
error message when the output buffer is too small
2017-08-10Fix crash on encoding if using opj_set_default_encoder_parameters() without ↵Even Rouault
defining tcp_numlayers
2017-08-10Improve doc of opj_tccp_info_t::cblkw and cblkhEven Rouault
2017-08-09Remove useless opj_tcd_t::enumcs field added per #975Even Rouault
2017-08-09Doc: fix error in previous commitEven Rouault
2017-08-09tcd.h: doc fixes and improvementsEven Rouault
2017-08-09Document qmfbid valuesEven Rouault
2017-08-09Partial revert BPC related check of #975 (#979)Even Rouault
PR #975 introduced a check that rejects images that have different bit depth/sign per compoment in SIZ marker if the JP2 IHDR box has BPC != 255 This didn't work properly if decoding a .j2k file since the new bit added in opj_cp_t wasn't initialized to the right value. For clarity, tThis new bit has also been renamed to allow_different_bit_depth_sign But looking closer at the code, it seems we were already tolerant to inconsistencies. For example we parsed a JP2 BPCC box even if BPC != 255 (just a warning is emitted) So failing hard in opj_j2k_read_siz() wouldn't be very inconsistent, and that alone cannot protect against other issues, so just emit a warning if BPC != 255 and the SIZ marker contains different bit depth/sign per component. Note: we could also check that the content of JP2 BPCC box is consistant with the one of the SIZ marker.
2017-08-08Merge pull request #975 from szukw000/changes-for-afl-testsAntonin Descampe
Catch images broken by AFL
2017-08-07Slight improvement in management of code block chunksEven Rouault
Instead of having the chunk array at the segment level, we can move it down to the codeblock itself since segments are filled in sequential order. Limit the number of memory allocation, and decrease slightly the memory usage. On MAPA_005.jp2 n4: 1871312549 (heap allocation functions) malloc/new/new[], --alloc-fns, etc. n1: 1610689344 0x4E781E7: opj_aligned_malloc (opj_malloc.c:61) n1: 1610689344 0x4E71D1B: opj_alloc_tile_component_data (tcd.c:676) n1: 1610689344 0x4E726CF: opj_tcd_init_decode_tile (tcd.c:816) n1: 1610689344 0x4E4BE39: opj_j2k_read_tile_header (j2k.c:8617) n1: 1610689344 0x4E4C902: opj_j2k_decode_tiles (j2k.c:10348) n1: 1610689344 0x4E4E3CE: opj_j2k_decode (j2k.c:7846) n1: 1610689344 0x4E53002: opj_jp2_decode (jp2.c:1564) n0: 1610689344 0x40374E: main (opj_decompress.c:1459) n1: 219232541 0x4E4BC50: opj_j2k_read_tile_header (j2k.c:4683) n1: 219232541 0x4E4C902: opj_j2k_decode_tiles (j2k.c:10348) n1: 219232541 0x4E4E3CE: opj_j2k_decode (j2k.c:7846) n1: 219232541 0x4E53002: opj_jp2_decode (jp2.c:1564) n0: 219232541 0x40374E: main (opj_decompress.c:1459) n1: 23893200 0x4E72735: opj_tcd_init_decode_tile (tcd.c:1225) n1: 23893200 0x4E4BE39: opj_j2k_read_tile_header (j2k.c:8617) n1: 23893200 0x4E4C902: opj_j2k_decode_tiles (j2k.c:10348) n1: 23893200 0x4E4E3CE: opj_j2k_decode (j2k.c:7846) n1: 23893200 0x4E53002: opj_jp2_decode (jp2.c:1564) n0: 23893200 0x40374E: main (opj_decompress.c:1459) n0: 17497464 in 52 places, all below massif's threshold (1.00%)
2017-08-07Decoding: do not allocate memory for the codestream of each codeblockEven Rouault
Currently we allocate at least 8192 bytes for each codeblock, and copy the relevant parts of the codestream in that per-codeblock buffer as we decode packets. As the whole codestream for the tile is ingested in memory and alive during the decoding, we can directly point to it instead of copying. But to do that, we need an intermediate concept, a 'chunk' of code-stream segment, given that segments may be made of data at different places in the code-stream when quality layers are used. With that change, the decoding of MAPA_005.jp2 goes down from the previous improvement of 2.7 GB down to 1.9 GB. New profile: n4: 1885648469 (heap allocation functions) malloc/new/new[], --alloc-fns, etc. n1: 1610689344 0x4E78287: opj_aligned_malloc (opj_malloc.c:61) n1: 1610689344 0x4E71D7B: opj_alloc_tile_component_data (tcd.c:676) n1: 1610689344 0x4E7272C: opj_tcd_init_decode_tile (tcd.c:816) n1: 1610689344 0x4E4BDD9: opj_j2k_read_tile_header (j2k.c:8618) n1: 1610689344 0x4E4C8A2: opj_j2k_decode_tiles (j2k.c:10349) n1: 1610689344 0x4E4E36E: opj_j2k_decode (j2k.c:7847) n1: 1610689344 0x4E52FA2: opj_jp2_decode (jp2.c:1564) n0: 1610689344 0x40374E: main (opj_decompress.c:1459) n1: 219232541 0x4E4BBF0: opj_j2k_read_tile_header (j2k.c:4685) n1: 219232541 0x4E4C8A2: opj_j2k_decode_tiles (j2k.c:10349) n1: 219232541 0x4E4E36E: opj_j2k_decode (j2k.c:7847) n1: 219232541 0x4E52FA2: opj_jp2_decode (jp2.c:1564) n0: 219232541 0x40374E: main (opj_decompress.c:1459) n1: 39822000 0x4E727A9: opj_tcd_init_decode_tile (tcd.c:1219) n1: 39822000 0x4E4BDD9: opj_j2k_read_tile_header (j2k.c:8618) n1: 39822000 0x4E4C8A2: opj_j2k_decode_tiles (j2k.c:10349) n1: 39822000 0x4E4E36E: opj_j2k_decode (j2k.c:7847) n1: 39822000 0x4E52FA2: opj_jp2_decode (jp2.c:1564) n0: 39822000 0x40374E: main (opj_decompress.c:1459) n0: 15904584 in 52 places, all below massif's threshold (1.00%)