summaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
2020-11-30pngtoimage(): fix wrong computation of x1,y1 if -d option is used, that ↵Even Rouault
would result in a heap buffer overflow (fixes #1284)
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-11-26Free p_tcd_marker_info to avoid memory leakyuan
2020-11-25Encoder: grow again buffer size in opj_tcd_code_block_enc_allocate_data() ↵yuan
(fixes #1283)
2020-11-23Encoder: grow again buffer size in opj_tcd_code_block_enc_allocate_data() ↵Even Rouault
(fixes #1283)
2020-11-23Encoder: grow buffer size in opj_tcd_code_block_enc_allocate_data() to avoid ↵Even Rouault
write heap buffer overflow in opj_mqc_flush (fixes #1283)
2020-11-23Fix typo in internal function nameEven Rouault
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-23Bump Java compatibility from 1.5 to 1.6 (#1263)Pei JIA
2020-09-16Encoder: avoid uint32 overflow when allocating memory for codestream buffer ↵Even Rouault
(fixes #1243)
2020-06-30opj_decompress: fix double-free on input directory with mix of valid and ↵Even Rouault
invalid images (CVE-2020-15389) Fixes #1261 Credits to @Ruia-ruia for reporting and analysis.
2020-06-22Merge pull request #1260 from sebras/fix-issue-1259Even Rouault
openjp2: Plug image leak when failing to allocate codestream index.
2020-06-23openjp2: Plug image leak when failing to allocate codestream index.Sebastian Rasmussen
This fixes issue #1259.
2020-06-23openjp2: Plug memory leak when setting data as TLS fails.Sebastian Rasmussen
Previously the Tier 1 handle was not freed when setting it as TLS failed. This fixes issue #1257.
2020-06-23openjp2: Error out if failing to create Tier 1 handle.Sebastian Rasmussen
Previously when the handle failed to be created (e.g. when opj_calloc returned NULL due to low memory), the code still assumed that the t1 handle pointer was valid and dereferenced NULL, causing a crash. After this commit OpenJPEG will instead error out under this condition. This fixes issue #1255.
2020-06-10Testing for invalid values of width, height, numcomps (#1254)szukw000
2020-05-24T1 encoder: speed-up by aggressive inlining and more cache friendly data ↵Even Rouault
organization ~ 9% speed improvement seen on 10980x10980 uint16 image, T36JTT_20160914T074612_B02.tif opj_compress time from 17.2s to 15.8s
2020-05-23Forward DWT 9-7: major speed up by vectorizing vertical passEven Rouault
`bench_dwt -I -encode` times goes from 8.6s to 2.1s
2020-05-23Forward DWT 5-3: major speed up by vectorizing vertical passEven Rouault
`bench_dwt -encode` times goes from 7.9s to 1.7s
2020-05-22Forward DWT: small code refactoring to allow future improvements for the ↵Even Rouault
vertical pass
2020-05-22dwt.c: remove unused typedefEven Rouault
2020-05-22Forward DWT 5x3: performance improvements in horizontal pass, and modest in ↵Even Rouault
vertical pass
2020-05-22Forward DWT: small code refactoring to allow future improvements for the ↵Even Rouault
horizontal pass
2020-05-21Speed-up 9x7 IDWD by ~30% with OPJ_NUM_THREADS=2Even Rouault
"bench_dwt -I" time goes from 2.2s to 1.5s
2020-05-21Remove useless + 5U margin in opj_dwt_decode_tile_97()Even Rouault
Nothing in code analysis nor test suite shows that this margin is needed. It dates back to commit dbeebe72b9d35f6ff807c21c7f217b569fa894f6 where vector 9x7 decoding was introduced.
2020-05-21Speed-up 9x7 IDWD by ~20%Even Rouault
"bench_dwt -I" time goes from 2.8s to 2.2s
2020-05-20bench_dwt.c: add a -I switch to test irreversible FWDT/IDWTEven Rouault
2020-05-20Merge pull request #1211 from sebras/masterEven Rouault
Add check to validate SGcod/SPcoc/SPcod parameter values.
2020-05-20Irreversible decoding: partially revert previous commit, to fix failures in ↵Even Rouault
test suite
2020-05-20Irreversible compression/decompression DWT: use 1/K constant as per standardEven Rouault
The previous constant opj_c13318 was mysteriously equal to 2/K , and in the DWT, we had to divide K and opj_c13318 by 2... The issue was that the band->stepsize computation in tcd.c didn't take into account the log2gain of the band. The effect of this change is expected to be mostly equivalent to the previous situation, except some difference in rounding. But it leads to a dramatic reduction of the mean square error and peak error in the irreversible encoding of issue141.tif !
2020-05-20Irreversible decoding: align code more closely to the standard by avoid ↵Even Rouault
messing up with stepsize (no functional change)
2020-05-20opj_dwt_encode_1_real(): avoid many bound comparisons, similarly to decoding ↵Even Rouault
side
2020-05-20opj_j2k_setup_encoder(): add validation of tile width and height to avoid ↵Even Rouault
potential division by zero
2020-05-20opj_mct_encode_real(): add SSE optimizationEven Rouault
2020-05-20tcd.c: add commentEven Rouault
2020-05-20Encoder: use floating-point operations for irreversible transformationEven Rouault
2020-05-20dwt.c: change sign of constants to match standard and compensate (no ↵Even Rouault
functional change)
2020-05-20Add multithreaded support in the DWT encoder.Even Rouault
Update the bench_dwt utility to have a -decode/-encode switch Measured performance gains for DWT encoder on a Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz (4 cores, hyper threaded) Encoding time: $ ./bin/bench_dwt -encode -num_threads 1 time for dwt_encode: total = 8.348 s, wallclock = 8.352 s $ ./bin/bench_dwt -encode -num_threads 2 time for dwt_encode: total = 9.776 s, wallclock = 4.904 s $ ./bin/bench_dwt -encode -num_threads 4 time for dwt_encode: total = 13.188 s, wallclock = 3.310 s $ ./bin/bench_dwt -encode -num_threads 8 time for dwt_encode: total = 30.024 s, wallclock = 4.064 s Scaling is probably limited by memory access patterns causing memory access to be the bottleneck. The slightly worse results with threads==8 than with thread==4 is due to hyperthreading being not appropriate here.
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-18struct opj_j2k: remove unused fields, and add some documentationEven Rouault
2020-04-17Merge pull request #1244 from rouault/fix_pi_warningsEven Rouault
Fix warnings about signed/unsigned casts in pi.c
2020-04-17color_apply_icc_profile: add checks on the number of components (#1236)szukw000
2020-04-17jp3d/jpwl/mj2/jpip: Fix resource leaks (#1226)Eduardo Barretto
This issues were found by cppcheck and coverity.
2020-04-16Fix warnings about signed/unsigned casts in pi.cEven Rouault
2020-04-16Rename mis-named function opj_tcd_get_encoded_tile_size() to ↵Even Rouault
opj_tcd_get_encoder_input_buffer_size()
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
2020-02-12openjpeg.h: fix values of OPJ_PROFILE_IMF_ constantsEven Rouault