summaryrefslogtreecommitdiff
path: root/gtk2_ardour/export_video_dialog.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2013-09-13 11:55:56 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2013-09-13 11:55:56 -0400
commit4861eca97483128e5febb575b94688581abb0154 (patch)
tree9893912806d7267a0086a94d4065d32663fe157b /gtk2_ardour/export_video_dialog.cc
parentc985a64d5851634a77bc013a7f66ef8d9ccefcae (diff)
parent83a826095deaddb90b8236a757c384aa6f120e71 (diff)
Merge branch 'master' into windows
Diffstat (limited to 'gtk2_ardour/export_video_dialog.cc')
-rw-r--r--gtk2_ardour/export_video_dialog.cc39
1 files changed, 33 insertions, 6 deletions
diff --git a/gtk2_ardour/export_video_dialog.cc b/gtk2_ardour/export_video_dialog.cc
index f54232a681..7f6fcc2a8a 100644
--- a/gtk2_ardour/export_video_dialog.cc
+++ b/gtk2_ardour/export_video_dialog.cc
@@ -64,9 +64,9 @@ using namespace PBD;
using namespace ARDOUR;
using namespace VideoUtils;
-ExportVideoDialog::ExportVideoDialog (PublicEditor& ed, Session* s)
+ExportVideoDialog::ExportVideoDialog (Session* s, TimeSelection &tme)
: ArdourDialog (_("Export Video File "))
- , editor (ed)
+ , export_range (tme)
, outfn_path_label (_("File:"), Gtk::ALIGN_LEFT)
, outfn_browse_button (_("Browse"))
, invid_path_label (_("Video:"), Gtk::ALIGN_LEFT)
@@ -152,6 +152,9 @@ ExportVideoDialog::ExportVideoDialog (PublicEditor& ed, Session* s)
} else {
insnd_combo.append_text (_("from the video's start to the video's end"));
}
+ if (!export_range.empty()) {
+ insnd_combo.append_text (_("Selected range")); // TODO show export_range.start() -> export_range.end_frame()
+ }
insnd_combo.set_active(0);
outfn_path_entry.set_width_chars(38);
@@ -509,6 +512,11 @@ 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();
+ }
if (end <= 0) {
start = _session->current_start_frame();
end = _session->current_end_frame();
@@ -696,9 +704,14 @@ ExportVideoDialog::encode_pass (int pass)
double duration_s = 0;
if (insnd_combo.get_active_row_number() == 0) {
+ /* session start to session end */
framecnt_t duration_f = _session->current_end_frame() - _session->current_start_frame();
duration_s = (double)duration_f / (double)_session->nominal_frame_rate();
+ } else if (insnd_combo.get_active_row_number() == 2) {
+ /* selected range */
+ duration_s = export_range.length() / (double)_session->nominal_frame_rate();
} else {
+ /* video start to end */
framecnt_t duration_f = ARDOUR_UI::instance()->video_timeline->get_duration();
if (av_offset < 0 ) {
duration_f += av_offset;
@@ -714,10 +727,16 @@ ExportVideoDialog::encode_pass (int pass)
transcoder->set_duration(duration_s * transcoder->get_fps());
}
- if (insnd_combo.get_active_row_number() == 0) {
- const framepos_t start = _session->current_start_frame();
- const framepos_t snend = _session->current_end_frame();
+ if (insnd_combo.get_active_row_number() == 0 || insnd_combo.get_active_row_number() == 2) {
+ framepos_t start, snend;
const frameoffset_t vid_duration = ARDOUR_UI::instance()->video_timeline->get_duration();
+ if (insnd_combo.get_active_row_number() == 0) {
+ start = _session->current_start_frame();
+ snend = _session->current_end_frame();
+ } else {
+ start = export_range.start();
+ snend = export_range.end_frame();
+ }
#if 0 /* DEBUG */
printf("AV offset: %lld Vid-len: %lld Vid-end: %lld || start:%lld || end:%lld\n",
@@ -732,9 +751,17 @@ ExportVideoDialog::encode_pass (int pass)
} else if (av_offset + vid_duration < snend) {
transcoder->set_leadinout(0, (snend - (av_offset + vid_duration)) / (double)_session->nominal_frame_rate());
transcoder->set_avoffset((av_offset - start) / (double)_session->nominal_frame_rate());
- } else {
+ }
+#if 0
+ else if (start > av_offset) {
+ std::ostringstream osstream; osstream << ((start - av_offset) / (double)_session->nominal_frame_rate());
+ ffs["-ss"] = osstream.str();
+ }
+#endif
+ else {
transcoder->set_avoffset((av_offset - start) / (double)_session->nominal_frame_rate());
}
+
} else if (av_offset < 0) {
/* from 00:00:00:00 to video-end */
transcoder->set_avoffset(av_offset / (double)_session->nominal_frame_rate());