summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2023-10-28 01:51:51 +0200
committerCarl Hetherington <cth@carlh.net>2023-10-28 02:30:08 +0200
commit157728fb69167da75aa04f6d78fdb6cc274a7db2 (patch)
tree07bcf63f13484e9c5275766060d16e579fa28ea0
parent6e1c0f245a3940da7da175a978c0561711cfb447 (diff)
Use updated libdcp, including an optimisation for rgb-onto-xyz12.
-rw-r--r--cscript2
-rw-r--r--src/lib/dcp_video.cc9
-rw-r--r--src/lib/dcp_video.h2
-rw-r--r--src/lib/image.cc10
-rw-r--r--src/wx/video_waveform_plot.cc2
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<const PlayerVideo> frame, shared_ptr<const cxml::
}
shared_ptr<dcp::OpenJPEGImage>
-DCPVideo::convert_to_xyz (shared_ptr<const PlayerVideo> frame, dcp::NoteHandler note)
+DCPVideo::convert_to_xyz (shared_ptr<const PlayerVideo> frame)
{
shared_ptr<dcp::OpenJPEGImage> xyz;
@@ -108,8 +108,7 @@ DCPVideo::convert_to_xyz (shared_ptr<const PlayerVideo> frame, dcp::NoteHandler
image->data()[0],
image->size(),
image->stride()[0],
- frame->colour_conversion().get(),
- note
+ frame->colour_conversion().get()
);
} else {
xyz = make_shared<dcp::OpenJPEGImage>(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<const DCPVideo> other) const;
- static std::shared_ptr<dcp::OpenJPEGImage> convert_to_xyz (std::shared_ptr<const PlayerVideo> frame, dcp::NoteHandler note);
+ static std::shared_ptr<dcp::OpenJPEGImage> convert_to_xyz(std::shared_ptr<const PlayerVideo> 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<uint16_t*>(target.data[0] + ty * target.stride[0] + target.start_x * target.bpp);
auto op = reinterpret_cast<OtherType*>(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<PlayerVideo> 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 ();
}