summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2024-11-25 22:04:33 +0100
committerGitHub <noreply@github.com>2024-11-25 22:04:33 +0100
commitd5573aa5b8bb4d798fa7eb176f41ca46eccd1942 (patch)
treecdd18a20abe983a96f0ea329ac815854b991936c /src/lib
parent05de3bfdfed79f4e56d041bb970c5ec4f4c84716 (diff)
parent2be5f148ebff79e7456c77e57f85af640cf211de (diff)
Merge pull request #1560 from rouault/tune_TPSOT_FIX
Do not turn on 'TPsot==TNsot detection fix' when TNsot==1, and
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/openjp2/j2k.c19
-rw-r--r--src/lib/openjp2/openjpeg.h12
2 files changed, 24 insertions, 7 deletions
diff --git a/src/lib/openjp2/j2k.c b/src/lib/openjp2/j2k.c
index dfa51e5f..d3d630c8 100644
--- a/src/lib/openjp2/j2k.c
+++ b/src/lib/openjp2/j2k.c
@@ -6764,6 +6764,9 @@ void opj_j2k_decoder_set_strict_mode(opj_j2k_t *j2k, OPJ_BOOL strict)
{
if (j2k) {
j2k->m_cp.strict = strict;
+ if (strict) {
+ j2k->m_specific_param.m_decoder.m_nb_tile_parts_correction_checked = 1;
+ }
}
}
@@ -9965,11 +9968,21 @@ OPJ_BOOL opj_j2k_read_tile_header(opj_j2k_t * p_j2k,
if (p_j2k->m_specific_param.m_decoder.m_can_decode &&
!p_j2k->m_specific_param.m_decoder.m_nb_tile_parts_correction_checked) {
/* Issue 254 */
- OPJ_BOOL l_correction_needed;
+ OPJ_BOOL l_correction_needed = OPJ_FALSE;
p_j2k->m_specific_param.m_decoder.m_nb_tile_parts_correction_checked = 1;
- if (!opj_j2k_need_nb_tile_parts_correction(p_stream,
- p_j2k->m_current_tile_number, &l_correction_needed, p_manager)) {
+ if (p_j2k->m_cp.tcps[p_j2k->m_current_tile_number].m_nb_tile_parts == 1) {
+ /* Skip opj_j2k_need_nb_tile_parts_correction() if there is
+ * only a single tile part declared. The
+ * opj_j2k_need_nb_tile_parts_correction() hack was needed
+ * for files with 5 declared tileparts (where they were
+ * actually 6).
+ * Doing it systematically hurts performance when reading
+ * Sentinel2 L1C JPEG2000 files as explained in
+ * https://lists.osgeo.org/pipermail/gdal-dev/2024-November/059805.html
+ */
+ } else if (!opj_j2k_need_nb_tile_parts_correction(p_stream,
+ p_j2k->m_current_tile_number, &l_correction_needed, p_manager)) {
opj_event_msg(p_manager, EVT_ERROR,
"opj_j2k_apply_nb_tile_parts_correction error\n");
return OPJ_FALSE;
diff --git a/src/lib/openjp2/openjpeg.h b/src/lib/openjp2/openjpeg.h
index 113481bb..59abd323 100644
--- a/src/lib/openjp2/openjpeg.h
+++ b/src/lib/openjp2/openjpeg.h
@@ -546,7 +546,7 @@ typedef struct opj_cparameters {
} opj_cparameters_t;
#define OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG 0x0001
-#define OPJ_DPARAMETERS_DUMP_FLAG 0x0002
+#define OPJ_DPARAMETERS_DUMP_FLAG 0x0002
/**
* Decompression parameters
@@ -1348,9 +1348,13 @@ OPJ_API OPJ_BOOL OPJ_CALLCONV opj_setup_decoder(opj_codec_t *p_codec,
opj_dparameters_t *parameters);
/**
- * Set strict decoding parameter for this decoder. If strict decoding is enabled, partial bit
- * streams will fail to decode. If strict decoding is disabled, the decoder will decode partial
- * bitstreams as much as possible without erroring
+ * Set strict decoding parameter for this decoder.
+ * If strict decoding is enabled, partial bit streams will fail to decode, and
+ * the check for invalid TPSOT values added in https://github.com/uclouvain/openjpeg/pull/514
+ * will be disabled.
+ * If strict decoding is disabled, the decoder will decode partial
+ * bitstreams as much as possible without erroring, and the TPSOT fixing logic
+ * will be enabled.
*
* @param p_codec decompressor handler
* @param strict OPJ_TRUE to enable strict decoding, OPJ_FALSE to disable