# HG changeset patch # User nenolod # Date 1177995455 25200 # Node ID 1d25b3513a179c38eb1db31052f0b05c19bd53e3 # Parent 8f432e790cfbd258a2a6ca40dc952dd7bccc15da [svn] - add configure interface - default to -q5 as recommended by Xiph and hydrogenaudio.com diff -r 8f432e790cfb -r 1d25b3513a17 ChangeLog --- a/ChangeLog Mon Apr 30 21:19:47 2007 -0700 +++ b/ChangeLog Mon Apr 30 21:57:35 2007 -0700 @@ -1,3 +1,11 @@ +2007-05-01 04:19:47 +0000 Yoshiki Yazawa + revision [2114] + - add check for cfg.stopaftersong at the end of cue. + + trunk/src/cue/cuesheet.c | 3 +++ + 1 file changed, 3 insertions(+) + + 2007-05-01 04:18:44 +0000 William Pitcock revision [2112] - add Vorbis output mode diff -r 8f432e790cfb -r 1d25b3513a17 src/filewriter/vorbis.c --- a/src/filewriter/vorbis.c Mon Apr 30 21:19:47 2007 -0700 +++ b/src/filewriter/vorbis.c Mon Apr 30 21:57:35 2007 -0700 @@ -24,6 +24,7 @@ #include static void vorbis_init(void); +static void vorbis_configure(void); static gint vorbis_open(void); static void vorbis_write(gpointer data, gint length); static void vorbis_close(void); @@ -34,7 +35,7 @@ FileWriter vorbis_plugin = { vorbis_init, - NULL, + vorbis_configure, vorbis_open, vorbis_write, vorbis_close, @@ -43,7 +44,7 @@ vorbis_get_written_time }; -static float v_base_quality = 0.3; +static float v_base_quality = 0.5; static ogg_stream_state os; static ogg_page og; @@ -201,3 +202,87 @@ return 0; } + +/* configuration stuff */ +static GtkWidget *configure_win = NULL; +static GtkWidget *quality_frame, *quality_vbox, *quality_hbox1, *quality_spin, *quality_label; +static GtkObject *quality_adj; + +static void quality_change(GtkAdjustment *adjustment, gpointer user_data) +{ + if (gtk_spin_button_get_value_as_float(GTK_SPIN_BUTTON(quality_spin))) + v_base_quality = gtk_spin_button_get_value_as_float(GTK_SPIN_BUTTON(quality_spin)) / 10; + else + v_base_quality = 0.0; +} + +static void configure_ok_cb(gpointer data) +{ + ConfigDb *db = bmp_cfg_db_open(); + + bmp_cfg_db_set_float(db, "filewrite_vorbis", "base_quality", v_base_quality); + + bmp_cfg_db_close(db); + + gtk_widget_hide(configure_win); +} + +static void vorbis_configure(void) +{ + GtkWidget *vbox, *bbox; + GtkWidget *button; + + if (configure_win == NULL) + { + configure_win = gtk_window_new(GTK_WINDOW_TOPLEVEL); + g_signal_connect(G_OBJECT(configure_win), "destroy", G_CALLBACK(gtk_widget_destroyed), NULL); + + gtk_window_set_title(GTK_WINDOW(configure_win), _("Vorbis Encoder Configuration")); + gtk_container_set_border_width(GTK_CONTAINER(configure_win), 5); + + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add(GTK_CONTAINER(configure_win), vbox); + + /* quality options */ + quality_frame = gtk_frame_new(_("Quality")); + gtk_container_set_border_width(GTK_CONTAINER(quality_frame), 5); + gtk_box_pack_start(GTK_BOX(vbox), quality_frame, FALSE, FALSE, 2); + + quality_vbox = gtk_vbox_new(FALSE, 5); + gtk_container_set_border_width(GTK_CONTAINER(quality_vbox), 10); + gtk_container_add(GTK_CONTAINER(quality_frame), quality_vbox); + + /* quality option: vbr level */ + quality_hbox1 = gtk_hbox_new(FALSE, 5); + gtk_container_set_border_width(GTK_CONTAINER(quality_hbox1), 10); + gtk_container_add(GTK_CONTAINER(quality_vbox), quality_hbox1); + + quality_label = gtk_label_new(_("Quality level (0 - 10):")); + gtk_misc_set_alignment(GTK_MISC(quality_label), 0, 0.5); + gtk_box_pack_start(GTK_BOX(quality_hbox1), quality_label, TRUE, TRUE, 0); + + quality_adj = gtk_adjustment_new(5, 0, 10, 0.1, 1, 1); + quality_spin = gtk_spin_button_new(GTK_ADJUSTMENT(quality_adj), 1, 2); + gtk_box_pack_start(GTK_BOX(quality_hbox1), quality_spin, TRUE, TRUE, 0); + g_signal_connect(G_OBJECT(quality_adj), "value-changed", G_CALLBACK(quality_change), NULL); + + gtk_spin_button_set_value(GTK_SPIN_BUTTON(quality_spin), (v_base_quality * 10)); + + /* buttons */ + bbox = gtk_hbutton_box_new(); + gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); + gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); + gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0); + + button = gtk_button_new_from_stock(GTK_STOCK_CANCEL); + g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK(gtk_widget_hide), GTK_OBJECT(configure_win)); + gtk_box_pack_start(GTK_BOX(bbox), button, TRUE, TRUE, 0); + + button = gtk_button_new_from_stock(GTK_STOCK_OK); + g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(configure_ok_cb), NULL); + gtk_box_pack_start(GTK_BOX(bbox), button, TRUE, TRUE, 0); + gtk_widget_grab_default(button); + } + + gtk_widget_show_all(configure_win); +}