mirror of https://github.com/odrling/Aegisub
Use boost.rational for AR normalization
This commit is contained in:
parent
1e1a09e67a
commit
9537e14c3c
|
@ -43,6 +43,8 @@
|
||||||
#include "video_context.h"
|
#include "video_context.h"
|
||||||
#include "video_provider_manager.h"
|
#include "video_provider_manager.h"
|
||||||
|
|
||||||
|
#include <boost/rational.hpp>
|
||||||
|
|
||||||
#include <wx/sizer.h>
|
#include <wx/sizer.h>
|
||||||
#include <wx/stattext.h>
|
#include <wx/stattext.h>
|
||||||
#include <wx/textctrl.h>
|
#include <wx/textctrl.h>
|
||||||
|
@ -52,17 +54,6 @@ static void make_field(wxWindow *parent, wxSizer *sizer, wxString const& name, w
|
||||||
sizer->Add(new wxTextCtrl(parent, -1, value, wxDefaultPosition, wxSize(300,-1), wxTE_READONLY), 0, wxALIGN_CENTRE_VERTICAL | wxEXPAND);
|
sizer->Add(new wxTextCtrl(parent, -1, value, wxDefaultPosition, wxSize(300,-1), wxTE_READONLY), 0, wxALIGN_CENTRE_VERTICAL | wxEXPAND);
|
||||||
}
|
}
|
||||||
|
|
||||||
static wxString pretty_ar(int width, int height) {
|
|
||||||
int limit = (int)ceil(sqrt(double(std::min(width, height))));
|
|
||||||
for (int i=2;i<=limit;i++) {
|
|
||||||
while (width % i == 0 && height % i == 0) {
|
|
||||||
width /= i;
|
|
||||||
height /= i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return wxString::Format("%d:%d", width, height);
|
|
||||||
}
|
|
||||||
|
|
||||||
DialogVideoDetails::DialogVideoDetails(agi::Context *c)
|
DialogVideoDetails::DialogVideoDetails(agi::Context *c)
|
||||||
: wxDialog(c->parent , -1, _("Video Details"))
|
: wxDialog(c->parent , -1, _("Video Details"))
|
||||||
{
|
{
|
||||||
|
@ -70,11 +61,12 @@ DialogVideoDetails::DialogVideoDetails(agi::Context *c)
|
||||||
auto height = c->videoController->GetHeight();
|
auto height = c->videoController->GetHeight();
|
||||||
auto framecount = c->videoController->GetLength();
|
auto framecount = c->videoController->GetLength();
|
||||||
auto fps = c->videoController->FPS();
|
auto fps = c->videoController->FPS();
|
||||||
|
boost::rational<int> ar(width, height);
|
||||||
|
|
||||||
wxFlexGridSizer *fg = new wxFlexGridSizer(2, 5, 10);
|
wxFlexGridSizer *fg = new wxFlexGridSizer(2, 5, 10);
|
||||||
make_field(this, fg, _("File name:"), c->videoController->GetVideoName().wstring());
|
make_field(this, fg, _("File name:"), c->videoController->GetVideoName().wstring());
|
||||||
make_field(this, fg, _("FPS:"), wxString::Format("%.3f", fps.FPS()));
|
make_field(this, fg, _("FPS:"), wxString::Format("%.3f", fps.FPS()));
|
||||||
make_field(this, fg, _("Resolution:"), wxString::Format("%dx%d (%s)", width, height, pretty_ar(width, height)));
|
make_field(this, fg, _("Resolution:"), wxString::Format("%dx%d (%d:%d)", width, height, ar.numerator(), ar.denominator()));
|
||||||
make_field(this, fg, _("Length:"), wxString::Format(_("%d frames (%s)"), framecount, to_wx(AssTime(fps.TimeAtFrame(framecount - 1)).GetAssFormated(true))));
|
make_field(this, fg, _("Length:"), wxString::Format(_("%d frames (%s)"), framecount, to_wx(AssTime(fps.TimeAtFrame(framecount - 1)).GetAssFormated(true))));
|
||||||
make_field(this, fg, _("Decoder:"), to_wx(c->videoController->GetProvider()->GetDecoderName()));
|
make_field(this, fg, _("Decoder:"), to_wx(c->videoController->GetProvider()->GetDecoderName()));
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue