vtl: remember original video-file for later export/mux
authorRobin Gareus <robin@gareus.org>
Mon, 17 Jun 2013 07:46:01 +0000 (09:46 +0200)
committerRobin Gareus <robin@gareus.org>
Mon, 17 Jun 2013 07:46:01 +0000 (09:46 +0200)
gtk2_ardour/ardour_ui.cc
gtk2_ardour/export_video_dialog.cc

index ad727d00d6c6f8eb7d54d48b4a64d9661e0a2cd4..c664f870ce4d212979448b5d5b2ea804b66a5ea2 100644 (file)
@@ -3474,8 +3474,12 @@ ARDOUR_UI::add_video (Gtk::Window* float_window)
        add_video_dialog->hide();
        if (r != RESPONSE_ACCEPT) { return; }
 
-       bool local_file;
+       bool local_file, orig_local_file;
        std::string path = add_video_dialog->file_name(local_file);
+
+       std::string orig_path = path;
+       orig_local_file = local_file;
+
        bool auto_set_session_fps = add_video_dialog->auto_set_session_fps();
 
        if (local_file && !Glib::file_test(path, Glib::FILE_TEST_EXISTS)) {
@@ -3534,6 +3538,11 @@ ARDOUR_UI::add_video (Gtk::Window* float_window)
                node->add_property (X_("Filename"), path);
                node->add_property (X_("AutoFPS"), auto_set_session_fps?X_("1"):X_("0"));
                node->add_property (X_("LocalFile"), local_file?X_("1"):X_("0"));
+               if (orig_local_file) {
+                       node->add_property (X_("OriginalVideoFile"), orig_path);
+               } else {
+                       node->remove_property (X_("OriginalVideoFile"));
+               }
                _session->add_extra_xml (*node);
                _session->set_dirty ();
 
index ba32ef3302c1ae9b97063c71c46e30669a5ed0e7..ce85fad81ef5c6129cb861c7bc00092239703740 100644 (file)
@@ -154,13 +154,30 @@ ExportVideoDialog::ExportVideoDialog (PublicEditor& ed, Session* s)
        outfn_path_entry.set_width_chars(38);
        outfn_path_entry.set_text (_session->session_directory().export_path() + G_DIR_SEPARATOR +"export.avi");
 
-       XMLNode* node = _session->extra_xml (X_("Video Timeline"));
-       if (node && node->property(X_("Filename"))) {
-               std::string filename = node->property(X_("Filename"))->value();
-               if (filename.at(0) != G_DIR_SEPARATOR) {
-                       filename = Glib::build_filename (_session->session_directory().video_path(), filename);
+       XMLNode* node = _session->extra_xml (X_("Videotimeline"));
+       if (node) {
+               bool filenameset = false;
+               if (node->property(X_("OriginalVideoFile"))) {
+                       std::string filename = node->property(X_("OriginalVideoFile"))->value();
+                       if (Glib::file_test(filename, Glib::FILE_TEST_EXISTS)) {
+                               invid_path_entry.set_text (filename);
+                               filenameset = true;
+                       }
+               }
+               else if (!filenameset
+                               && node->property(X_("Filename"))
+                               && node->property(X_("LocalFile"))
+                               && node->property(X_("LocalFile"))->value() == X_("1")
+                               ) {
+                       std::string filename = node->property(X_("Filename"))->value();
+                       if (filename.at(0) != G_DIR_SEPARATOR) {
+                               filename = Glib::build_filename (_session->session_directory().video_path(), filename);
+                       }
+                       if (Glib::file_test(filename, Glib::FILE_TEST_EXISTS)) {
+                               invid_path_entry.set_text (filename);
+                               filenameset = true;
+                       }
                }
-               invid_path_entry.set_text (filename);
        }
 
        l = manage (new Label (_("<b>Settings:</b>"), Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false));