void VideoContext::PrevFrame() { if (!videoProvider || IsPlaying() || frame_n == 0) return; JumpToFrame(frame_n - 1); // Start playing audio if (playAudioOnStep->GetBool()) { context->audioController->PlayRange(TimeRange(TimeAtFrame(frame_n), TimeAtFrame(frame_n + 1))); } }
void VideoContext::Play() { if (IsPlaying()) { Stop(); return; } if (!IsLoaded()) return; // Set variables startMS = TimeAtFrame(frame_n); endFrame = GetLength() - 1; // Start playing audio context->audioController->PlayToEnd(startMS); // Start timer playTime.Start(); playback.Start(10); }
void VideoContext::PlayLine() { Stop(); AssDialogue *curline = context->selectionController->GetActiveLine(); if (!curline) return; // Start playing audio context->audioController->PlayRange(TimeRange(curline->Start, curline->End)); // Round-trip conversion to convert start to exact int startFrame = FrameAtTime(context->selectionController->GetActiveLine()->Start,agi::vfr::START); startMS = TimeAtFrame(startFrame); endFrame = FrameAtTime(context->selectionController->GetActiveLine()->End,agi::vfr::END) + 1; // Jump to start JumpToFrame(startFrame); // Start timer playTime.Start(); playback.Start(10); }
DialogVideoDetails::DialogVideoDetails(agi::Context *c) : wxDialog(c->parent , -1, _("Video Details")) { auto width = c->videoController->GetWidth(); auto height = c->videoController->GetHeight(); auto framecount = c->videoController->GetLength(); auto fps = c->videoController->FPS(); boost::rational<int> ar(width, height); auto fg = new wxFlexGridSizer(2, 5, 10); auto make_field = [&](wxString const& name, wxString const& value) { fg->Add(new wxStaticText(this, -1, name), 0, wxALIGN_CENTRE_VERTICAL); fg->Add(new wxTextCtrl(this, -1, value, wxDefaultPosition, wxSize(300,-1), wxTE_READONLY), 0, wxALIGN_CENTRE_VERTICAL | wxEXPAND); }; make_field(_("File name:"), c->videoController->GetVideoName().wstring()); make_field(_("FPS:"), wxString::Format("%.3f", fps.FPS())); make_field(_("Resolution:"), wxString::Format("%dx%d (%d:%d)", width, height, ar.numerator(), ar.denominator())); make_field(_("Length:"), wxString::Format(_("%d frames (%s)"), framecount, to_wx(AssTime(fps.TimeAtFrame(framecount - 1)).GetAssFormated(true)))); make_field(_("Decoder:"), to_wx(c->videoController->GetProvider()->GetDecoderName())); wxStaticBoxSizer *video_sizer = new wxStaticBoxSizer(wxVERTICAL, this, _("Video")); video_sizer->Add(fg); auto main_sizer = new wxBoxSizer(wxVERTICAL); main_sizer->Add(video_sizer, 1, wxALL|wxEXPAND, 5); main_sizer->Add(CreateSeparatedButtonSizer(wxOK), 0, wxALL|wxEXPAND, 5); SetSizerAndFit(main_sizer); CenterOnParent(); }