Even Rouault
7e2b6bebff
Add capability to decode only a subset of all components of an image.
...
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-19 17:06:19 +02:00
Even Rouault
ce199f42e7
src/bin/jp3d/convert.c: add missing fclose() in error code path ( #1018 )
2017-09-19 12:48:12 +02:00
Even Rouault
fdef69b43c
Fix warnings and errors when compiling with a c++ compiler ( #1021 )
2017-09-19 12:46:20 +02:00
Even Rouault
18f6696372
Fix compilation with AppleClang 8.1.0.8020042 ( #1020 )
2017-09-19 12:13:34 +02:00
Even Rouault
3dfc6ca2bc
Build: make sure that -DBUILD_SHARED_LIBS:bool=off is honoured to build only the static lib ( #1019 )
2017-09-17 12:17:49 +02:00
Even Rouault
28094e1ebf
opj_tcd_mct_decode(): avoid heap buffer overflow when components have not the same number of resolutions. Also fixes an issue with subtile decoding. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3331 . Credit to OSS Fuzz
2017-09-08 10:56:49 +02:00
Even Rouault
33167ddc13
opj_j2k_update_image_data(): restrict optimized path
2017-09-08 09:53:52 +02:00
Even Rouault
b73ce715d2
Use opj_image_data_free() where appropriate (adapted from dab9db0723
, #1014 )
2017-09-08 09:16:51 +02:00
Even Rouault
5abd86b14b
Properly fix cc893a4ebf
to avoid heap-buffer-overflow when numcomps < 3
2017-09-07 18:01:33 +02:00
Even Rouault
51a1dcaa6e
Avoid malloc poisoning issue when including <pthread.h> of uclibc ( #1013 )
2017-09-07 17:52:59 +02:00
Even Rouault
cc893a4ebf
opj_tcd_mct_decode(): fix checks to verify MCT can be done safely. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3305 (master only)
2017-09-07 15:32:54 +02:00
Even Rouault
c67e1cd73f
Fix invalid access out of bounds, and bad behaviour, when calling repeatdly opj_get_decoded_tile() on an image with a color palette
2017-09-06 17:33:38 +02:00
Even Rouault
297f202104
Fix 2.2.0 regression when reading codestream with reperated calls to 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-06 16:49:28 +02:00
Even Rouault
003759a482
Fix null pointer dereference on partial tile decoding when they are empty. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3297 (master only)
2017-09-06 15:59:19 +02:00
Even Rouault
e656822f92
Add knownfailures-Ubuntu12.04-gcc4.6.3-x86_64-Release-3rdP.txt
...
For some reason, the OPJ_CI_ARCH=x86_64 OPJ_CI_BUILD_CONFIGURATION=Release OPJ_NUM_THREADS=2
configuration fails once PR1010 has been merged in master
( https://travis-ci.org/uclouvain/openjpeg/jobs/272219011 ) whereas (almost) the same
code in my branch didn't fail per https://travis-ci.org/rouault/openjpeg/jobs/271738113
The errors we get are the same as with the other x86_64 compilers, so nothing alarming here.
2017-09-05 23:32:03 +02:00
Even Rouault
968e36bbd9
Merge pull request #1010 from rouault/subtile_decoding_stage3
...
Subtile decoding: memory use reduction and perf improvements
2017-09-05 22:18:58 +02:00
Even Rouault
579b8937ea
Replace uses of size_t by OPJ_SIZE_T
2017-09-04 17:35:52 +02:00
Even Rouault
3a382d3123
opj_getopt.c: avoid crash on invalid input ( #301 )
2017-09-03 00:30:36 +02:00
Even Rouault
e5ab1682a1
Improve error message when specifying a too big cp_reduce parameter ( #474 )
2017-09-02 09:10:53 +02:00
Even Rouault
c1e0fba0c4
opj_v4dwt_decode_step1_sse(): rework a bit to improve code generation
2017-09-01 22:23:29 +02:00
Even Rouault
676d4c807f
opj_j2k_update_image_data(): avoid allocating image buffer if we can just reuse the tile buffer one
2017-09-01 22:23:29 +02:00
Even Rouault
4c7effa6bc
opj_t1_clbl_decode_processor(): use SSE2 in subtile decoding code path, for irreversible
2017-09-01 22:23:29 +02:00
Even Rouault
2c365fe0ec
Replace error message 'Not enough memory for tile data' by 'Size of tile data exceeds system limits' (refs https://github.com/uclouvain/openjpeg/pull/730#issuecomment-326654188 )
2017-09-01 22:23:29 +02:00
Even Rouault
559d16e8f4
opj_t1_decode_cblk(): move some code to codeblock processor for (theoretical) better multi-threading in subtile decoding
2017-09-01 22:23:29 +02:00
Even Rouault
7017e67a01
sparse_array: optimizations for lossy case
2017-09-01 22:23:29 +02:00
Even Rouault
b428b8c7e7
opj_tcd_rateallocate(): make sure to use all passes for a lossless layer ( #1009 )
...
And save a useless loop, which should be a tiny faster.
2017-09-01 20:02:09 +02:00
Even Rouault
7aa071aa27
opj_j2k_setup_encoder(): emit warnings if tcp_rates are not decreasing or tcp_distoratio are not increasing ( #1009 )
2017-09-01 19:49:01 +02:00
Even Rouault
a538815c77
opj_j2k_setup_encoder(): avoid potential int overflow in computations related to max_cs_size
2017-09-01 19:27:56 +02:00
Even Rouault
09929bb615
opj_compress help: revert 3257261776
and 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-01 19:16:35 +02:00
Even Rouault
3257261776
opj_compress help: indicate 0 value, instead of 1, for -r parameter to get lossless encoding ( #1009 )
2017-09-01 17:33:23 +02:00
Even Rouault
8a17be8945
opj_v4dwt_decode_step2_sse(): loop unroll
2017-09-01 16:31:08 +02:00
Even Rouault
83b5a168ec
opj_dwt_decode_partial_97(): simplify/more efficient use of sparse arrays in vertical pass
2017-09-01 16:31:06 +02:00
Even Rouault
ae19001ba4
opj_tcd_dc_level_shift_decode(): optimize lossy case
2017-09-01 16:31:04 +02:00
Even Rouault
470f3ed416
opj_dwt_decode_partial_1_parallel(): add SSE2 optimization
2017-09-01 16:31:02 +02:00
Even Rouault
873004c615
Sub-tile decoding: speed up vertical pass in IDWT5x3 by processing 4 cols at a time
2017-09-01 16:31:00 +02:00
Even Rouault
ccac773556
Tiny perf improvement in T1 stage for subtile decoding
2017-09-01 16:30:58 +02:00
Even Rouault
18635df518
test_decode_area: accept user bounds in -strip_height mode
2017-09-01 16:30:56 +02:00
Even Rouault
82a43d8035
Optimize opj_dwt_decode_partial_1() when cas == 0
2017-09-01 16:30:54 +02:00
Even Rouault
1644665a91
opj_j2k_update_image_data(): avoid zero-ing the buffer if not needed
2017-09-01 16:30:52 +02:00
Even Rouault
b2cc8f7f81
Optimize reading/write into sparse array
2017-09-01 16:30:50 +02:00
Even Rouault
0ae3cba340
Allow several repeated calls to opj_set_decode_area() and opj_decode() for 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-01 16:30:48 +02:00
Even Rouault
5d07d463fd
opj_j2k_decode_tiles(): apply whole single tile image decoding optimization to reading at reduced resolution as well
2017-09-01 16:30:45 +02:00
Even Rouault
98b9310361
Various changes to allow tile buffers of more than 4giga pixels
...
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-01 16:30:44 +02:00
Even Rouault
008a12d4fc
TCD: allow tile buffer to be greater than 4GB on 64 bit hosts (but number of pixels must remain under 4 billion)
2017-09-01 16:30:41 +02:00
Even Rouault
d1299d9670
Fix compiler warning in release mode
2017-09-01 16:30:39 +02:00
Even Rouault
d5153ba404
Remove limitation that prevents from opening images bigger than 4 billion pixels
...
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-01 16:30:37 +02:00
Even Rouault
c37e360a51
opj_tcd_init_tile(): fix typo on overflow detection condition (introduced in previous commit)
2017-09-01 16:30:35 +02:00
Even Rouault
eee5104a88
opj_dwt_decode_partial_tile(): avoid undefined behaviour in lifting operation by properly initializing working buffer
2017-09-01 16:30:32 +02:00
Even Rouault
f9e9942330
Sub-tile decoding: only allocate tile component buffer of the needed dimension
...
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-01 16:30:29 +02:00
Even Rouault
aa7198146b
opj_compress: reorder checks related to code block dimensions, to avoid potential int overflow
2017-09-01 10:26:53 +02:00