mirror of https://github.com/odrling/Aegisub
Move post-video-load logic from FrameMain::LoadVideo to FrameMain::OnVideoOpen, and open videos via VideoContext directly
Originally committed to SVN as r5205.
This commit is contained in:
parent
1664faf159
commit
314a07c9ab
|
@ -189,7 +189,7 @@ struct video_close : public Command {
|
||||||
STR_HELP("Closes the currently open video file.")
|
STR_HELP("Closes the currently open video file.")
|
||||||
|
|
||||||
void operator()(agi::Context *c) {
|
void operator()(agi::Context *c) {
|
||||||
wxGetApp().frame->LoadVideo(_T(""));
|
c->videoContext->SetVideo("");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -337,7 +337,7 @@ struct video_open : public Command {
|
||||||
+ _("All Files") + _T(" (*.*)|*.*");
|
+ _("All Files") + _T(" (*.*)|*.*");
|
||||||
wxString filename = wxFileSelector(_("Open video file"),path,_T(""),_T(""),str,wxFD_OPEN | wxFD_FILE_MUST_EXIST);
|
wxString filename = wxFileSelector(_("Open video file"),path,_T(""),_T(""),str,wxFD_OPEN | wxFD_FILE_MUST_EXIST);
|
||||||
if (!filename.empty()) {
|
if (!filename.empty()) {
|
||||||
wxGetApp().frame->LoadVideo(filename);
|
c->videoContext->SetVideo(filename);
|
||||||
OPT_SET("Path/Last/Video")->SetString(STD_STR(filename));
|
OPT_SET("Path/Last/Video")->SetString(STD_STR(filename));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -354,7 +354,7 @@ struct video_open_dummy : public Command {
|
||||||
void operator()(agi::Context *c) {
|
void operator()(agi::Context *c) {
|
||||||
wxString fn;
|
wxString fn;
|
||||||
if (DialogDummyVideo::CreateDummyVideo(c->parent, fn)) {
|
if (DialogDummyVideo::CreateDummyVideo(c->parent, fn)) {
|
||||||
wxGetApp().frame->LoadVideo(fn);
|
c->videoContext->SetVideo(fn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -236,7 +236,7 @@ FrameMain::FrameMain (wxArrayString args)
|
||||||
|
|
||||||
/// @brief FrameMain destructor
|
/// @brief FrameMain destructor
|
||||||
FrameMain::~FrameMain () {
|
FrameMain::~FrameMain () {
|
||||||
VideoContext::Get()->SetVideo(_T(""));
|
temp_context->videoContext->SetVideo(_T(""));
|
||||||
audioController->CloseAudio();
|
audioController->CloseAudio();
|
||||||
DeInitContents();
|
DeInitContents();
|
||||||
delete audioController;
|
delete audioController;
|
||||||
|
@ -310,6 +310,7 @@ void FrameMain::InitContents() {
|
||||||
temp_context->videoBox = videoBox;
|
temp_context->videoBox = videoBox;
|
||||||
temp_context->videoContext = VideoContext::Get();
|
temp_context->videoContext = VideoContext::Get();
|
||||||
temp_context->videoContext->audio = audioController;
|
temp_context->videoContext->audio = audioController;
|
||||||
|
temp_context->videoContext->AddVideoOpenListener(&FrameMain::OnVideoOpen, this);
|
||||||
wxBoxSizer *videoSizer = new wxBoxSizer(wxVERTICAL);
|
wxBoxSizer *videoSizer = new wxBoxSizer(wxVERTICAL);
|
||||||
videoSizer->Add(videoBox, 0, wxEXPAND);
|
videoSizer->Add(videoBox, 0, wxEXPAND);
|
||||||
videoSizer->AddStretchSpacer(1);
|
videoSizer->AddStretchSpacer(1);
|
||||||
|
@ -377,13 +378,13 @@ void FrameMain::DeInitContents() {
|
||||||
delete videoBox;
|
delete videoBox;
|
||||||
delete ass;
|
delete ass;
|
||||||
HelpButton::ClearPages();
|
HelpButton::ClearPages();
|
||||||
VideoContext::Get()->audio = NULL;
|
temp_context->videoContext->audio = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @brief Update toolbar
|
/// @brief Update toolbar
|
||||||
void FrameMain::UpdateToolbar() {
|
void FrameMain::UpdateToolbar() {
|
||||||
// Collect flags
|
// Collect flags
|
||||||
bool isVideo = VideoContext::Get()->IsLoaded();
|
bool isVideo = temp_context->videoContext->IsLoaded();
|
||||||
HasSelection = true;
|
HasSelection = true;
|
||||||
int selRows = SubsGrid->GetNumberSelection();
|
int selRows = SubsGrid->GetNumberSelection();
|
||||||
|
|
||||||
|
@ -514,7 +515,7 @@ bool FrameMain::SaveSubtitles(bool saveas,bool withCharset) {
|
||||||
|
|
||||||
// Failed, ask user
|
// Failed, ask user
|
||||||
if (filename.IsEmpty()) {
|
if (filename.IsEmpty()) {
|
||||||
VideoContext::Get()->Stop();
|
temp_context->videoContext->Stop();
|
||||||
wxString path = lagi_wxString(OPT_GET("Path/Last/Subtitles")->GetString());
|
wxString path = lagi_wxString(OPT_GET("Path/Last/Subtitles")->GetString());
|
||||||
wxFileName origPath(ass->filename);
|
wxFileName origPath(ass->filename);
|
||||||
filename = wxFileSelector(_("Save subtitles file"),path,origPath.GetName() + _T(".ass"),_T("ass"),AssFile::GetWildcardList(1),wxFD_SAVE | wxFD_OVERWRITE_PROMPT,this);
|
filename = wxFileSelector(_("Save subtitles file"),path,origPath.GetName() + _T(".ass"),_T("ass"),AssFile::GetWildcardList(1),wxFD_SAVE | wxFD_OVERWRITE_PROMPT,this);
|
||||||
|
@ -588,7 +589,7 @@ void FrameMain::SetDisplayMode(int video, int audio) {
|
||||||
bool sv = false, sa = false;
|
bool sv = false, sa = false;
|
||||||
|
|
||||||
if (video == -1) sv = showVideo;
|
if (video == -1) sv = showVideo;
|
||||||
else if (video) sv = VideoContext::Get()->IsLoaded() && !detachedVideo;
|
else if (video) sv = temp_context->videoContext->IsLoaded() && !detachedVideo;
|
||||||
|
|
||||||
if (audio == -1) sa = showAudio;
|
if (audio == -1) sa = showAudio;
|
||||||
else if (audio) sa = audioController->IsAudioOpen();
|
else if (audio) sa = audioController->IsAudioOpen();
|
||||||
|
@ -602,7 +603,7 @@ void FrameMain::SetDisplayMode(int video, int audio) {
|
||||||
bool didFreeze = !IsFrozen();
|
bool didFreeze = !IsFrozen();
|
||||||
if (didFreeze) Freeze();
|
if (didFreeze) Freeze();
|
||||||
|
|
||||||
VideoContext::Get()->Stop();
|
temp_context->videoContext->Stop();
|
||||||
|
|
||||||
// Set display
|
// Set display
|
||||||
TopSizer->Show(videoBox, showVideo, true);
|
TopSizer->Show(videoBox, showVideo, true);
|
||||||
|
@ -687,9 +688,9 @@ void FrameMain::SynchronizeProject(bool fromSubs) {
|
||||||
int autoLoadMode = OPT_GET("App/Auto/Load Linked Files")->GetInt();
|
int autoLoadMode = OPT_GET("App/Auto/Load Linked Files")->GetInt();
|
||||||
bool hasToLoad = false;
|
bool hasToLoad = false;
|
||||||
if (curSubsAudio !=audioController->GetAudioURL() ||
|
if (curSubsAudio !=audioController->GetAudioURL() ||
|
||||||
curSubsVFR != VideoContext::Get()->GetTimecodesName() ||
|
curSubsVFR != temp_context->videoContext->GetTimecodesName() ||
|
||||||
curSubsVideo != VideoContext::Get()->videoName ||
|
curSubsVideo != temp_context->videoContext->videoName ||
|
||||||
curSubsKeyframes != VideoContext::Get()->GetKeyFramesName()
|
curSubsKeyframes != temp_context->videoContext->GetKeyFramesName()
|
||||||
#ifdef WITH_AUTOMATION
|
#ifdef WITH_AUTOMATION
|
||||||
|| !AutoScriptString.IsEmpty() || local_scripts->GetScripts().size() > 0
|
|| !AutoScriptString.IsEmpty() || local_scripts->GetScripts().size() > 0
|
||||||
#endif
|
#endif
|
||||||
|
@ -709,17 +710,17 @@ void FrameMain::SynchronizeProject(bool fromSubs) {
|
||||||
|
|
||||||
if (doLoad) {
|
if (doLoad) {
|
||||||
// Video
|
// Video
|
||||||
if (curSubsVideo != VideoContext::Get()->videoName) {
|
if (!blockVideoLoad && curSubsVideo != temp_context->videoContext->videoName) {
|
||||||
LoadVideo(curSubsVideo);
|
temp_context->videoContext->SetVideo(curSubsVideo);
|
||||||
if (VideoContext::Get()->IsLoaded()) {
|
if (temp_context->videoContext->IsLoaded()) {
|
||||||
VideoContext::Get()->SetAspectRatio(videoAr,videoArValue);
|
temp_context->videoContext->SetAspectRatio(videoAr,videoArValue);
|
||||||
videoBox->videoDisplay->SetZoom(videoZoom);
|
videoBox->videoDisplay->SetZoom(videoZoom);
|
||||||
VideoContext::Get()->JumpToFrame(videoPos);
|
temp_context->videoContext->JumpToFrame(videoPos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VideoContext::Get()->LoadTimecodes(curSubsVFR);
|
temp_context->videoContext->LoadTimecodes(curSubsVFR);
|
||||||
VideoContext::Get()->LoadKeyframes(curSubsKeyframes);
|
temp_context->videoContext->LoadKeyframes(curSubsKeyframes);
|
||||||
|
|
||||||
// Audio
|
// Audio
|
||||||
if (curSubsAudio != audioController->GetAudioURL()) {
|
if (curSubsAudio != audioController->GetAudioURL()) {
|
||||||
|
@ -771,12 +772,12 @@ void FrameMain::SynchronizeProject(bool fromSubs) {
|
||||||
wxString seekpos = _T("0");
|
wxString seekpos = _T("0");
|
||||||
wxString ar = _T("0");
|
wxString ar = _T("0");
|
||||||
wxString zoom = _T("6");
|
wxString zoom = _T("6");
|
||||||
if (VideoContext::Get()->IsLoaded()) {
|
if (temp_context->videoContext->IsLoaded()) {
|
||||||
seekpos = wxString::Format(_T("%i"),VideoContext::Get()->GetFrameN());
|
seekpos = wxString::Format(_T("%i"),temp_context->videoContext->GetFrameN());
|
||||||
zoom = wxString::Format(_T("%f"),videoBox->videoDisplay->GetZoom());
|
zoom = wxString::Format(_T("%f"),videoBox->videoDisplay->GetZoom());
|
||||||
|
|
||||||
int arType = VideoContext::Get()->GetAspectRatioType();
|
int arType = temp_context->videoContext->GetAspectRatioType();
|
||||||
if (arType == 4) ar = wxString(_T("c")) + AegiFloatToString(VideoContext::Get()->GetAspectRatioValue());
|
if (arType == 4) ar = wxString(_T("c")) + AegiFloatToString(temp_context->videoContext->GetAspectRatioValue());
|
||||||
else ar = wxString::Format(_T("%i"),arType);
|
else ar = wxString::Format(_T("%i"),arType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -784,12 +785,12 @@ void FrameMain::SynchronizeProject(bool fromSubs) {
|
||||||
ass->SetScriptInfo(_T("Audio URI"),MakeRelativePath(audioController->GetAudioURL(),ass->filename));
|
ass->SetScriptInfo(_T("Audio URI"),MakeRelativePath(audioController->GetAudioURL(),ass->filename));
|
||||||
|
|
||||||
// Store video data
|
// Store video data
|
||||||
ass->SetScriptInfo(_T("Video File"),MakeRelativePath(VideoContext::Get()->videoName,ass->filename));
|
ass->SetScriptInfo(_T("Video File"),MakeRelativePath(temp_context->videoContext->videoName,ass->filename));
|
||||||
ass->SetScriptInfo(_T("Video Aspect Ratio"),ar);
|
ass->SetScriptInfo(_T("Video Aspect Ratio"),ar);
|
||||||
ass->SetScriptInfo(_T("Video Zoom Percent"),zoom);
|
ass->SetScriptInfo(_T("Video Zoom Percent"),zoom);
|
||||||
ass->SetScriptInfo(_T("Video Position"),seekpos);
|
ass->SetScriptInfo(_T("Video Position"),seekpos);
|
||||||
ass->SetScriptInfo(_T("VFR File"),MakeRelativePath(VideoContext::Get()->GetTimecodesName(),ass->filename));
|
ass->SetScriptInfo(_T("VFR File"),MakeRelativePath(temp_context->videoContext->GetTimecodesName(),ass->filename));
|
||||||
ass->SetScriptInfo(_T("Keyframes File"),MakeRelativePath(VideoContext::Get()->GetKeyFramesName(),ass->filename));
|
ass->SetScriptInfo(_T("Keyframes File"),MakeRelativePath(temp_context->videoContext->GetKeyFramesName(),ass->filename));
|
||||||
|
|
||||||
// Store Automation script data
|
// Store Automation script data
|
||||||
// Algorithm:
|
// Algorithm:
|
||||||
|
@ -828,69 +829,60 @@ void FrameMain::SynchronizeProject(bool fromSubs) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @brief Loads video
|
void FrameMain::OnVideoOpen() {
|
||||||
/// @param file
|
if (!temp_context->videoContext->IsLoaded()) {
|
||||||
/// @param autoload
|
SetDisplayMode(0, -1);
|
||||||
void FrameMain::LoadVideo(wxString file,bool autoload) {
|
DetachVideo(false);
|
||||||
if (blockVideoLoad) return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Freeze();
|
Freeze();
|
||||||
try {
|
int vidx = temp_context->videoContext->GetWidth(),
|
||||||
VideoContext::Get()->SetVideo(file);
|
vidy = temp_context->videoContext->GetHeight();
|
||||||
}
|
|
||||||
catch (const wchar_t *error) {
|
|
||||||
wxMessageBox(error, _T("Error opening video file"), wxOK | wxICON_ERROR, this);
|
|
||||||
}
|
|
||||||
catch (...) {
|
|
||||||
wxMessageBox(_T("Unknown error"), _T("Error opening video file"), wxOK | wxICON_ERROR, this);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (VideoContext::Get()->IsLoaded()) {
|
// Set zoom level based on video resolution and window size
|
||||||
int vidx = VideoContext::Get()->GetWidth(), vidy = VideoContext::Get()->GetHeight();
|
double zoom = videoBox->videoDisplay->GetZoom();
|
||||||
|
wxSize windowSize = GetSize();
|
||||||
|
if (vidx*3*zoom > windowSize.GetX()*4 || vidy*4*zoom > windowSize.GetY()*6)
|
||||||
|
videoBox->videoDisplay->SetZoom(zoom * .25);
|
||||||
|
else if (vidx*3*zoom > windowSize.GetX()*2 || vidy*4*zoom > windowSize.GetY()*3)
|
||||||
|
videoBox->videoDisplay->SetZoom(zoom * .5);
|
||||||
|
|
||||||
// Set zoom level based on video resolution and window size
|
// Check that the video size matches the script video size specified
|
||||||
double zoom = videoBox->videoDisplay->GetZoom();
|
int scriptx = ass->GetScriptInfoAsInt("PlayResX");
|
||||||
wxSize windowSize = GetSize();
|
int scripty = ass->GetScriptInfoAsInt("PlayResY");
|
||||||
if (vidx*3*zoom > windowSize.GetX()*4 || vidy*4*zoom > windowSize.GetY()*6)
|
if (scriptx != vidx || scripty != vidy) {
|
||||||
videoBox->videoDisplay->SetZoom(zoom * .25);
|
switch (OPT_GET("Video/Check Script Res")->GetInt()) {
|
||||||
else if (vidx*3*zoom > windowSize.GetX()*2 || vidy*4*zoom > windowSize.GetY()*3)
|
case 1:
|
||||||
videoBox->videoDisplay->SetZoom(zoom * .5);
|
// Ask to change on mismatch
|
||||||
|
if (wxMessageBox(wxString::Format(_("The resolution of the loaded video and the resolution specified for the subtitles don't match.\n\nVideo resolution:\t%d x %d\nScript resolution:\t%d x %d\n\nChange subtitles resolution to match video?"), vidx, vidy, scriptx, scripty), _("Resolution mismatch"), wxYES_NO, this) != wxYES)
|
||||||
// Check that the video size matches the script video size specified
|
|
||||||
int scriptx = SubsGrid->ass->GetScriptInfoAsInt(_T("PlayResX"));
|
|
||||||
int scripty = SubsGrid->ass->GetScriptInfoAsInt(_T("PlayResY"));
|
|
||||||
if (scriptx != vidx || scripty != vidy) {
|
|
||||||
switch (OPT_GET("Video/Check Script Res")->GetInt()) {
|
|
||||||
case 1:
|
|
||||||
// Ask to change on mismatch
|
|
||||||
if (wxMessageBox(wxString::Format(_("The resolution of the loaded video and the resolution specified for the subtitles don't match.\n\nVideo resolution:\t%d x %d\nScript resolution:\t%d x %d\n\nChange subtitles resolution to match video?"), vidx, vidy, scriptx, scripty), _("Resolution mismatch"), wxYES_NO, this) != wxYES)
|
|
||||||
break;
|
|
||||||
// Fallthrough to case 2
|
|
||||||
case 2:
|
|
||||||
// Always change script res
|
|
||||||
SubsGrid->ass->SetScriptInfo(_T("PlayResX"), wxString::Format(_T("%d"), vidx));
|
|
||||||
SubsGrid->ass->SetScriptInfo(_T("PlayResY"), wxString::Format(_T("%d"), vidy));
|
|
||||||
SubsGrid->ass->Commit(_("Change script resolution"));
|
|
||||||
break;
|
break;
|
||||||
case 0:
|
// Fallthrough to case 2
|
||||||
default:
|
case 2:
|
||||||
// Never change
|
// Always change script res
|
||||||
break;
|
ass->SetScriptInfo("PlayResX", wxString::Format("%d", vidx));
|
||||||
}
|
ass->SetScriptInfo("PlayResY", wxString::Format("%d", vidy));
|
||||||
|
ass->Commit(_("Change script resolution"));
|
||||||
|
break;
|
||||||
|
case 0:
|
||||||
|
default:
|
||||||
|
// Never change
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SetDisplayMode(1,-1);
|
SetDisplayMode(1,-1);
|
||||||
|
|
||||||
DetachVideo(VideoContext::Get()->IsLoaded() && OPT_GET("Video/Detached/Enabled")->GetBool());
|
DetachVideo(OPT_GET("Video/Detached/Enabled")->GetBool());
|
||||||
Thaw();
|
Thaw();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FrameMain::LoadVFR(wxString filename) {
|
void FrameMain::LoadVFR(wxString filename) {
|
||||||
if (filename.empty()) {
|
if (filename.empty()) {
|
||||||
VideoContext::Get()->CloseTimecodes();
|
temp_context->videoContext->CloseTimecodes();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
VideoContext::Get()->LoadTimecodes(filename);
|
temp_context->videoContext->LoadTimecodes(filename);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -980,35 +972,35 @@ bool FrameMain::LoadList(wxArrayString list) {
|
||||||
audioList.Add(_T("m4a"));
|
audioList.Add(_T("m4a"));
|
||||||
|
|
||||||
// Scan list
|
// Scan list
|
||||||
wxString audio = _T("");
|
wxString audio;
|
||||||
wxString video = _T("");
|
wxString video;
|
||||||
wxString subs = _T("");
|
wxString subs;
|
||||||
wxString ext;
|
wxString ext;
|
||||||
for (size_t i=0;i<List.Count();i++) {
|
for (size_t i=0;i<List.Count();i++) {
|
||||||
wxFileName file(List[i]);
|
wxFileName file(List[i]);
|
||||||
ext = file.GetExt().Lower();
|
ext = file.GetExt().Lower();
|
||||||
|
|
||||||
if (subs.IsEmpty() && subsList.Index(ext) != wxNOT_FOUND) subs = List[i];
|
if (subs.empty() && subsList.Index(ext) != wxNOT_FOUND) subs = List[i];
|
||||||
if (video.IsEmpty() && videoList.Index(ext) != wxNOT_FOUND) video = List[i];
|
if (video.empty() && videoList.Index(ext) != wxNOT_FOUND) video = List[i];
|
||||||
if (audio.IsEmpty() && audioList.Index(ext) != wxNOT_FOUND) audio = List[i];
|
if (audio.empty() && audioList.Index(ext) != wxNOT_FOUND) audio = List[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set blocking
|
// Set blocking
|
||||||
blockVideoLoad = (video != _T(""));
|
blockVideoLoad = !video.empty();
|
||||||
|
|
||||||
// Load files
|
// Load files
|
||||||
if (subs != _T("")) {
|
if (subs.size()) {
|
||||||
LoadSubtitles(subs);
|
LoadSubtitles(subs);
|
||||||
}
|
}
|
||||||
if (blockVideoLoad) {
|
if (blockVideoLoad) {
|
||||||
blockVideoLoad = false;
|
blockVideoLoad = false;
|
||||||
LoadVideo(video);
|
temp_context->videoContext->SetVideo(video);
|
||||||
}
|
}
|
||||||
if (!audio.IsEmpty())
|
if (!audio.empty())
|
||||||
audioController->OpenAudio(audio);
|
audioController->OpenAudio(audio);
|
||||||
|
|
||||||
// Result
|
// Result
|
||||||
return ((subs != _T("")) || (audio != _T("")) || (video != _T("")));
|
return subs.size() || audio.size() || video.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1116,14 +1108,14 @@ void FrameMain::OnMenuOpen (wxMenuEvent &event) {
|
||||||
// Rebuild recent
|
// Rebuild recent
|
||||||
RebuildRecentList("recent/subtitle", "Subtitle");
|
RebuildRecentList("recent/subtitle", "Subtitle");
|
||||||
|
|
||||||
MenuBar->Enable(cmd::id("subtitle/open/video"),VideoContext::Get()->HasSubtitles());
|
MenuBar->Enable(cmd::id("subtitle/open/video"),temp_context->videoContext->HasSubtitles());
|
||||||
}
|
}
|
||||||
|
|
||||||
// View menu
|
// View menu
|
||||||
else if (curMenu == menu::menu->GetMenu("main/view")) {
|
else if (curMenu == menu::menu->GetMenu("main/view")) {
|
||||||
// Flags
|
// Flags
|
||||||
bool aud = audioController->IsAudioOpen();
|
bool aud = audioController->IsAudioOpen();
|
||||||
bool vid = VideoContext::Get()->IsLoaded() && !detachedVideo;
|
bool vid = temp_context->videoContext->IsLoaded() && !detachedVideo;
|
||||||
|
|
||||||
// Set states
|
// Set states
|
||||||
MenuBar->Enable(cmd::id("app/display/audio_subs"),aud);
|
MenuBar->Enable(cmd::id("app/display/audio_subs"),aud);
|
||||||
|
@ -1146,7 +1138,7 @@ void FrameMain::OnMenuOpen (wxMenuEvent &event) {
|
||||||
|
|
||||||
// Video menu
|
// Video menu
|
||||||
else if (curMenu == menu::menu->GetMenu("main/video")) {
|
else if (curMenu == menu::menu->GetMenu("main/video")) {
|
||||||
bool state = VideoContext::Get()->IsLoaded();
|
bool state = temp_context->videoContext->IsLoaded();
|
||||||
bool attached = state && !detachedVideo;
|
bool attached = state && !detachedVideo;
|
||||||
|
|
||||||
// Set states
|
// Set states
|
||||||
|
@ -1165,15 +1157,15 @@ void FrameMain::OnMenuOpen (wxMenuEvent &event) {
|
||||||
MenuBar->Enable(cmd::id("video/aspect/cinematic"),attached);
|
MenuBar->Enable(cmd::id("video/aspect/cinematic"),attached);
|
||||||
MenuBar->Enable(cmd::id("video/aspect/custom"),attached);
|
MenuBar->Enable(cmd::id("video/aspect/custom"),attached);
|
||||||
MenuBar->Enable(cmd::id("video/detach"),state);
|
MenuBar->Enable(cmd::id("video/detach"),state);
|
||||||
MenuBar->Enable(cmd::id("timecode/save"),VideoContext::Get()->TimecodesLoaded());
|
MenuBar->Enable(cmd::id("timecode/save"),temp_context->videoContext->TimecodesLoaded());
|
||||||
MenuBar->Enable(cmd::id("timecode/close"),VideoContext::Get()->OverTimecodesLoaded());
|
MenuBar->Enable(cmd::id("timecode/close"),temp_context->videoContext->OverTimecodesLoaded());
|
||||||
MenuBar->Enable(cmd::id("keyframe/close"),VideoContext::Get()->OverKeyFramesLoaded());
|
MenuBar->Enable(cmd::id("keyframe/close"),temp_context->videoContext->OverKeyFramesLoaded());
|
||||||
MenuBar->Enable(cmd::id("keyframe/save"),VideoContext::Get()->KeyFramesLoaded());
|
MenuBar->Enable(cmd::id("keyframe/save"),temp_context->videoContext->KeyFramesLoaded());
|
||||||
MenuBar->Enable(cmd::id("video/details"),state);
|
MenuBar->Enable(cmd::id("video/details"),state);
|
||||||
MenuBar->Enable(cmd::id("video/show_overscan"),state);
|
MenuBar->Enable(cmd::id("video/show_overscan"),state);
|
||||||
|
|
||||||
// Set AR radio
|
// Set AR radio
|
||||||
int arType = VideoContext::Get()->GetAspectRatioType();
|
int arType = temp_context->videoContext->GetAspectRatioType();
|
||||||
MenuBar->Check(cmd::id("video/aspect/default"),false);
|
MenuBar->Check(cmd::id("video/aspect/default"),false);
|
||||||
MenuBar->Check(cmd::id("video/aspect/full"),false);
|
MenuBar->Check(cmd::id("video/aspect/full"),false);
|
||||||
MenuBar->Check(cmd::id("video/aspect/wide"),false);
|
MenuBar->Check(cmd::id("video/aspect/wide"),false);
|
||||||
|
@ -1199,7 +1191,7 @@ void FrameMain::OnMenuOpen (wxMenuEvent &event) {
|
||||||
// Audio menu
|
// Audio menu
|
||||||
else if (curMenu == menu::menu->GetMenu("main/audio")) {
|
else if (curMenu == menu::menu->GetMenu("main/audio")) {
|
||||||
bool state = audioController->IsAudioOpen();
|
bool state = audioController->IsAudioOpen();
|
||||||
bool vidstate = VideoContext::Get()->IsLoaded();
|
bool vidstate = temp_context->videoContext->IsLoaded();
|
||||||
|
|
||||||
MenuBar->Enable(cmd::id("audio/open/video"),vidstate);
|
MenuBar->Enable(cmd::id("audio/open/video"),vidstate);
|
||||||
MenuBar->Enable(cmd::id("audio/close"),state);
|
MenuBar->Enable(cmd::id("audio/close"),state);
|
||||||
|
@ -1222,13 +1214,13 @@ void FrameMain::OnMenuOpen (wxMenuEvent &event) {
|
||||||
MenuBar->Enable(cmd::id("subtitle/insert/after"),state);
|
MenuBar->Enable(cmd::id("subtitle/insert/after"),state);
|
||||||
MenuBar->Enable(cmd::id("edit/line/split/by_karaoke"),state);
|
MenuBar->Enable(cmd::id("edit/line/split/by_karaoke"),state);
|
||||||
MenuBar->Enable(cmd::id("edit/line/delete"),state);
|
MenuBar->Enable(cmd::id("edit/line/delete"),state);
|
||||||
state2 = count > 0 && VideoContext::Get()->IsLoaded();
|
state2 = count > 0 && temp_context->videoContext->IsLoaded();
|
||||||
MenuBar->Enable(cmd::id("subtitle/insert/before/videotime"),state2);
|
MenuBar->Enable(cmd::id("subtitle/insert/before/videotime"),state2);
|
||||||
MenuBar->Enable(cmd::id("subtitle/insert/after/videotime"),state2);
|
MenuBar->Enable(cmd::id("subtitle/insert/after/videotime"),state2);
|
||||||
MenuBar->Enable(cmd::id("main/subtitle/insert lines"),state);
|
MenuBar->Enable(cmd::id("main/subtitle/insert lines"),state);
|
||||||
state = count > 0 && continuous;
|
state = count > 0 && continuous;
|
||||||
MenuBar->Enable(cmd::id("edit/line/duplicate"),state);
|
MenuBar->Enable(cmd::id("edit/line/duplicate"),state);
|
||||||
state = count > 0 && continuous && VideoContext::Get()->TimecodesLoaded();
|
state = count > 0 && continuous && temp_context->videoContext->TimecodesLoaded();
|
||||||
MenuBar->Enable(cmd::id("edit/line/duplicate/shift"),state);
|
MenuBar->Enable(cmd::id("edit/line/duplicate/shift"),state);
|
||||||
state = count == 2;
|
state = count == 2;
|
||||||
MenuBar->Enable(cmd::id("edit/line/swap"),state);
|
MenuBar->Enable(cmd::id("edit/line/swap"),state);
|
||||||
|
@ -1249,7 +1241,7 @@ void FrameMain::OnMenuOpen (wxMenuEvent &event) {
|
||||||
int count = sels.Count();
|
int count = sels.Count();
|
||||||
|
|
||||||
// Video related
|
// Video related
|
||||||
bool state = VideoContext::Get()->IsLoaded();
|
bool state = temp_context->videoContext->IsLoaded();
|
||||||
MenuBar->Enable(cmd::id("time/snap/start_video"),state);
|
MenuBar->Enable(cmd::id("time/snap/start_video"),state);
|
||||||
MenuBar->Enable(cmd::id("time/snap/end_video"),state);
|
MenuBar->Enable(cmd::id("time/snap/end_video"),state);
|
||||||
MenuBar->Enable(cmd::id("time/snap/scene"),state);
|
MenuBar->Enable(cmd::id("time/snap/scene"),state);
|
||||||
|
@ -1372,7 +1364,7 @@ void FrameMain::OnAutomationMacro (wxCommandEvent &event) {
|
||||||
/// @param event
|
/// @param event
|
||||||
void FrameMain::OnCloseWindow (wxCloseEvent &event) {
|
void FrameMain::OnCloseWindow (wxCloseEvent &event) {
|
||||||
// Stop audio and video
|
// Stop audio and video
|
||||||
VideoContext::Get()->Stop();
|
temp_context->videoContext->Stop();
|
||||||
audioController->Stop();
|
audioController->Stop();
|
||||||
|
|
||||||
// Ask user if he wants to save first
|
// Ask user if he wants to save first
|
||||||
|
|
|
@ -90,7 +90,6 @@ public:
|
||||||
void SetDisplayMode(int showVid,int showAudio);
|
void SetDisplayMode(int showVid,int showAudio);
|
||||||
void LoadSubtitles(wxString filename,wxString charset=_T(""));
|
void LoadSubtitles(wxString filename,wxString charset=_T(""));
|
||||||
bool SaveSubtitles(bool saveas=false,bool withCharset=false);
|
bool SaveSubtitles(bool saveas=false,bool withCharset=false);
|
||||||
void LoadVideo(wxString filename,bool autoload=false);
|
|
||||||
void DetachVideo(bool detach=true);
|
void DetachVideo(bool detach=true);
|
||||||
void LoadVFR(wxString filename);
|
void LoadVFR(wxString filename);
|
||||||
|
|
||||||
|
@ -172,10 +171,10 @@ private:
|
||||||
void OnAudioOpen(AudioProvider *provider);
|
void OnAudioOpen(AudioProvider *provider);
|
||||||
void OnAudioClose();
|
void OnAudioClose();
|
||||||
|
|
||||||
|
void OnVideoOpen();
|
||||||
|
|
||||||
void OnSubtitlesFileChanged();
|
void OnSubtitlesFileChanged();
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/// The subtitle editing area
|
/// The subtitle editing area
|
||||||
|
|
|
@ -155,7 +155,10 @@ void VideoContext::Reset() {
|
||||||
void VideoContext::SetVideo(const wxString &filename) {
|
void VideoContext::SetVideo(const wxString &filename) {
|
||||||
Stop();
|
Stop();
|
||||||
Reset();
|
Reset();
|
||||||
if (filename.empty()) return;
|
if (filename.empty()) {
|
||||||
|
VideoOpen();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
provider.reset(new ThreadedFrameSource(filename, this));
|
provider.reset(new ThreadedFrameSource(filename, this));
|
||||||
|
|
|
@ -265,6 +265,7 @@ void VideoDisplay::UploadFrameData(FrameReadyEvent &evt) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoDisplay::OnVideoOpen() {
|
void VideoDisplay::OnVideoOpen() {
|
||||||
|
if (!vc->IsLoaded()) return;
|
||||||
UpdateSize();
|
UpdateSize();
|
||||||
currentFrame = 0;
|
currentFrame = 0;
|
||||||
vc->GetFrameAsync(0);
|
vc->GetFrameAsync(0);
|
||||||
|
|
Loading…
Reference in New Issue