Basic release notes support (#2282).
[dcpomatic.git] / src / lib / image.cc
index 799d7af49da172921006e664ef2044bd36ed179c..f86c105d4f8aa2d2ab76ce465fd8820d44bfa9bd 100644 (file)
@@ -715,8 +715,8 @@ Image::alpha_blend (shared_ptr<const Image> other, Position<int> position)
                auto conv = dcp::ColourConversion::srgb_to_xyz();
                double fast_matrix[9];
                dcp::combined_rgb_to_xyz (conv, fast_matrix);
-               double const * lut_in = conv.in()->lut (8, false);
-               double const * lut_out = conv.out()->lut (16, true);
+               auto lut_in = conv.in()->lut(0, 1, 8, false);
+               auto lut_out = conv.out()->lut(0, 1, 16, true);
                int const this_bpp = 6;
                for (int ty = start_ty, oy = start_oy; ty < size().height && oy < other->size().height; ++ty, ++oy) {
                        uint16_t* tp = reinterpret_cast<uint16_t*> (data()[0] + ty * stride()[0] + start_tx * this_bpp);
@@ -730,14 +730,14 @@ Image::alpha_blend (shared_ptr<const Image> other, Position<int> position)
                                double const b = lut_in[op[blue]];
 
                                /* RGB to XYZ, including Bradford transform and DCI companding */
-                               double const x = max (0.0, min (65535.0, r * fast_matrix[0] + g * fast_matrix[1] + b * fast_matrix[2]));
-                               double const y = max (0.0, min (65535.0, r * fast_matrix[3] + g * fast_matrix[4] + b * fast_matrix[5]));
-                               double const z = max (0.0, min (65535.0, r * fast_matrix[6] + g * fast_matrix[7] + b * fast_matrix[8]));
+                               double const x = max(0.0, min(1.0, r * fast_matrix[0] + g * fast_matrix[1] + b * fast_matrix[2]));
+                               double const y = max(0.0, min(1.0, r * fast_matrix[3] + g * fast_matrix[4] + b * fast_matrix[5]));
+                               double const z = max(0.0, min(1.0, r * fast_matrix[6] + g * fast_matrix[7] + b * fast_matrix[8]));
 
                                /* Out gamma LUT and blend */
-                               tp[0] = lrint(lut_out[lrint(x)] * 65535) * alpha + tp[0] * (1 - alpha);
-                               tp[1] = lrint(lut_out[lrint(y)] * 65535) * alpha + tp[1] * (1 - alpha);
-                               tp[2] = lrint(lut_out[lrint(z)] * 65535) * alpha + tp[2] * (1 - alpha);
+                               tp[0] = lrint(lut_out[lrint(x * 65535)] * 65535) * alpha + tp[0] * (1 - alpha);
+                               tp[1] = lrint(lut_out[lrint(y * 65535)] * 65535) * alpha + tp[1] * (1 - alpha);
+                               tp[2] = lrint(lut_out[lrint(z * 65535)] * 65535) * alpha + tp[2] * (1 - alpha);
 
                                tp += this_bpp / 2;
                                op += other_bpp;