summaryrefslogtreecommitdiff
path: root/src/bin/jp2
AgeCommit message (Collapse)Author
2020-05-20Add multithreading support in the T1 (entropy phase) encoderEven Rouault
- API wise, opj_codec_set_threads() can be used on the encoding side - opj_compress has a -threads switch similar to opj_uncompress
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-01opj_decompress: add sanity checks to avoid segfault in case of decoding errorEven Rouault
Prevent crashes like: opj_decompress -i 0722_5-1_2019.jp2 -o out.ppm -r 4 -t 0 where 0722_5-1_2019.jp2 is https://drive.google.com/file/d/1ZxOUZg2-FKjYwa257VFLMpTXRWxEoP0a/view?usp=sharing
2020-02-13opj_compress: improve help message regarding new IMF switchEven Rouault
2020-02-12Implement writing of IMF profilesEven Rouault
Add -IMF switch to opj_compress as well
2019-09-03Merge pull request #1164 from sebras/masterEven Rouault
openjp2/j2k: Report error if all wanted components are not decoded.
2019-04-15bmp_read_rle4_data(): avoid potential infinite loopYoung Xiao
2019-04-15convertbmp: detect invalid file dimensions earlyYoung Xiao
width/length dimensions read from bmp headers are not necessarily valid. For instance they may have been maliciously set to very large values with the intention to cause DoS (large memory allocation, stack overflow). In these cases we want to detect the invalid size as early as possible. This commit introduces a counter which verifies that the number of written bytes corresponds to the advertized width/length. See commit 8ee335227bbc for details. Signed-off-by: Young Xiao <YangX92@hotmail.com>
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-12-14convertbmp: detect invalid file dimensions earlyHugo Lefeuvre
width/length dimensions read from bmp headers are not necessarily valid. For instance they may have been maliciously set to very large values with the intention to cause DoS (large memory allocation, stack overflow). In these cases we want to detect the invalid size as early as possible. This commit introduces a counter which verifies that the number of written bytes corresponds to the advertized width/length. Fixes #1059 (CVE-2018-6616).
2018-11-16Merge pull request #1160 from hlef/masterEven Rouault
jp3d/jpwl convert: fix write stack buffer overflow
2018-11-07jp2: convert: fix null pointer dereferenceHugo Lefeuvre
Tile components in a JP2 image might have null data pointer by defining a zero component size (for example using large horizontal or vertical sampling periods). This null data pointer leads to null image component data pointer, causing crash when dereferenced without != null check in imagetopnm. Add != null check. This commit addresses #1152 (CVE-2018-18088).
2018-10-31Fix some potential overflow issues (#1161)Stefan Weil
* Fix some potential overflow issues Put sizeof to the beginning of the multiplication to enforce that size_t instead of smaller integer types is used for the calculation. This fixes warnings from LGTM: Multiplication result may overflow 'unsigned int' before it is converted to 'unsigned long'. It also allows removing some type casts. Signed-off-by: Stefan Weil <sw@weilnetz.de> * Fix code indentation Signed-off-by: Stefan Weil <sw@weilnetz.de>
2018-10-31Fix several memory and resource leaksNikola Forró
Signed-off-by: Nikola Forró <nforro@redhat.com>
2018-09-22Merge pull request #1148 from hlef/masterEven Rouault
CVE-2018-5785: fix issues with zero bitmasks
2018-09-22Merge pull request #1128 from stweil/typosEven Rouault
Fix some typos in code comments and documentation
2018-09-22convertbmp: fix issues with zero bitmasksHugo Lefeuvre
In the case where a BMP file declares compression 3 (BI_BITFIELDS) with header size <= 56, all bitmask values keep their initialization value 0. This may lead to various undefined behavior later e.g. when doing 1 << (l_comp->prec - 1). This issue does not affect files with bit count 16 because of a check added in 16240e2 which sets default values to the color masks if they are all 0. This commit adds similar checks for the 32 bit case. Also, if a BMP file declares compression 3 with header size >= 56 and intentional 0 bitmasks, the same issue will be triggered in both the 16 and 32 bit count case. This commit adds checks to bmp_read_info_header() rejecting BMP files with "intentional" 0 bitmasks. These checks might be removed in the future when proper handling of zero bitmasks will be available in openjpeg2. fixes #1057 (CVE-2018-5785)
2018-09-05Fix some typos in code comments and documentationStefan Weil
All typos were found by Codespell. Signed-off-by: Stefan Weil <sw@weilnetz.de>
2018-08-31Changes in pnmtoimage if image data are missingszukw000
2018-06-16opj_compress: try to make help message of -c switch clearer (fixes #1117)Even Rouault
2018-03-12opj_compress: fix help message regarding default precinct sizeEven Rouault
2017-12-15Fix resource leak (CID 179466)Stefan Weil
Coverity report: CID 179466 (#1 of 1): Resource leak (RESOURCE_LEAK) 93. leaked_storage: Variable name going out of scope leaks the storage it points to. Signed-off-by: Stefan Weil <sw@weilnetz.de>
2017-11-14Changed cmake version test to allow for cmake 2.8.11.xAndrew Murray
2017-10-06opj_decompress -h: document -threads ALL_CPUSEven Rouault
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-20opj_decompress: add a warning when -d and -t are used together (#693)Even Rouault
2017-09-19opj_set_decoded_components(): add a provision for a apply_color_transforms ↵Even Rouault
parameter in case we support it in the future
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-05Merge pull request #1010 from rouault/subtile_decoding_stage3Even Rouault
Subtile decoding: memory use reduction and perf improvements
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_compress help: indicate 0 value, instead of 1, for -r parameter to get ↵Even Rouault
lossless encoding (#1009)
2017-09-01opj_compress: reorder checks related to code block dimensions, to avoid ↵Even Rouault
potential int overflow
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-24imagetopgx(): improve performance in 8 bit case (relates to broken.jpc test ↵Even Rouault
case)
2017-08-19pgxtoimage(): avoid excessive memory allocation attempt (#999)Even Rouault
2017-08-18pgxtoimage(): fix write stack buffer overflow (#997)Even Rouault
2017-08-18bmp_read_rle8_data(): avoid potential infinite loop (#996)Even Rouault
2017-08-17Fix -Wconversion warningEven Rouault
2017-08-17convert.c: fix recently introduced -Wsign-conversion warningsEven Rouault
2017-08-17tgatoimage(): avoid excessive memory allocation attempt, and fixes unaligned ↵Even Rouault
load (#995)
2017-08-16tiftoimage(): fix read heap buffer overflow (#988)Even Rouault
The number of components is given only by TIFFTAG_SAMPLESPERPIXEL / tiSpp. Querying TIFFTAG_EXTRASAMPLES only give information about which channel is the alpha channel, but we mostly ignore it for now, so remove that part of the code.
2017-08-16imagetotga(): fix read heap buffer overflow if numcomps < 3 (#987)Even Rouault
2017-08-14bmp_read_info_header(): reject bmp files with biBitCount == 0 (#983)Even Rouault
2017-08-11Changes in converttif.c for PPC64szukw000
2017-08-10Fix crash on encoding if using opj_set_default_encoder_parameters() without ↵Even Rouault
defining tcp_numlayers
2017-08-09opj_decompress: document -quiet option, and remove spurious newline outputEven Rouault
2017-08-09imagetobmp: avoid shift by -1 (relates to #811)Even Rouault
2017-08-08Fix remaining warningAntonin Descampe
format specifier mismatch in #975
2017-08-07Changes for converttif.c to fix tsize_tszukw000
2017-08-02First change on changes-for-afl-testsszukw000