- if (_j2k->opj_image()->comps[0].prec < 12) {
- int const shift = 12 - _j2k->opj_image()->comps[0].prec;
+ if (_forced_reduction) {
+ reduce = *_forced_reduction;
+ } else {
+ while (target_size && (_size.width / pow(2, reduce)) > target_size->width && (_size.height / pow(2, reduce)) > target_size->height) {
+ ++reduce;
+ }
+
+ --reduce;
+ reduce = max (0, reduce);
+ }
+
+ _decompressed = dcp::decompress_j2k (const_cast<uint8_t*> (_data.data().get()), _data.size (), reduce);
+
+ if (_decompressed->precision(0) < 12) {
+ int const shift = 12 - _decompressed->precision (0);