diff --git a/core/frame_main_events.cpp b/core/frame_main_events.cpp index 63e9f94ba..ec42fee35 100644 --- a/core/frame_main_events.cpp +++ b/core/frame_main_events.cpp @@ -1018,15 +1018,15 @@ void FrameMain::OnSetAR235 (wxCommandEvent &event) { void FrameMain::OnSetARCustom (wxCommandEvent &event) { // Get text videoBox->videoDisplay->Stop(); - wxString value = wxGetTextFromUser(_T("Enter aspect ratio in either decimal (e.g. 2.35) or fractional (e.g. 16:9) form:"),_T("Enter aspect ratio"),FloatToString(videoBox->videoDisplay->GetAspectRatioValue())); + wxString value = wxGetTextFromUser(_("Enter aspect ratio in either decimal (e.g. 2.35) or fractional (e.g. 16:9) form. Enter a value like 853x480 to set a specific resolution."),_("Enter aspect ratio"),FloatToString(videoBox->videoDisplay->GetAspectRatioValue())); + + if (value.IsEmpty()) return; + value.MakeLower(); // Process text double numval = 0.0; - value.Replace(_T(","),_T(".")); - if (value.Freq(_T('.')) == 1) { - value.ToDouble(&numval); - } - else if (value.Freq(_T(':')) == 1) { + if (value.Freq(_T(':')) == 1) { +doNormalAR: int pos = value.Find(_T(':')); wxString num = value.Left(pos); wxString denum = value.Mid(pos+1); @@ -1037,9 +1037,27 @@ void FrameMain::OnSetARCustom (wxCommandEvent &event) { if (b != 0) numval = a/b; } } + else if (value.Freq(_T('x')) == 1) { + int pos = value.Find(_T('x')); + wxString width = value.Left(pos); + wxString height = value.Mid(pos+1); + if (width.IsNumber() && height.IsNumber()) { + double w,h; + width.ToDouble(&w); + height.ToDouble(&h); + if (h != 0) { + numval = w/h; + videoBox->videoDisplay->SetZoom(h / videoBox->videoDisplay->h); + } + } + } + else if (value.Freq(_T(':')) < 1) { + value.Append(_T(":1")); + goto doNormalAR; + } // Sanity check - if (numval < 0.5 || numval > 5.0) wxMessageBox(_T("Invalid value! Aspect ratio must be between 0.5 and 5.0."),_T("Invalid Aspect Ratio"),wxICON_ERROR); + if (numval < 0.5 || numval > 5.0) wxMessageBox(_("Invalid value! Aspect ratio must be between 0.5 and 5.0."),_("Invalid Aspect Ratio"),wxICON_ERROR); // Set value else { diff --git a/core/video_display.cpp b/core/video_display.cpp index 1fb3d3050..a67b47f97 100644 --- a/core/video_display.cpp +++ b/core/video_display.cpp @@ -166,7 +166,8 @@ void VideoDisplay::SetVideo(const wxString &filename) { // Choose a provider provider = VideoProvider::GetProvider(filename,GetTempWorkFile()); provider->SetZoom(zoomValue); - provider->SetDAR(GetARFromType(arType)); + if (arType != 4) arValue = GetARFromType(arType); // 4 = custom + provider->SetDAR(arValue); KeyFrames.Clear(); @@ -184,7 +185,7 @@ void VideoDisplay::SetVideo(const wxString &filename) { // Ask to override timecodes int override = wxYES; - if (VFR_Output.GetFrameRateType() == VFR) override = wxMessageBox(_T("You already have timecodes loaded. Replace them with the timecodes from the Matroska file?"),_T("Replace timecodes?"),wxYES_NO | wxICON_QUESTION); + if (VFR_Output.IsLoaded()) override = wxMessageBox(_("You already have timecodes loaded. Replace them with the timecodes from the Matroska file?"),_("Replace timecodes?"),wxYES_NO | wxICON_QUESTION); if (override == wxYES) MatroskaWrapper::wrapper.SetToTimecodes(VFR_Output); // Close mkv