X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fexport_video_dialog.cc;h=df05eed8073f1d192a0ad91c279060f550b91a3c;hb=18efe8f446f45b541f19a2f99dd707f66fb72a3e;hp=dd08b586611aa2854b5419f11bf306255581aad5;hpb=449f600c699ebc60d6520ea43b0ac2b91b13f878;p=ardour.git diff --git a/gtk2_ardour/export_video_dialog.cc b/gtk2_ardour/export_video_dialog.cc index dd08b58661..df05eed807 100644 --- a/gtk2_ardour/export_video_dialog.cc +++ b/gtk2_ardour/export_video_dialog.cc @@ -29,6 +29,8 @@ #include +#include + #include "pbd/error.h" #include "pbd/convert.h" #include "gtkmm2ext/utils.h" @@ -49,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" @@ -61,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) @@ -152,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"); @@ -410,8 +415,8 @@ void ExportVideoDialog::finished () { if (aborted) { - unlink(outfn_path_entry.get_text().c_str()); - unlink (insnd.c_str()); + ::g_unlink(outfn_path_entry.get_text().c_str()); + ::g_unlink (insnd.c_str()); Gtk::Dialog::response(RESPONSE_CANCEL); } else if (twopass && firstpass) { firstpass = false; @@ -421,9 +426,9 @@ ExportVideoDialog::finished () if (twopass_checkbox.get_active()) { std::string outfn = outfn_path_entry.get_text(); std::string p2log = Glib::path_get_dirname (outfn) + G_DIR_SEPARATOR + "ffmpeg2pass"; - unlink (p2log.c_str()); + ::g_unlink (p2log.c_str()); } - unlink (insnd.c_str()); + ::g_unlink (insnd.c_str()); Gtk::Dialog::response(RESPONSE_ACCEPT); } } @@ -510,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(); @@ -522,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"); @@ -547,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 (); @@ -558,13 +572,13 @@ ExportVideoDialog::launch_export () if (gtk_events_pending()) { gtk_main_iteration (); } else { - usleep (10000); + Glib::usleep (10000); } } audio_progress_connection.disconnect(); status->finish (); if (status->aborted()) { - unlink (insnd.c_str()); + ::g_unlink (insnd.c_str()); Gtk::Dialog::response(RESPONSE_CANCEL); return; } @@ -581,14 +595,14 @@ ExportVideoDialog::encode_pass (int pass) transcoder = new TranscodeFfmpeg(invid); if (!transcoder->ffexec_ok()) { /* ffmpeg binary was not found. TranscodeFfmpeg prints a warning */ - unlink (insnd.c_str()); + ::g_unlink (insnd.c_str()); Gtk::Dialog::response(RESPONSE_CANCEL); return; } if (!transcoder->probe_ok()) { /* video input file can not be read */ warning << _("Export Video: Video input file cannot be read.") << endmsg; - unlink (insnd.c_str()); + ::g_unlink (insnd.c_str()); Gtk::Dialog::response(RESPONSE_CANCEL); return; } @@ -598,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()) { @@ -686,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"; @@ -718,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;