diff options
author | Robin Gareus <robin@gareus.org> | 2018-11-19 23:45:26 +0100 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2018-11-20 00:21:15 +0100 |
commit | dfef8b7f6257364053e13ab4d5e317b703abd0af (patch) | |
tree | 4718220e4fba3ce6891a4ef98159ebc37528b52b | |
parent | 27e0e78e1df90c2c1fa41a342a11d1c941fca1bf (diff) |
FFMPEG/MP3 encoder quality select GUI
-rw-r--r-- | gtk2_ardour/export_format_dialog.cc | 57 | ||||
-rw-r--r-- | gtk2_ardour/export_format_dialog.h | 18 |
2 files changed, 75 insertions, 0 deletions
diff --git a/gtk2_ardour/export_format_dialog.cc b/gtk2_ardour/export_format_dialog.cc index bc9a553574..2a3a563005 100644 --- a/gtk2_ardour/export_format_dialog.cc +++ b/gtk2_ardour/export_format_dialog.cc @@ -196,6 +196,13 @@ ExportFormatDialog::ExportFormatDialog (FormatPtr format, bool new_dialog) : bold.insert (b); encoding_options_label.set_attributes (bold); + /* Codec options */ + + codec_quality_list = Gtk::ListStore::create (codec_quality_cols); + codec_quality_combo.set_model (codec_quality_list); + codec_quality_combo.pack_start (codec_quality_cols.label); + //codec_quality_combo.set_active (0); + /* Buttons */ revert_button = add_button (Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); @@ -241,6 +248,7 @@ ExportFormatDialog::ExportFormatDialog (FormatPtr format, bool new_dialog) : silence_end_clock.ValueChanged.connect (sigc::mem_fun (*this, &ExportFormatDialog::update_silence_end_selection)); src_quality_combo.signal_changed().connect (sigc::mem_fun (*this, &ExportFormatDialog::update_src_quality_selection)); + codec_quality_combo.signal_changed().connect (sigc::mem_fun (*this, &ExportFormatDialog::update_codec_quality_selection)); /* Format table signals */ @@ -339,6 +347,13 @@ ExportFormatDialog::load_state (FormatPtr spec) } } + for (Gtk::ListStore::Children::iterator it = codec_quality_list->children().begin(); it != codec_quality_list->children().end(); ++it) { + if (it->get_value (codec_quality_cols.quality) == spec->codec_quality()) { + codec_quality_combo.set_active (it); + break; + } + } + for (Gtk::ListStore::Children::iterator it = format_list->children().begin(); it != format_list->children().end(); ++it) { boost::shared_ptr<ARDOUR::ExportFormat> format_in_list = it->get_value (format_cols.ptr); if (format_in_list->get_format_id() == spec->format_id() && @@ -938,6 +953,17 @@ ExportFormatDialog::update_src_quality_selection () } void +ExportFormatDialog::update_codec_quality_selection () +{ + Gtk::TreeModel::const_iterator iter = codec_quality_combo.get_active(); + if (!iter) { + return; + } + int quality = iter->get_value (codec_quality_cols.quality); + manager.select_codec_quality (quality); +} + +void ExportFormatDialog::update_tagging_selection () { manager.select_tagging (tag_checkbox.get_active()); @@ -952,6 +978,7 @@ ExportFormatDialog::change_encoding_options (ExportFormatPtr ptr) boost::shared_ptr<ARDOUR::ExportFormatOggVorbis> ogg_ptr; boost::shared_ptr<ARDOUR::ExportFormatFLAC> flac_ptr; boost::shared_ptr<ARDOUR::ExportFormatBWF> bwf_ptr; + boost::shared_ptr<ARDOUR::ExportFormatFFMPEG> ffmpeg_ptr; if ((linear_ptr = boost::dynamic_pointer_cast<ExportFormatLinear> (ptr))) { show_linear_enconding_options (linear_ptr); @@ -961,6 +988,8 @@ ExportFormatDialog::change_encoding_options (ExportFormatPtr ptr) show_flac_enconding_options (flac_ptr); } else if ((bwf_ptr = boost::dynamic_pointer_cast<ExportFormatBWF> (ptr))) { show_bwf_enconding_options (bwf_ptr); + } else if ((ffmpeg_ptr = boost::dynamic_pointer_cast<ExportFormatFFMPEG> (ptr))) { + show_ffmpeg_enconding_options (ffmpeg_ptr); } else { std::cout << "Unrecognized format!" << std::endl; } @@ -1041,6 +1070,34 @@ ExportFormatDialog::show_bwf_enconding_options (boost::shared_ptr<ARDOUR::Export } void +ExportFormatDialog::show_ffmpeg_enconding_options (boost::shared_ptr<ARDOUR::ExportFormatFFMPEG> ptr) +{ + encoding_options_label.set_label (_("FFMPEG/MP3 options")); + encoding_options_table.resize (1, 1); + encoding_options_table.attach (codec_quality_combo, 0, 1, 0, 1); + + HasCodecQuality::CodecQualityList const & codecs = ptr->get_codec_qualities(); + + codec_quality_list->clear(); + for (HasCodecQuality::CodecQualityList::const_iterator it = codecs.begin(); it != codecs.end(); ++it) { + + Gtk::TreeModel::iterator iter = codec_quality_list->append(); + Gtk::TreeModel::Row row = *iter; + row[codec_quality_cols.quality] = (*it)->quality; + row[codec_quality_cols.label] = (*it)->name; + } + + for (Gtk::ListStore::Children::iterator it = codec_quality_list->children().begin(); it != codec_quality_list->children().end(); ++it) { + if (it->get_value (codec_quality_cols.quality) == format->codec_quality()) { + codec_quality_combo.set_active (it); + break; + } + } + + show_all_children (); +} + +void ExportFormatDialog::fill_sample_format_lists (boost::shared_ptr<ARDOUR::HasSampleFormat> ptr) { /* Fill lists */ diff --git a/gtk2_ardour/export_format_dialog.h b/gtk2_ardour/export_format_dialog.h index 7df227ccb9..2b472e3494 100644 --- a/gtk2_ardour/export_format_dialog.h +++ b/gtk2_ardour/export_format_dialog.h @@ -145,6 +145,7 @@ private: void update_time (ARDOUR::AnyTime & time, AudioClock const & clock); void update_src_quality_selection (); + void update_codec_quality_selection (); void update_tagging_selection (); /*** Encoding options */ @@ -158,6 +159,7 @@ private: void show_ogg_enconding_options (boost::shared_ptr<ARDOUR::ExportFormatOggVorbis> ptr); void show_flac_enconding_options (boost::shared_ptr<ARDOUR::ExportFormatFLAC> ptr); void show_bwf_enconding_options (boost::shared_ptr<ARDOUR::ExportFormatBWF> ptr); + void show_ffmpeg_enconding_options (boost::shared_ptr<ARDOUR::ExportFormatFFMPEG> ptr); void fill_sample_format_lists (boost::shared_ptr<ARDOUR::HasSampleFormat> ptr); @@ -343,6 +345,22 @@ private: Gtk::TreeView sample_format_view; Gtk::TreeView dither_type_view; + + /* codec quality combo */ + + struct CodecQualityCols : public Gtk::TreeModelColumnRecord + { + public: + Gtk::TreeModelColumn<int> quality; + Gtk::TreeModelColumn<std::string> label; + + CodecQualityCols () { add(quality); add(label); } + }; + CodecQualityCols codec_quality_cols; + Glib::RefPtr<Gtk::ListStore> codec_quality_list; + + Gtk::ComboBox codec_quality_combo; + /* Tagging */ Gtk::CheckButton tag_checkbox; |