From 7e39519864cf40256a31fb6d42818c1a02fa2d63 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Thu, 15 Sep 2022 01:03:51 +0200 Subject: [PATCH] Fix black borders around the preview in some cases (#2331). We need to round the container size to the nearest multiple of 2 so that cropping subsampled sources does not leave gaps. As far as I can see: - the direction that you round x in doesn't matter - it's better to round y up (if you calculate the error in the resulting ratio in each case). --- src/lib/video_content.cc | 2 +- src/wx/film_viewer.cc | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/lib/video_content.cc b/src/lib/video_content.cc index de3d3f3a2..1d1d010a9 100644 --- a/src/lib/video_content.cc +++ b/src/lib/video_content.cc @@ -660,7 +660,7 @@ VideoContent::scaled_size (dcp::Size film_container) } auto size = size_after_crop (); - size.width *= _sample_aspect_ratio.get_value_or(1); + size.width = std::lrint(size.width * _sample_aspect_ratio.get_value_or(1)); /* This is what we will return unless there is any legacy stuff to take into account */ auto auto_size = fit_ratio_within (size.ratio(), film_container); diff --git a/src/wx/film_viewer.cc b/src/wx/film_viewer.cc index b5b2ca972..c56e2f5d2 100644 --- a/src/wx/film_viewer.cc +++ b/src/wx/film_viewer.cc @@ -303,6 +303,16 @@ FilmViewer::calculate_sizes () out_size.width = max (64, out_size.width); out_size.height = max (64, out_size.height); + /* Make sure the video container sizes are always a multiple of 2 so that + * we don't get gaps with subsampled sources (e.g. YUV420) + */ + if (out_size.width % 2) { + out_size.width++; + } + if (out_size.height % 2) { + out_size.height++; + } + _player->set_video_container_size (out_size); } -- 2.30.2