diff options
author | Robin Gareus <robin@gareus.org> | 2013-04-09 04:05:07 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2013-04-09 04:05:46 +0200 |
commit | ed1f310f109279347906bbcb85757b5a54792e26 (patch) | |
tree | d4f1dba2351bac25b83250fffe8a6bfdfba93e61 /gtk2_ardour/video_timeline.cc | |
parent | 49ddf8ecce0027e5cb96de2d361aec8d74b3c921 (diff) |
vtl: rework session-needs-save logic
* videotimeline now immediately marks the session dirty on
every state-changing operation
* video-montor is polled every 2.5 seconds for menu-relevant state info
(ontop, OSD,..) and every 30 seconds for full state (window pos, size,..)
* new interface to query the video-monitor for its state and wait for
all replies - terminating the process and using ::wait() is no longer
required
* Ardour> quit and Ardour > close-session does no longer close the video
session to enforce video-monitor state sync but uses above new interface
Diffstat (limited to 'gtk2_ardour/video_timeline.cc')
-rw-r--r-- | gtk2_ardour/video_timeline.cc | 90 |
1 files changed, 37 insertions, 53 deletions
diff --git a/gtk2_ardour/video_timeline.cc b/gtk2_ardour/video_timeline.cc index 563a6a366e..78b5f0345d 100644 --- a/gtk2_ardour/video_timeline.cc +++ b/gtk2_ardour/video_timeline.cc @@ -89,63 +89,23 @@ VideoTimeLine::save_session () LocaleGuard lg (X_("POSIX")); - bool is_dirty = false; - - XMLNode* prev = _session->extra_xml (X_("Videomonitor")); - - /* remember if vmonitor was open.. */ XMLNode* node = new XMLNode(X_("Videomonitor")); - + if (!node) return; node->add_property (X_("active"), (vmonitor && vmonitor->is_started())?"yes":"no"); - if (!prev || !(prev->property (X_("active")) && prev->property (X_("active"))->value() == node->property(X_("active"))->value()) ){ - _session->add_extra_xml (*node); - is_dirty=true; // TODO not if !prev && value==default + _session->add_extra_xml (*node); + + if (vmonitor) { + vmonitor->save_session(); } /* VTL settings */ node = _session->extra_xml (X_("Videotimeline")); - - if (node) { - if (!(node->property(X_("id")) && node->property(X_("id"))->value() == id().to_s())) { - node->add_property (X_("id"), id().to_s()); - is_dirty=true; - } - } - - /* remember timeline height.. */ - if (node) { - int h = editor->get_videotl_bar_height(); - if (!(node->property(X_("Height")) && atoi(node->property(X_("Height"))->value().c_str())==h)) { - node->add_property (X_("Height"), h); - is_dirty=true; - } - } - - /* save video-offset-lock */ - if (node) { - if (!(node->property(X_("VideoOffsetLock")) && atoi(node->property(X_("VideoOffsetLock"))->value().c_str())==video_offset_lock)) { - node->add_property (X_("VideoOffsetLock"), video_offset_lock?X_("1"):X_("0")); - is_dirty=true; - } - } - /* save video-offset */ - if (node) { - if (!(node->property(X_("VideoOffset")) && atoll(node->property(X_("VideoOffset"))->value().c_str())==video_offset)) { - node->add_property (X_("VideoOffset"), video_offset); - is_dirty=true; - } - } - - /* save 'auto_set_session_fps' */ - if (node) { - if (!(node->property(X_("AutoFPS")) && atoi(node->property(X_("AutoFPS"))->value().c_str())==auto_set_session_fps)) { - node->add_property (X_("AutoFPS"), auto_set_session_fps?X_("1"):X_("0")); - is_dirty=true; - } - } - if (is_dirty) { - _session->set_dirty (); - } + if (!node) return; + node->add_property (X_("id"), id().to_s()); + node->add_property (X_("Height"), editor->get_videotl_bar_height()); + node->add_property (X_("VideoOffsetLock"), video_offset_lock?X_("1"):X_("0")); + node->add_property (X_("VideoOffset"), video_offset); + node->add_property (X_("AutoFPS"), auto_set_session_fps?X_("1"):X_("0")); } /* close and save settings */ @@ -156,7 +116,6 @@ VideoTimeLine::close_session () return; } sessionsave.disconnect(); - save_session(); close_video_monitor(); remove_frames(); @@ -165,6 +124,16 @@ VideoTimeLine::close_session () GuiUpdate("set-xjadeo-sensitive-off"); } +void +VideoTimeLine::sync_session_state () +{ + if (!_session || !vmonitor || !vmonitor->is_started()) { + return; + } + vmonitor->query_full_state(true); + save_session(); +} + /** load settings from session */ void VideoTimeLine::set_session (ARDOUR::Session *s) @@ -762,6 +731,17 @@ VideoTimeLine::open_video_monitor() { GuiUpdate("set-xjadeo-active-on"); vmonitor->set_fps(video_file_fps); vmonitor->open(video_filename); + + if (_session) { + XMLNode* node = _session->extra_xml (X_("Videomonitor")); + if (node) { + const XMLProperty* prop = node->property (X_("active")); + if (prop && prop->value() != "yes") _session->set_dirty (); + } else { + _session->set_dirty (); + } + } + } } @@ -788,9 +768,13 @@ VideoTimeLine::terminated_video_monitor () { } GuiUpdate("set-xjadeo-active-off"); vmonitor=0; - if (reopen_vmonitor) { + if (reopen_vmonitor) { reopen_vmonitor=false; open_video_monitor(); + } else { + if (_session) { + _session->set_dirty (); + } } } |