summaryrefslogtreecommitdiff
path: root/src/lib/openjp2/j2k.h
AgeCommit message (Collapse)Author
2022-08-11Cleanup code related to quality layer allocation, and add a few safety checksEven Rouault
2022-02-10Add support for partial bitstream decoding (#1407) (fixes #715)Robert Gabriel Jakabosky
Add a -allow-partial option to opj_decompress utility and a opj_decoder_set_strict_mode() option to the API Co-authored-by: Chris Hafey <chafey@gmail.com>
2022-01-23opj_encoder_set_extra_options(): add a GUARD_BITS=value optionEven Rouault
and add a -GuardBits option to opj_compress. The recently-released SMPTE DCP Bv2.1 Application Profile (link below) says that the number of guard bits in the QCD marker shall be 1 for 2K content and 2 for 4K content. This change allows the number of guard bits to be configured, so that users of openjpeg have the control they need to meet the specification. https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=9161348 This is an alternative implementation of https://github.com/uclouvain/openjpeg/pull/1388 that keeps ABI unchanged.
2021-09-25Added support for high throughput (HTJ2K) decoding.Aous Naman
There are a few limitations: - mixed mode (HT and regular code blocks) is not supported. - ROI in HT blocks is not supported. - Placeholder passes are not supported. - MultiHT sets are not support, only a singleHT set. - there are known issues with some compliance testing files related to the parsing of packet header.
2021-06-07Add support for enabling generation of TLM markers in encoderEven Rouault
Support was already there, but restricted to Cinema and IMF profiles, and 255 tiles * Add -TLM switch added to opj_compress * Make opj_encoder_set_extra_options() function accept a TLM=YES option.
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
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-20Use a #define J2K_MAX_POCS 32 to avoid hard-coded constant (#349)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-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-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-02First change on changes-for-afl-testsszukw000
2017-07-31Catch images broken by AFLszukw000
2017-07-30src/lib/openjp2/*.h: use OPJ_ prefix for inclusion guards instead of ↵Even Rouault
reserved __ (#587)
2017-07-30j2k.c: remove hardcoded constants related to m_state, and useless FIXMEEven Rouault
2017-07-26Spelling fixes (patch by ka7, #890, rebased on top of master)Even Rouault
2017-07-26Fix assertion / memory leak in opj_j2k_merge_ppt() on corrupted images (#939)Even Rouault
Fixes issue on id:000020,sig:06,src:001958,op:flip4,pos:149 that has two SOT markers for the same tile with the same tile part number, causing opj_j2k_merge_ppt() to be called several times.
2017-07-05Remove unused m_DA_x0, m_DA_y0, m_DA_x1, m_DA_y1 members from opj_j2k_dec ↵Even Rouault
structure
2017-06-02MQC/RAW decoder: use an artificial 0xFF 0xFF terminating marker.Even Rouault
This saves comparing the current pointer with the end of buffer pointer. This results at least in tiny speed improvement for raw decoding, and smaller code size for MQC as well. This kills the remains of the raw.h/.c files that were only used for decoding. Encoding using the mqc structure already.
2017-05-15Reformat: apply reformattin on .h files (#128)Even Rouault
2016-09-13Merge branch 'bit-fields-type' of https://github.com/smuehlst/openjpeg into ↵Antonin Descampe
smuehlst-bit-fields-type
2016-07-27Unified bit-field declaration, removed tabs.Stephan Mühlstrasser
2016-07-25Create separate type for bit-fields.Stephan Mühlstrasser
The definition of bit-fields with type OPJ_UINT32 caused complilation errors on IBM iSeries, because OPJ_UINT32 is defined as uint32_t, and uint32_t is defined as unsigned long in <stdint.h>. The definition of bit-fields with an integer type of a specific size doesn't make sense anyway.
2016-05-25Add opj_codec_set_threads() in public API and propagate resulting thread ↵Even Rouault
pool to tcd level By default, only the main thread is used. If opj_codec_set_threads() is not used, but the OPJ_NUM_THREADS environment variable is set, its value will be used to initialize the number of threads. The value can be either an integer number, or "ALL_CPUS". If OPJ_NUM_THREADS is set and this function is called, this function will override the behaviour of the environment variable.
2015-07-31French comments replaced by English onesak-dxdy
2015-07-12Refactor opj_read_ppmmayeut
Update uclouvain/openjpeg#470 Update uclouvain/openjpeg#288
2015-07-12Refactor opj_j2k_read_pptmayeut
Update uclouvain/openjpeg#470 Update uclouvain/openjpeg#532
2015-06-05Merge branch 'master' into issue-254mayeut
2015-05-19[trunk] Add check for at most 1 COD marker per tile. 1 COD marker for MH ↵Matthieu Darbois
(fixes issue 476)
2015-05-16Implement TNsot correction for non conforming filesmayeut
2014-09-19added memory allocation checks (fixes issue 355)Antonin Descampe
2014-04-17[trunk] refactoring of rsiz, profiles, and extensions managementAntonin Descampe
2014-04-03[trunk] updated copyright and added copyright notice required by ISO, in ↵Antonin Descampe
each file; updated AUTHORS, NEWS
2012-12-18[trunk] merge from branch 1.5 a correction about large code-block data ↵Mickael Savinaud
(decoding part) and add tests about issue 5 and issue 62
2012-11-16[trunk] add opj_ prefix to some internal define and use the new opj type ↵Mickael Savinaud
instead of int and float in some files
2012-11-15[trunk]update the copyright, the authors and thanks to respect the licenseMickael Savinaud
2012-11-15[trunk] move opj_bool to OPJ_BOOL to follow the other typeMickael Savinaud
2012-11-15[trunk] rename public symbols with OPJ_ prefixMickael Savinaud
2012-10-25[trunk] [trunk] remove old opj_tcp and rename opj_tcp_v2 to opj_tcpMickael Savinaud
2012-10-25[trunk] [trunk] remove old opj_cp and rename opj_cp_v2 to opj_cpMickael Savinaud
2012-10-25[trunk] rename opj_tcd_truct_v2 to opj_tcd_structMickael Savinaud
2012-10-25[trunk] rename opj_j2k_v2 to opj_j2kMickael Savinaud
2012-10-25[trunk] remove old opj_j2k struct Mickael Savinaud
2012-10-25[trunk] Rework r2077Mathieu Malaterre
r2077 did expose too much of the detail implementation of OpenJPEG. Rework dependencies in between JPIP file level details and JPIP client/server arch. Move JPIP file level functionalities back into OpenJP2 as was the case in openjpeg 1.5.x. Use new cio func.
2012-10-15[trunk] fix a compilation error with windows and new public function ↵Mickael Savinaud
opj_j2k_start_compress
2012-10-15[trunk] Fix compilation:Mathieu Malaterre
- using mingw32 compiler (missing exported symbols) - using -fvisibility=hidden (gcc on UNIX)
2012-09-28[trunk] Start FolderReorgProposal taskMathieu Malaterre
Update issue 177