summaryrefslogtreecommitdiff
path: root/src/lib/openjp2/j2k.c
AgeCommit message (Collapse)Author
2020-12-02opj_j2k_write_sod(): avoid potential heap buffer overflow (fixes #1299) ↵Even Rouault
(probably master only)
2020-12-01opj_j2k_setup_encoder(): validate POC compno0 (fixes #1293)Even Rouault
2020-11-30Decoding: deal with some SPOT6 images that have tiles with a single ↵Even Rouault
tile-part with TPsot == 0 and TNsot == 0, and with missing EOC
2020-10-09Merge pull request #1253 from rouault/floating_point_irreversible_encodingEven Rouault
Single-threaded performance improvements in forward DWT for 5-3 and 9-7 (and other improvements)
2020-09-16Encoder: avoid uint32 overflow when allocating memory for codestream buffer ↵Even Rouault
(fixes #1243)
2020-06-23openjp2: Plug image leak when failing to allocate codestream index.Sebastian Rasmussen
This fixes issue #1259.
2020-05-20Merge pull request #1211 from sebras/masterEven Rouault
Add check to validate SGcod/SPcoc/SPcod parameter values.
2020-05-20opj_j2k_setup_encoder(): add validation of tile width and height to avoid ↵Even Rouault
potential division by zero
2020-04-21Add support for generation of PLT markers in encoderEven Rouault
* -PLT switch added to opj_compress * Add a opj_encoder_set_extra_options() function that accepts a PLT=YES option, and could be expanded later for other uses. ------- Testing with a Sentinel2 10m band, T36JTT_20160914T074612_B02.jp2, coming from S2A_MSIL1C_20160914T074612_N0204_R135_T36JTT_20160914T081456.SAFE Decompress it to TIFF: ``` opj_uncompress -i T36JTT_20160914T074612_B02.jp2 -o T36JTT_20160914T074612_B02.tif ``` Recompress it with similar parameters as original: ``` opj_compress -n 5 -c [256,256],[256,256],[256,256],[256,256],[256,256] -t 1024,1024 -PLT -i T36JTT_20160914T074612_B02.tif -o T36JTT_20160914T074612_B02_PLT.jp2 ``` Dump codestream detail with GDAL dump_jp2.py utility (https://github.com/OSGeo/gdal/blob/master/gdal/swig/python/samples/dump_jp2.py) ``` python dump_jp2.py T36JTT_20160914T074612_B02.jp2 > /tmp/dump_sentinel2_ori.txt python dump_jp2.py T36JTT_20160914T074612_B02_PLT.jp2 > /tmp/dump_sentinel2_openjpeg_plt.txt ``` The diff between both show very similar structure, and identical number of packets in PLT markers Now testing with Kakadu (KDU803_Demo_Apps_for_Linux-x86-64_200210) Full file decompression: ``` kdu_expand -i T36JTT_20160914T074612_B02_PLT.jp2 -o tmp.tif Consumed 121 tile-part(s) from a total of 121 tile(s). Consumed 80,318,806 codestream bytes (excluding any file format) = 5.329697 bits/pel. Processed using the multi-threaded environment, with 8 parallel threads of execution ``` Partial decompresson (presumably using PLT markers): ``` kdu_expand -i T36JTT_20160914T074612_B02.jp2 -o tmp.pgm -region "{0.5,0.5},{0.01,0.01}" kdu_expand -i T36JTT_20160914T074612_B02_PLT.jp2 -o tmp2.pgm -region "{0.5,0.5},{0.01,0.01}" diff tmp.pgm tmp2.pgm && echo "same !" ``` ------- Funded by ESA for S2-MPC project
2020-04-16Rename mis-named function opj_tcd_get_encoded_tile_size() to ↵Even Rouault
opj_tcd_get_encoder_input_buffer_size()
2020-02-12Implement writing of IMF profilesEven Rouault
Add -IMF switch to opj_compress as well
2020-01-11opj_j2k_update_image_dimensions(): reject images whose coordinates are ↵Even Rouault
beyond INT_MAX (fixes #1228)
2019-09-04openjp2/j2k: Validate all SGcod/SPcod/SPcoc parameter values.Sebastian Rasmussen
Previously the multiple component transformation SGcod(C) and wavelet transformation SPcod(H)/SPcoc(E) parameter values were never checked, allowing for out of range values. The lack of validation allowed the bit stream provided in issue #1158 through. After this commit an error message points to the marker segments' parameters as being out of range. input/nonregression/edf_c2_20.jp2 contains an SPcod(H) value of 17, but according to Table A-20 of the specification only values 0 and 1 are valid. input/nonregression/issue826.jp2 contains a SGcod(B) value of 2, but according to Table A-17 of the specification only values 0 and 1 are valid. input/nonregression/oss-fuzz2785.jp2 contains a SGcod(B) value of 32, but it is likewise limited to 0 or 1. These test cases have been updated to consistently fail to parse the headers since they contain out of bounds values. This fixes issue #1210.
2019-09-04openjp2/j2k: Make comments adhere to specification.Sebastian Rasmussen
The function is used to read both SPcod and SPcoc, so all comments should refer to both marker segments' parameter names.
2019-09-03Merge pull request #1164 from sebras/masterEven Rouault
openjp2/j2k: Report error if all wanted components are not decoded.
2019-04-25Change opj_j2k_check_poc_val() to take into account tile numberEven Rouault
2019-04-25Fix POC in multi-tile scenarios: avoid almost endless loop when a tile has ↵Even Rouault
no POC settings
2019-04-25opj_j2k_check_poc_val(): prevent potential write outside of allocated arrayEven Rouault
2019-04-25opj_j2k_check_poc_val(): fix starting index for checking layer dimensionEven Rouault
The standard mandates that the layer index always starts at zero for every progression.
2019-04-25compression: emit POC marker when only one single POC is requested (fixes #1191)Even Rouault
2019-04-23j2k.c: use correct naming convention for total_data_size variableEven Rouault
2019-02-21openjp2/j2k: Report error if all wanted components are not decoded.Sebastian Rasmussen
Previously the caller had to check whether each component data had been decoded. This means duplicating the checking in every user of openjpeg which is unnecessary. If the caller wantes to decode all or a set of, or a specific component then openjpeg ought to error out if it was unable to do so. Fixes #1158.
2018-09-05openjp2/jp2: Fix two format stringsStefan Weil
Compiler warnings: src/lib/openjp2/jp2.c:1008:35: warning: too many arguments for format [-Wformat-extra-args] src/lib/openjp2/j2k.c:1928:73: warning: format ‘%d’ expects argument of type ‘int’, but argument 4 has type ‘OPJ_OFF_T {aka long int}’ [-Wformat=] Signed-off-by: Stefan Weil <sw@weilnetz.de>
2018-06-20Avoid assertion when running opj_j2k_merge_ppt() several time due to ↵Even Rouault
e6674f7ed66abdb32a0be5944f618722b6a7b5d5 revert. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2785
2018-06-20Revert "Avoid assertion in opj_j2k_merge_ppt() in case premature EOC is ↵Even Rouault
encountered in opj_j2k_read_tile_header(). Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2785. Credit to OSS Fuzz" (fixes #1120) This reverts commit 9906fbf737692486cebabe98169988d818e2e66a. which broke decoding of images where TNsot == 0
2017-11-30opj_j2k_read_cod: remove check for 'No more than one COD marker per tile' ↵Even Rouault
(fixes #1043) This check was added per https://github.com/uclouvain/openjpeg/commit/daed8cc9195555e101ab708a501af2dfe6d5e001 to fix https://github.com/uclouvain/openjpeg/issues/476 , but it does not seem to be necessary with latest master (issue476.jp2 doesn't cause memory issues), and breaks reading legit files.
2017-11-30Fix typo in commentsEven Rouault
2017-10-12opj_j2k_set_threads(): add sanity check to error out if called after ↵Even Rouault
opj_read_header()
2017-09-26Merge pull request #1022 from rouault/partial_component_decodingAntonin Descampe
Add capability to decode only a subset of all components of an image.
2017-09-21Add assertionEven Rouault
2017-09-21Comment dead code (Coverity CID 94681)Even Rouault
2017-09-21Workaround Coverity CID 113061Even Rouault
2017-09-21opj_j2k_get_default_thread_count(): validate value of OPJ_NUM_THREADS to fix ↵Even Rouault
Coverity 179465 and 179463
2017-09-21Fix copy&paste error (Coverity CID 169394)Even Rouault
2017-09-20Use a #define J2K_MAX_POCS 32 to avoid hard-coded constant (#349)Even Rouault
2017-09-19Remove redundant test (raised by cppcheck)Even Rouault
2017-09-19Add capability to decode only a subset of all components of an image.Even Rouault
This adds a opj_set_decoded_components(opj_codec_t *p_codec, OPJ_UINT32 numcomps, const OPJ_UINT32* comps_indices) function, and equivalent "opj_decompress -c compno[,compno]*" option. When specified, neither the MCT transform nor JP2 channel transformations will be applied. Tests added for various combinations of whole image vs tiled-based decoding, full or reduced resolution, use of decode area or not.
2017-09-19Fix compilation with AppleClang 8.1.0.8020042 (#1020)Even Rouault
2017-09-08opj_j2k_update_image_data(): restrict optimized pathEven Rouault
2017-09-06Fix invalid access out of bounds, and bad behaviour, when calling repeatdly ↵Even Rouault
opj_get_decoded_tile() on an image with a color palette
2017-09-06Fix 2.2.0 regression when reading codestream with reperated calls to ↵Even Rouault
opj_get_decoded_tile() where tile parts of a same tile are not consecutive This check was introduced per #939, but relied on the incorrect assumption we decode all the tile parts of all tiles.
2017-09-05Merge pull request #1010 from rouault/subtile_decoding_stage3Even Rouault
Subtile decoding: memory use reduction and perf improvements
2017-09-02Improve error message when specifying a too big cp_reduce parameter (#474)Even Rouault
2017-09-01opj_j2k_update_image_data(): avoid allocating image buffer if we can just ↵Even Rouault
reuse the tile buffer one
2017-09-01opj_j2k_setup_encoder(): emit warnings if tcp_rates are not decreasing or ↵Even Rouault
tcp_distoratio are not increasing (#1009)
2017-09-01opj_j2k_setup_encoder(): avoid potential int overflow in computations ↵Even Rouault
related to max_cs_size
2017-09-01opj_compress help: revert 32572617765cb9d77302384653a48d793b8f657f and ↵Even Rouault
indicate 1 again as being the value to get lossless for -r. In opj_j2k_setup_encoder(), make sure that ll rates[] <= 1.0 are set to 0. Document 0 as being lossless for -q / tcp_distoratio (#1009)
2017-09-01opj_j2k_update_image_data(): avoid zero-ing the buffer if not neededEven 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