You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// Estimate the number of layers. This is consistent with what's done for j2c encoding in LLImageJ2CKDU::encodeImpl().
277
277
constexpr S32 precision = 8; // assumed bitrate per component channel, might change in future for HDR support
278
278
constexpr S32 max_components = 4; // assumed the file has four components; three color and alpha
279
-
S32 nb_layers = 1;
280
-
const S32 surface = w*h;
281
-
S32 s = 64*64;
282
-
S32 totalbytes = (S32)(s * max_components * precision * rate); // first level computed before loop
283
-
while (surface > s)
279
+
// Use MAX_IMAGE_SIZE_DEFAULT (currently 2048) if either dimension is unknown (zero)
280
+
S32 width = (w > 0) ? w : 2048;
281
+
S32 height = (h > 0) ? h : 2048;
282
+
S32 max_dimension = llmax(width, height); // Find largest dimension
283
+
S32 block_area = MAX_BLOCK_SIZE * MAX_BLOCK_SIZE; // Calculated initial block area from established max block size (currently 64)
284
+
block_area *= (max_dimension / MAX_BLOCK_SIZE / max_components); // Adjust initial block area by ratio of largest dimension to block size per component
285
+
S32 totalbytes = (S32) (block_area * max_components * precision); // First block layer computed before loop without compression rate
286
+
S32 block_layers = 1; // Start at layer 1 since first block layer is computed outside loop
287
+
while (block_layers < 6) // Walk five layers for the five discards in JPEG2000
0 commit comments