Skip to content

Commit 50727a6

Browse files
committed
Add support for 32-line HTJ2K Compressor
Signed-off-by: Pierre-Anthony Lemieux <[email protected]>
1 parent e8e0b99 commit 50727a6

File tree

14 files changed

+87
-54
lines changed

14 files changed

+87
-54
lines changed

src/lib/OpenEXR/ImfCRgbaFile.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,9 @@ typedef struct ImfRgba ImfRgba;
8080
#define IMF_B44A_COMPRESSION 7
8181
#define IMF_DWAA_COMPRESSION 8
8282
#define IMF_DWAB_COMPRESSION 9
83-
#define IMF_HTJ2K_COMPRESSION 10
84-
#define IMF_NUM_COMPRESSION_METHODS 11
83+
#define IMF_HTJ2K256_COMPRESSION 10
84+
#define IMF_HTJ2K32_COMPRESSION 11
85+
#define IMF_NUM_COMPRESSION_METHODS 12
8586

8687
/*
8788
** Channels; values must be the same as in Imf::RgbaChannels.

src/lib/OpenEXR/ImfCompression.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,11 +177,17 @@ static const CompressionDesc IdToDesc[] = {
177177
true,
178178
false),
179179
CompressionDesc (
180-
"htj2k",
180+
"htj2k256",
181181
"High-Throughput JPEG 2000 (OpenJPH, 256 lines)",
182182
256,
183183
true,
184184
false),
185+
CompressionDesc (
186+
"htj2k32",
187+
"High-Throughput JPEG 2000 (OpenJPH, 32 lines)",
188+
32,
189+
true,
190+
false),
185191
};
186192
// clang-format on
187193

@@ -198,7 +204,8 @@ static const std::map<std::string, Compression> CompressionNameToId = {
198204
{"b44a", Compression::B44A_COMPRESSION},
199205
{"dwaa", Compression::DWAA_COMPRESSION},
200206
{"dwab", Compression::DWAB_COMPRESSION},
201-
{"htj2k", Compression::HTJ2K_COMPRESSION},
207+
{"htj2k256", Compression::HTJ2K256_COMPRESSION},
208+
{"htj2k32", Compression::HTJ2K32_COMPRESSION},
202209
};
203210

204211
#define UNKNOWN_COMPRESSION_ID_MSG "INVALID COMPRESSION ID"

src/lib/OpenEXR/ImfCompression.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,9 @@ enum IMF_EXPORT_ENUM Compression
5151
// wise and faster to decode full frames
5252
// than DWAA_COMPRESSION.
5353

54-
HTJ2K_COMPRESSION = 10, // High-Throughput JPEG2000 (HTJ2K), 256 scanlines
54+
HTJ2K256_COMPRESSION = 10, // High-Throughput JPEG2000 (HTJ2K), 256 scanlines
55+
56+
HTJ2K32_COMPRESSION = 11, // High-Throughput JPEG2000 (HTJ2K), 32 scanlines
5557

5658
NUM_COMPRESSION_METHODS // number of different compression methods
5759
};

src/lib/OpenEXR/ImfCompressor.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -336,10 +336,14 @@ newCompressor (Compression c, size_t maxScanLineSize, const Header& hdr)
336336
DwaCompressor::STATIC_HUFFMAN);
337337
break;
338338

339-
case HTJ2K_COMPRESSION:
339+
case HTJ2K256_COMPRESSION:
340340

341341
return new HTCompressor (hdr, static_cast<int> (maxScanLineSize), 256);
342342

343+
case HTJ2K32_COMPRESSION:
344+
345+
return new HTCompressor (hdr, static_cast<int> (maxScanLineSize), 32);
346+
343347
default: break;
344348
}
345349
// clang-format on
@@ -421,7 +425,8 @@ newTileCompressor (
421425
DwaCompressor::STATIC_HUFFMAN);
422426
break;
423427

424-
case HTJ2K_COMPRESSION:
428+
case HTJ2K256_COMPRESSION:
429+
case HTJ2K32_COMPRESSION:
425430

426431
return new HTCompressor (
427432
hdr,

src/lib/OpenEXRCore/compression.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -241,9 +241,10 @@ int exr_compression_lines_per_chunk (exr_compression_t comptype)
241241
case EXR_COMPRESSION_PIZ:
242242
case EXR_COMPRESSION_B44:
243243
case EXR_COMPRESSION_B44A:
244+
case EXR_COMPRESSION_HTJ2K32:
244245
case EXR_COMPRESSION_DWAA: linePerChunk = 32; break;
245246
case EXR_COMPRESSION_DWAB: linePerChunk = 256; break;
246-
case EXR_COMPRESSION_HTJ2K: linePerChunk = 256; break;
247+
case EXR_COMPRESSION_HTJ2K256: linePerChunk = 256; break;
247248
case EXR_COMPRESSION_LAST_TYPE:
248249
default:
249250
/* ERROR CONDITION */
@@ -377,7 +378,8 @@ exr_compress_chunk (exr_encode_pipeline_t* encode)
377378
case EXR_COMPRESSION_B44A: rv = internal_exr_apply_b44a (encode); break;
378379
case EXR_COMPRESSION_DWAA: rv = internal_exr_apply_dwaa (encode); break;
379380
case EXR_COMPRESSION_DWAB: rv = internal_exr_apply_dwab (encode); break;
380-
case EXR_COMPRESSION_HTJ2K:
381+
case EXR_COMPRESSION_HTJ2K32:
382+
case EXR_COMPRESSION_HTJ2K256:
381383
rv = internal_exr_apply_ht (encode); break;
382384
case EXR_COMPRESSION_LAST_TYPE:
383385
default:
@@ -455,7 +457,8 @@ decompress_data (
455457
rv = internal_exr_undo_dwab (
456458
decode, packbufptr, packsz, unpackbufptr, unpacksz);
457459
break;
458-
case EXR_COMPRESSION_HTJ2K:
460+
case EXR_COMPRESSION_HTJ2K256:
461+
case EXR_COMPRESSION_HTJ2K32:
459462
rv = internal_exr_undo_ht (
460463
decode, packbufptr, packsz, unpackbufptr, unpacksz);
461464
break;

src/lib/OpenEXRCore/debug.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,8 @@ print_attr (const exr_attribute_t* a, int verbose)
8585
"b44a",
8686
"dwaa",
8787
"dwab",
88-
"htj2k"};
88+
"htj2k256",
89+
"htj2k32"};
8990
printf (
9091
"'%s'", (a->uc < EXR_COMPRESSION_LAST_TYPE ? compressionnames[a->uc] : "<UNKNOWN>"));
9192
if (verbose) printf (" (0x%02X)", a->uc);

