X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fadd_video_dialog.cc;h=a005b74467f5dfb12ead55cede5e9799b63e0d96;hb=af3056769cdc09d9ce3b21f9f8e0aa8145ed8f0e;hp=7e3c3e853c8b84647a75cc7292013a7c5377a94a;hpb=3b20beb8d80e6b0ac12ef17e4f10e1d5dcc9fe55;p=ardour.git diff --git a/gtk2_ardour/add_video_dialog.cc b/gtk2_ardour/add_video_dialog.cc index 7e3c3e853c..a005b74467 100644 --- a/gtk2_ardour/add_video_dialog.cc +++ b/gtk2_ardour/add_video_dialog.cc @@ -17,8 +17,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#ifdef WITH_VIDEOTIMELINE - #include #include @@ -56,9 +54,10 @@ AddVideoDialog::AddVideoDialog (Session* s) : ArdourDialog (_("Set Video Track")) , seek_slider (0,1000,1) , preview_path ("") - , pi_duration ("-", Gtk::ALIGN_RIGHT, Gtk::ALIGN_CENTER, false) - , pi_aspect ("-", Gtk::ALIGN_RIGHT, Gtk::ALIGN_CENTER, false) - , pi_fps ("-", Gtk::ALIGN_RIGHT, Gtk::ALIGN_CENTER, false) + , pi_tcin ("-", Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false) + , pi_tcout ("-", Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false) + , pi_aspect ("-", Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false) + , pi_fps ("-", Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false) , chooser (FILE_CHOOSER_ACTION_OPEN) , xjadeo_checkbox (_("Launch External Video Monitor")) , set_session_fps_checkbox (_("Adjust Session Framerate to Match Video Framerate")) @@ -69,7 +68,6 @@ AddVideoDialog::AddVideoDialog (Session* s) { set_session (s); set_name ("AddVideoDialog"); - set_position (Gtk::WIN_POS_MOUSE); set_modal (true); set_skip_taskbar_hint (true); set_resizable (true); @@ -157,7 +155,7 @@ AddVideoDialog::AddVideoDialog (Session* s) /* preview pane */ VBox* previewpane = manage (new VBox); - Gtk::Table *table = manage(new Table(4,2)); + Gtk::Table *table = manage(new Table(5,2)); table->set_row_spacings(2); table->set_col_spacings(4); @@ -165,15 +163,18 @@ AddVideoDialog::AddVideoDialog (Session* s) l = manage (new Label (_("Video Information"), Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER, false)); l->set_use_markup (); table->attach (*l, 0, 2, 0, 1, FILL, FILL); - l = manage (new Label (_("Duration:"), Gtk::ALIGN_RIGHT, Gtk::ALIGN_CENTER, false)); + l = manage (new Label (_("Start:"), Gtk::ALIGN_RIGHT, Gtk::ALIGN_CENTER, false)); table->attach (*l, 0, 1, 1, 2, FILL, FILL); - table->attach (pi_duration, 1, 2, 1, 2, FILL, FILL); - l = manage (new Label (_("Frame rate:"), Gtk::ALIGN_RIGHT, Gtk::ALIGN_CENTER, false)); + table->attach (pi_tcin, 1, 2, 1, 2, FILL, FILL); + l = manage (new Label (_("End:"), Gtk::ALIGN_RIGHT, Gtk::ALIGN_CENTER, false)); table->attach (*l, 0, 1, 2, 3, FILL, FILL); - table->attach (pi_fps, 1, 2, 2, 3, FILL, FILL); - l = manage (new Label (_("Aspect Ratio:"), Gtk::ALIGN_RIGHT, Gtk::ALIGN_CENTER, false)); + table->attach (pi_tcout, 1, 2, 2, 3, FILL, FILL); + l = manage (new Label (_("Frame rate:"), Gtk::ALIGN_RIGHT, Gtk::ALIGN_CENTER, false)); table->attach (*l, 0, 1, 3, 4, FILL, FILL); - table->attach (pi_aspect, 1, 2, 3, 4, FILL, FILL); + table->attach (pi_fps, 1, 2, 3, 4, FILL, FILL); + l = manage (new Label (_("Aspect Ratio:"), Gtk::ALIGN_RIGHT, Gtk::ALIGN_CENTER, false)); + table->attach (*l, 0, 1, 4, 5, FILL, FILL); + table->attach (pi_aspect, 1, 2, 4, 5, FILL, FILL); preview_image = manage(new Gtk::Image); @@ -188,10 +189,10 @@ AddVideoDialog::AddVideoDialog (Session* s) Gtk::Alignment *al = manage(new Gtk::Alignment()); al->set_size_request(-1, 20); - previewpane->pack_start (*al, false, false); - previewpane->pack_start (*hbox, true, true, 6); previewpane->pack_start (*preview_image, false, false); previewpane->pack_start (seek_slider, false, false); + previewpane->pack_start (*al, false, false); + previewpane->pack_start (*hbox, true, true, 6); /* Overall layout */ hbox = manage (new HBox); @@ -343,6 +344,15 @@ AddVideoDialog::auto_set_session_fps () return set_session_fps_checkbox.get_active(); } +void +AddVideoDialog::clear_preview_image () +{ + imgbuf->fill(RGBA_TO_UINT(0,0,0,255)); + video_draw_cross(imgbuf); + preview_image->set(imgbuf); + preview_image->show(); +} + void AddVideoDialog::set_action_ok (bool yn) { @@ -350,14 +360,12 @@ AddVideoDialog::set_action_ok (bool yn) ok_button->set_sensitive(true); } else { preview_path = ""; - pi_duration.set_text("-"); + pi_tcin.set_text("-"); + pi_tcout.set_text("-"); pi_aspect.set_text("-"); pi_fps.set_text("-"); ok_button->set_sensitive(false); - imgbuf->fill(RGBA_TO_UINT(0,0,0,255)); - video_draw_cross(imgbuf); - preview_image->set(imgbuf); - preview_image->show(); + clear_preview_image(); } } @@ -372,6 +380,7 @@ AddVideoDialog::file_selection_changed () && !Glib::file_test(path.c_str(), Glib::FILE_TEST_IS_DIR); set_action_ok(ok); if (ok) { + seek_slider.set_value(0); request_preview(video_map_path(video_get_docroot(Config), path)); } } else { @@ -409,6 +418,7 @@ AddVideoDialog::harvid_list_view_selected () { set_action_ok(false); } else { set_action_ok(true); + seek_slider.set_value(0); request_preview((*iter)[harvid_list_columns.uri]); } } @@ -552,9 +562,12 @@ AddVideoDialog::request_preview(std::string u) printf("image preview info request failed\n"); // set_action_ok(false); // XXX only if docroot mismatch preview_path = ""; - pi_duration.set_text("-"); + pi_tcin.set_text("-"); + pi_tcout.set_text("-"); pi_aspect.set_text("-"); pi_fps.set_text("-"); + + clear_preview_image(); return; } @@ -564,9 +577,80 @@ AddVideoDialog::request_preview(std::string u) clip_height = MIN(PREVIEW_HEIGHT, rint(clip_width / video_aspect_ratio)); } - pi_duration.set_text(string_compose("%1 sec", video_duration / video_file_fps)); - pi_aspect.set_text(string_compose("%1", video_aspect_ratio)); - pi_fps.set_text(string_compose("%1 fps", video_file_fps)); + pi_tcin.set_text(Timecode::timecode_format_sampletime( + video_start_offset, video_file_fps, video_file_fps, rint(video_file_fps*100.0)==2997)); + pi_tcout.set_text(Timecode::timecode_format_sampletime( + video_start_offset + video_duration, video_file_fps, video_file_fps, rint(video_file_fps*100.0)==2997)); + + /* todo break out this code -> re-usability */ + const int arc = rint(video_aspect_ratio*100); + + switch (arc) { + case 100: + pi_aspect.set_text(X_(" 1:1")); // square (large format stills) + break; + case 125: + pi_aspect.set_text(X_(" 5:4")); + break; + case 133: + pi_aspect.set_text(X_(" 4:3")); + break; + case 134: + pi_aspect.set_text(X_(" 47:35")); // 752x560, Super8-scans + break; + case 137: + case 138: + pi_aspect.set_text(X_(" 1.37:1")); // 'Academy ratio' <= 1953 + break; + case 141: + pi_aspect.set_text(X_(" 1.41:1")); // Lichtenberg ratio + break; + case 150: + pi_aspect.set_text(X_(" 3:2")); // classic 35mm + break; + case 160: + pi_aspect.set_text(X_(" 8:5")); // credit-card size + break; + case 162: + pi_aspect.set_text(X_(" 16:10")); // golden ratio 1.61803.. + break; + case 166: + case 167: + pi_aspect.set_text(X_(" 5:3")); // Super16, EU-widescreen + break; + case 177: + case 178: + pi_aspect.set_text(X_(" 16:9")); // HD video + break; + case 180: + pi_aspect.set_text(X_(" 9:5")); + break; + case 185: + pi_aspect.set_text(X_(" 1.85:1")); // US widescreen cinema + break; + case 200: + pi_aspect.set_text(X_(" 2:1")); + break; + case 239: + case 240: + pi_aspect.set_text(X_(" 2.40:1")); // Anamorphic + break; + case 266: + case 267: + pi_aspect.set_text(X_(" 2.66:1")); // CinemaScope + break; + case 275: + pi_aspect.set_text(X_(" 2.75:1")); // Ultra Panavision + break; + case 400: + pi_aspect.set_text(X_(" 4.00:1")); // three 35mm 1.33:1 polyvision + break; + default: + pi_aspect.set_text(string_compose(X_(" %1:1"), video_aspect_ratio)); + break; + } + + pi_fps.set_text(string_compose(_(" %1 fps"), video_file_fps)); clip_xoff = (PREVIEW_WIDTH - clip_width)/2; clip_yoff = (PREVIEW_HEIGHT - clip_height)/2; @@ -597,5 +681,3 @@ AddVideoDialog::request_preview(std::string u) preview_image->set(imgbuf); preview_image->show(); } - -#endif /* WITH_VIDEOTIMELINE */