diff options
| author | Carl Hetherington <cth@carlh.net> | 2024-02-21 10:47:38 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2024-02-21 18:48:53 +0100 |
| commit | 3ffd0163026be24e5373e0674c3301ed37546e44 (patch) | |
| tree | 918e6de08fb1efff2098148295fa60a614102c8e /src/wx | |
| parent | a9b1c1cb65e1902a64430977cf698054e131a6f4 (diff) | |
Make DCPExaminer::size() optional and deal with the consequences.v2.16.78
This means we can fix the case of a VF having no known size in a nice way,
in turn fixing problems caused by the fix to #2775.
Diffstat (limited to 'src/wx')
| -rw-r--r-- | src/wx/content_menu.cc | 9 | ||||
| -rw-r--r-- | src/wx/player_information.cc | 22 | ||||
| -rw-r--r-- | src/wx/video_panel.cc | 5 |
3 files changed, 25 insertions, 11 deletions
diff --git a/src/wx/content_menu.cc b/src/wx/content_menu.cc index 700683bd2..4af5a71b7 100644 --- a/src/wx/content_menu.cc +++ b/src/wx/content_menu.cc @@ -548,12 +548,13 @@ ContentMenu::auto_crop () DCPOMATIC_ASSERT (film); auto const content = _content.front(); auto const current_crop = content->video->actual_crop(); + auto const video_size_guess = content->video->size().get_value_or(dcp::Size(1998, 1080)); _viewer.set_crop_guess( dcpomatic::Rect<float>( - static_cast<float>(std::max(0, crop.left - current_crop.left)) / content->video->size().width, - static_cast<float>(std::max(0, crop.top - current_crop.top)) / content->video->size().height, - 1.0f - (static_cast<float>(std::max(0, crop.left - current_crop.left + crop.right - current_crop.right)) / content->video->size().width), - 1.0f - (static_cast<float>(std::max(0, crop.top - current_crop.top + crop.bottom - current_crop.bottom)) / content->video->size().height) + static_cast<float>(std::max(0, crop.left - current_crop.left)) / video_size_guess.width, + static_cast<float>(std::max(0, crop.top - current_crop.top)) / video_size_guess.height, + 1.0f - (static_cast<float>(std::max(0, crop.left - current_crop.left + crop.right - current_crop.right)) / video_size_guess.width), + 1.0f - (static_cast<float>(std::max(0, crop.top - current_crop.top + crop.bottom - current_crop.bottom)) / video_size_guess.height) )); }; diff --git a/src/wx/player_information.cc b/src/wx/player_information.cc index 806611140..057d26740 100644 --- a/src/wx/player_information.cc +++ b/src/wx/player_information.cc @@ -161,7 +161,13 @@ PlayerInformation::triggered_update () DCPOMATIC_ASSERT (dcp->video); - checked_set (_dcp[r++], wxString::Format(_("Size: %dx%d"), dcp->video->size().width, dcp->video->size().height)); + auto const size = dcp->video->size(); + + if (size) { + checked_set(_dcp[r++], wxString::Format(_("Size: %dx%d"), size->width, size->height)); + } else { + checked_set(_dcp[r++], _("Size: unknown")); + } if (dcp->video_frame_rate()) { checked_set (_dcp[r++], wxString::Format(_("Frame rate: %d"), (int) lrint(*dcp->video_frame_rate()))); } @@ -186,14 +192,18 @@ PlayerInformation::triggered_update () checked_set (_dcp[r++], std_to_wx(len)); - auto decode = dcp->video->size(); + auto decode = size; auto reduction = _viewer.dcp_decode_reduction(); - if (reduction) { - decode.width /= pow(2, *reduction); - decode.height /= pow(2, *reduction); + if (reduction && decode) { + decode->width /= pow(2, *reduction); + decode->height /= pow(2, *reduction); } - checked_set (_decode_resolution, wxString::Format(_("Decode resolution: %dx%d"), decode.width, decode.height)); + if (decode) { + checked_set(_decode_resolution, wxString::Format(_("Decode resolution: %dx%d"), decode->width, decode->height)); + } else { + checked_set(_decode_resolution, _("Decode resolution: unknown")); + } DCPOMATIC_ASSERT(r <= dcp_lines); diff --git a/src/wx/video_panel.cc b/src/wx/video_panel.cc index 8a02dff25..b27db2547 100644 --- a/src/wx/video_panel.cc +++ b/src/wx/video_panel.cc @@ -725,7 +725,10 @@ bool VideoPanel::scale_custom_edit_clicked () { auto vc = _parent->selected_video().front()->video; - CustomScaleDialog dialog(this, vc->size(), _parent->film()->frame_size(), vc->custom_ratio(), vc->custom_size()); + auto size = vc->size(); + DCPOMATIC_ASSERT(size); + + CustomScaleDialog dialog(this, *size, _parent->film()->frame_size(), vc->custom_ratio(), vc->custom_size()); if (dialog.ShowModal() != wxID_OK) { return false; } |
