From 2456409a8db781d9ef505fc9e5f9290276ce6807 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Thu, 19 Nov 2020 22:07:39 +0100 Subject: [PATCH] Hack to fix image luminance when cropping subsampled images (#1872). Without this the luminance varies slightly as you crop by odd and even amounts (for YUV420 images). --- src/lib/image.cc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/lib/image.cc b/src/lib/image.cc index 1a5b11ecb..97aeccd76 100644 --- a/src/lib/image.cc +++ b/src/lib/image.cc @@ -183,6 +183,14 @@ Image::crop_scale_window ( /* Size of the image after any crop */ dcp::Size const cropped_size = rounded_crop.apply (size()); + /* Hack: if we're not doing quite the crop that we were asked for, and we carry on scaling + * to the inter_size we were asked for, there is a small but noticeable wobble in the image + * luminance (#1872). This hack means we will jump in steps of the subsampling distance + * in both crop and scale. + */ + inter_size.width = round_width_for_subsampling(inter_size.width, in_desc); + inter_size.height = round_width_for_subsampling(inter_size.height, in_desc); + /* Scale context for a scale from cropped_size to inter_size */ struct SwsContext* scale_context = sws_getContext ( cropped_size.width, cropped_size.height, pixel_format(), -- 2.30.2