src/lib/OpenEXRCore/openexr_attr.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ typedef enum
4545
EXR_COMPRESSION_B44A = 7,
4646
EXR_COMPRESSION_DWAA = 8,
4747
EXR_COMPRESSION_DWAB = 9,
48-
EXR_COMPRESSION_HTJ2K = 10,
48+
EXR_COMPRESSION_HTJ2K256 = 10,
49+
EXR_COMPRESSION_HTJ2K32 = 11,
4950
EXR_COMPRESSION_LAST_TYPE /**< Invalid value, provided for range checking. */
5051
} exr_compression_t;
5152

src/test/OpenEXRTest/testCompressionApi.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@ testCompressionApi (const string& tempDir)
2828
cout << "Testing compression API functions." << endl;
2929

3030
// update this if you add a new compressor.
31-
string codecList = "none/rle/zips/zip/piz/pxr24/b44/b44a/dwaa/dwab/htj2k";
31+
string codecList = "none/rle/zips/zip/piz/pxr24/b44/b44a/dwaa/dwab/htj2k256/htj2k32";
3232

3333
int numMethods = static_cast<int> (NUM_COMPRESSION_METHODS);
3434
// update this if you add a new compressor.
35-
assert (numMethods == 11);
35+
assert (numMethods == 12);
3636

3737
for (int i = 0; i < numMethods; i++)
3838
{

src/wrappers/python/Imath.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,11 @@ class Compression(Enumerated):
9494
B44A_COMPRESSION = 7
9595
DWAA_COMPRESSION = 8
9696
DWAB_COMPRESSION = 9
97-
HTJ2K_COMPRESSION = 10
97+
HTJ2K256_COMPRESSION = 10
98+
HTJ2K32_COMPRESSION = 11
9899
names = [
99100
"NO_COMPRESSION", "RLE_COMPRESSION", "ZIPS_COMPRESSION", "ZIP_COMPRESSION", "PIZ_COMPRESSION", "PXR24_COMPRESSION",
100-
"B44_COMPRESSION", "B44A_COMPRESSION", "DWAA_COMPRESSION", "DWAB_COMPRESSION", "HTJ2K_COMPRESSION"
101+
"B44_COMPRESSION", "B44A_COMPRESSION", "DWAA_COMPRESSION", "DWAB_COMPRESSION", "HTJ2K256_COMPRESSION", "HTJ2K32_COMPRESSION"
101102
]
102103

103104
class PixelType(Enumerated):

src/wrappers/python/PyOpenEXR.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2360,7 +2360,8 @@ PYBIND11_MODULE(OpenEXR, m)
23602360
.value("B44A_COMPRESSION", B44A_COMPRESSION)
23612361
.value("DWAA_COMPRESSION", DWAA_COMPRESSION)
23622362
.value("DWAB_COMPRESSION", DWAB_COMPRESSION)
2363-
.value("HTJ2K_COMPRESSION", HTJ2K_COMPRESSION)
2363+
.value("HTJ2K256_COMPRESSION", HTJ2K256_COMPRESSION)
2364+
.value("HTJ2K32_COMPRESSION", HTJ2K32_COMPRESSION)
23642365
.value("NUM_COMPRESSION_METHODS", NUM_COMPRESSION_METHODS)
23652366
.export_values();
23662367

@@ -2713,7 +2714,8 @@ PYBIND11_MODULE(OpenEXR, m)
27132714
B44A_COMPRESSION
27142715
DWAA_COMPRESSION
27152716
DWAB_COMPRESSION
2716-
HTJ2K_COMPRESSION
2717+
HTJ2K256_COMPRESSION
2718+
HTJ2K32_COMPRESSION
27172719
)pbdoc")
27182720
.def_readwrite("header", &PyPart::header,
27192721
R"pbdoc(

0 commit comments

Comments
 (0)