From 157728fb69167da75aa04f6d78fdb6cc274a7db2 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sat, 28 Oct 2023 01:51:51 +0200 Subject: [PATCH] Use updated libdcp, including an optimisation for rgb-onto-xyz12. --- cscript | 2 +- src/lib/dcp_video.cc | 9 ++++----- src/lib/dcp_video.h | 2 +- src/lib/image.cc | 10 +++++----- src/wx/video_waveform_plot.cc | 2 +- 5 files changed, 12 insertions(+), 13 deletions(-) diff --git a/cscript b/cscript index be61c5330..a70f73571 100644 --- a/cscript +++ b/cscript @@ -508,7 +508,7 @@ def dependencies(target, options): # Use distro-provided FFmpeg on Arch deps = [] - deps.append(('libdcp', 'v1.8.86')) + deps.append(('libdcp', '687e46f8770ee946ce149e2b893f3626052b6881')) deps.append(('libsub', 'v1.6.44')) deps.append(('leqm-nrt', '30dcaea1373ac62fba050e02ce5b0c1085797a23')) deps.append(('rtaudio', 'f619b76')) diff --git a/src/lib/dcp_video.cc b/src/lib/dcp_video.cc index 8eb76fdd6..217b72183 100644 --- a/src/lib/dcp_video.cc +++ b/src/lib/dcp_video.cc @@ -98,7 +98,7 @@ DCPVideo::DCPVideo (shared_ptr frame, shared_ptr -DCPVideo::convert_to_xyz (shared_ptr frame, dcp::NoteHandler note) +DCPVideo::convert_to_xyz (shared_ptr frame) { shared_ptr xyz; @@ -108,8 +108,7 @@ DCPVideo::convert_to_xyz (shared_ptr frame, dcp::NoteHandler image->data()[0], image->size(), image->stride()[0], - frame->colour_conversion().get(), - note + frame->colour_conversion().get() ); } else { xyz = make_shared(image->data()[0], image->size(), image->stride()[0]); @@ -131,7 +130,7 @@ DCPVideo::encode_locally () const int const minimum_size = 16384; LOG_DEBUG_ENCODE("Using minimum frame size %1", minimum_size); - auto xyz = convert_to_xyz (_frame, boost::bind(&Log::dcp_log, dcpomatic_log.get(), _1, _2)); + auto xyz = convert_to_xyz(_frame); int noise_amount = 2; int pixel_skip = 16; while (true) { @@ -156,7 +155,7 @@ DCPVideo::encode_locally () const * convert_to_xyz() again because compress_j2k() corrupts its xyz parameter. */ - xyz = convert_to_xyz (_frame, boost::bind(&Log::dcp_log, dcpomatic_log.get(), _1, _2)); + xyz = convert_to_xyz(_frame); auto size = xyz->size (); auto pixels = size.width * size.height; dcpomatic::RNG rng(42); diff --git a/src/lib/dcp_video.h b/src/lib/dcp_video.h index 33df0942c..bf95ccfe6 100644 --- a/src/lib/dcp_video.h +++ b/src/lib/dcp_video.h @@ -64,7 +64,7 @@ public: bool same (std::shared_ptr other) const; - static std::shared_ptr convert_to_xyz (std::shared_ptr frame, dcp::NoteHandler note); + static std::shared_ptr convert_to_xyz(std::shared_ptr frame); private: diff --git a/src/lib/image.cc b/src/lib/image.cc index 578f6ca56..6feea10ca 100644 --- a/src/lib/image.cc +++ b/src/lib/image.cc @@ -756,8 +756,8 @@ alpha_blend_onto_xyz12le(TargetParams const& target, OtherParams const& other, i auto conv = dcp::ColourConversion::srgb_to_xyz(); double fast_matrix[9]; dcp::combined_rgb_to_xyz(conv, fast_matrix); - auto lut_in = conv.in()->lut(0, 1, 8, false); - auto lut_out = conv.out()->lut(0, 1, 16, true); + auto lut_in = conv.in()->double_lut(0, 1, 8, false); + auto lut_out = conv.out()->int_lut(0, 1, 16, true, 65535); for (int ty = target.start_y, oy = other.start_y; ty < target.size.height && oy < other.size.height; ++ty, ++oy) { auto tp = reinterpret_cast(target.data[0] + ty * target.stride[0] + target.start_x * target.bpp); auto op = reinterpret_cast(other.data[0] + oy * other.stride[0]); @@ -775,9 +775,9 @@ alpha_blend_onto_xyz12le(TargetParams const& target, OtherParams const& other, i 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)] * 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[0] = lut_out[lrint(x * 65535)] * alpha + tp[0] * (1 - alpha); + tp[1] = lut_out[lrint(y * 65535)] * alpha + tp[1] * (1 - alpha); + tp[2] = lut_out[lrint(z * 65535)] * alpha + tp[2] * (1 - alpha); tp += target.bpp / 2; op += other.bpp / sizeof(OtherType); diff --git a/src/wx/video_waveform_plot.cc b/src/wx/video_waveform_plot.cc index 826e17359..f6fa93940 100644 --- a/src/wx/video_waveform_plot.cc +++ b/src/wx/video_waveform_plot.cc @@ -195,7 +195,7 @@ VideoWaveformPlot::set_image (shared_ptr image) /* We must copy the PlayerVideo here as we will call ::image() on it, potentially with a different pixel_format than was used when ::prepare() was called. */ - _image = DCPVideo::convert_to_xyz (image->shallow_copy(), [](dcp::NoteType, string) {}); + _image = DCPVideo::convert_to_xyz(image->shallow_copy()); _dirty = true; Refresh (); } -- 2.30.2