fix jack transport return value
[ardour.git] / gtk2_ardour / export_video_dialog.cc
index 7f6fcc2a8ad80088010e60f392479b48d1f322a4..df05eed8073f1d192a0ad91c279060f550b91a3c 100644 (file)
@@ -28,7 +28,6 @@
 #include <fcntl.h>
 
 #include <sigc++/bind.h>
-#include <libgen.h>
 
 #include <glib/gstdio.h>
 
@@ -52,7 +51,6 @@
 #include "ardour/session_metadata.h"
 #include "ardour/broadcast_info.h"
 
-#include "utils.h"
 #include "opts.h"
 #include "export_video_dialog.h"
 #include "utils_videotl.h"
@@ -64,7 +62,7 @@ using namespace PBD;
 using namespace ARDOUR;
 using namespace VideoUtils;
 
-ExportVideoDialog::ExportVideoDialog (Session* s, TimeSelection &tme)
+ExportVideoDialog::ExportVideoDialog (Session* s, TimeSelection &tme, bool range)
        : ArdourDialog (_("Export Video File "))
        , export_range (tme)
        , outfn_path_label (_("File:"), Gtk::ALIGN_LEFT)
@@ -155,7 +153,11 @@ ExportVideoDialog::ExportVideoDialog (Session* s, TimeSelection &tme)
        if (!export_range.empty()) {
                insnd_combo.append_text (_("Selected range"));  // TODO show export_range.start() -> export_range.end_frame()
        }
-       insnd_combo.set_active(0);
+       if (range) {
+               insnd_combo.set_active(2);
+       } else {
+               insnd_combo.set_active(0);
+       }
 
        outfn_path_entry.set_width_chars(38);
        outfn_path_entry.set_text (_session->session_directory().export_path() + G_DIR_SEPARATOR +"export.avi");
@@ -513,9 +515,8 @@ ExportVideoDialog::launch_export ()
                end += av_offset;
        }
        else if (insnd_combo.get_active_row_number() == 2) {
-               // TODO quantize to video-frame ?!
-               start = export_range.start();
-               end   = export_range.end_frame();
+               start = ARDOUR_UI::instance()->video_timeline->quantify_frames_to_apv(export_range.start());
+               end   = ARDOUR_UI::instance()->video_timeline->quantify_frames_to_apv(export_range.end_frame());
        }
        if (end <= 0) {
                start = _session->current_start_frame();
@@ -525,6 +526,15 @@ ExportVideoDialog::launch_export ()
        printf("audio export-range %lld -> %lld\n", start, end);
 #endif
 
+       const frameoffset_t vstart = ARDOUR_UI::instance()->video_timeline->get_offset();
+       const frameoffset_t vend   = vstart + ARDOUR_UI::instance()->video_timeline->get_duration();
+
+       if ( (start >= end) || (end < vstart) || (start > vend)) {
+               warning << _("Export Video: export-range does not include video.") << endmsg;
+               Gtk::Dialog::response(RESPONSE_CANCEL);
+               return;
+       }
+
        tsp->set_range (start, end);
        tsp->set_name ("mysession");
        tsp->set_range_id ("session");
@@ -550,6 +560,7 @@ ExportVideoDialog::launch_export ()
        insnd = fnp->get_path(fmp);
 
        /* do sound export */
+       fmp->set_soundcloud_upload(false);
        _session->get_export_handler()->add_export_config (tsp, ccp, fmp, fnp, b);
        _session->get_export_handler()->do_export();
        status = _session->get_export_status ();
@@ -561,7 +572,7 @@ ExportVideoDialog::launch_export ()
                if (gtk_events_pending()) {
                        gtk_main_iteration ();
                } else {
-                       usleep (10000);
+                       Glib::usleep (10000);
                }
        }
        audio_progress_connection.disconnect();
@@ -601,7 +612,8 @@ ExportVideoDialog::encode_pass (int pass)
        ffs.clear();
 
        if (fps_checkbox.get_active()) {
-         ffs["-r"] = fps_combo.get_active_text();
+               ffs["-r"] = fps_combo.get_active_text();
+               transcoder->set_fps(atof(fps_combo.get_active_text()));
        }
 
        if (scale_checkbox.get_active()) {
@@ -689,7 +701,7 @@ ExportVideoDialog::encode_pass (int pass)
                ffs["-an"] = "-y";
                ffs["-passlogfile"] =  Glib::path_get_dirname (outfn) + G_DIR_SEPARATOR + "ffmpeg2pass";
                ffs["-f"] = get_file_extension(invid).empty()?"mov":get_file_extension(invid);
-#ifdef _OS_WIN32
+#ifdef PLATFORM_WINDOWS
                outfn = "NUL";
 #else
                outfn = "/dev/null";
@@ -721,11 +733,7 @@ ExportVideoDialog::encode_pass (int pass)
 
        std::ostringstream osstream; osstream << duration_s;
        ffs["-t"] = osstream.str();
-       if (fps_checkbox.get_active()) {
-               transcoder->set_duration(duration_s * atof(fps_combo.get_active_text()));
-       } else {
-               transcoder->set_duration(duration_s * transcoder->get_fps());
-       }
+       transcoder->set_duration(duration_s * transcoder->get_fps());
 
        if (insnd_combo.get_active_row_number() == 0 || insnd_combo.get_active_row_number() == 2) {
                framepos_t start, snend;