]> git.sesse.net Git - x264/blob - gtk/x264_gtk_bitrate.c
check whether ld supports -Bsymbolic before using it
[x264] / gtk / x264_gtk_bitrate.c
1 #if defined __FreeBSD__ || defined __OpenBSD__ || defined __NetBSD__ || defined __DragonFly__
2 #  include <inttypes.h>
3 #else
4 #  include <stdint.h>
5 #endif
6
7 #include <gtk/gtk.h>
8
9 #include "../x264.h"
10 #include "x264_gtk_i18n.h"
11 #include "x264_gtk_private.h"
12 #include "x264_gtk_enum.h"
13
14
15 /* Callbacks */
16 static void     _bitrate_pass     (GtkComboBox     *combo,
17                                    gpointer         user_data);
18 static void     _bitrate_statfile (GtkToggleButton *button,
19                                    gpointer         user_data);
20
21 GtkWidget *
22 _bitrate_page (X264_Gui_Config *gconfig)
23 {
24   GtkWidget   *vbox;
25   GtkWidget   *frame;
26   GtkWidget   *table;
27   GtkWidget   *image;
28   GtkWidget   *eb;
29   GtkWidget   *label;
30   GtkTooltips *tooltips;
31
32   tooltips = gtk_tooltips_new ();
33
34   vbox = gtk_vbox_new (FALSE, 0);
35   gtk_container_set_border_width (GTK_CONTAINER (vbox), 6);
36
37   image = gtk_image_new_from_file (X264_DATA_DIR "/x264/x264.png");
38   gtk_box_pack_start (GTK_BOX (vbox), image, FALSE, TRUE, 6);
39   gtk_widget_show (image);
40
41   frame = gtk_frame_new (_("Main settings"));
42   gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 6);
43   gtk_widget_show (frame);
44
45   table = gtk_table_new (2, 2, TRUE);
46   gtk_table_set_row_spacings (GTK_TABLE (table), 6);
47   gtk_table_set_col_spacings (GTK_TABLE (table), 6);
48   gtk_container_set_border_width (GTK_CONTAINER (table), 6);
49   gtk_container_add (GTK_CONTAINER (frame), table);
50   gtk_widget_show (table);
51
52   eb = gtk_event_box_new ();
53   gtk_event_box_set_visible_window (GTK_EVENT_BOX (eb), FALSE);
54   gtk_tooltips_set_tip (tooltips, eb,
55                         _("Encoding type - description"),
56                         "");
57   gtk_table_attach_defaults (GTK_TABLE (table), eb,
58                              0, 1, 0, 1);
59   gtk_widget_show (eb);
60
61   label = gtk_label_new (_("Encoding type"));
62   gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
63   gtk_container_add (GTK_CONTAINER (eb), label);
64   gtk_widget_show (label);
65
66   gconfig->bitrate.pass = gtk_combo_box_new_text ();
67   gtk_combo_box_append_text (GTK_COMBO_BOX (gconfig->bitrate.pass),
68                              _("Single Pass - Bitrate"));
69   gtk_combo_box_append_text (GTK_COMBO_BOX (gconfig->bitrate.pass),
70                              _("Single Pass - Quantizer"));
71   gtk_combo_box_append_text (GTK_COMBO_BOX (gconfig->bitrate.pass),
72                              _("Multipass - First Pass"));
73   gtk_combo_box_append_text (GTK_COMBO_BOX (gconfig->bitrate.pass),
74                              _("Multipass - First Pass (fast)"));
75   gtk_combo_box_append_text (GTK_COMBO_BOX (gconfig->bitrate.pass),
76                              _("Multipass - Nth Pass"));
77   gtk_table_attach_defaults (GTK_TABLE (table), gconfig->bitrate.pass,
78                              1, 2, 0, 1);
79   g_signal_connect (G_OBJECT (gconfig->bitrate.pass),
80                     "changed",
81                     G_CALLBACK (_bitrate_pass),
82                     gconfig);
83   gtk_widget_show (gconfig->bitrate.pass);
84
85   eb = gtk_event_box_new ();
86   gtk_event_box_set_visible_window (GTK_EVENT_BOX (eb), FALSE);
87   gtk_tooltips_set_tip (tooltips, eb,
88                         _("Quantizer - description"),
89                         "");
90   gtk_table_attach_defaults (GTK_TABLE (table), eb,
91                              0, 1, 1, 2);
92   gtk_widget_show (eb);
93
94   gconfig->bitrate.label = gtk_label_new (_("Quantizer"));
95   gtk_misc_set_alignment (GTK_MISC (gconfig->bitrate.label), 0.0, 0.5);
96   gtk_container_add (GTK_CONTAINER (eb), gconfig->bitrate.label);
97   gtk_widget_show (gconfig->bitrate.label);
98
99   gconfig->bitrate.w_quantizer = gtk_hscale_new_with_range (0.0, 51.0, 1.0);
100   gtk_scale_set_digits (GTK_SCALE (gconfig->bitrate.w_quantizer), 0);
101   gtk_scale_set_value_pos (GTK_SCALE (gconfig->bitrate.w_quantizer), GTK_POS_RIGHT);
102   gtk_table_attach_defaults (GTK_TABLE (table), gconfig->bitrate.w_quantizer,
103                              1, 2, 1, 2);
104
105   gconfig->bitrate.w_average_bitrate = gtk_entry_new_with_max_length (4095);
106   gtk_table_attach_defaults (GTK_TABLE (table), gconfig->bitrate.w_average_bitrate,
107                              1, 2, 1, 2);
108
109   gconfig->bitrate.w_target_bitrate = gtk_entry_new_with_max_length (4095);
110   gtk_table_attach_defaults (GTK_TABLE (table), gconfig->bitrate.w_target_bitrate,
111                              1, 2, 1, 2);
112
113   frame = gtk_frame_new (_("Statistic file"));
114   gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 6);
115   gtk_widget_show (frame);
116
117   table = gtk_table_new (2, 2, TRUE);
118   gtk_table_set_row_spacings (GTK_TABLE (table), 6);
119   gtk_table_set_col_spacings (GTK_TABLE (table), 6);
120   gtk_container_set_border_width (GTK_CONTAINER (table), 6);
121   gtk_container_add (GTK_CONTAINER (frame), table);
122   gtk_widget_show (table);
123
124   gconfig->bitrate.update_statfile = gtk_check_button_new_with_label (_("Update statistic file"));
125   gtk_tooltips_set_tip (tooltips, gconfig->bitrate.update_statfile,
126                         _("Update statistic file - description"),
127                         "");
128   g_signal_connect (G_OBJECT (gconfig->bitrate.update_statfile),
129                     "toggled",
130                     G_CALLBACK (_bitrate_statfile), gconfig);
131   gtk_table_attach_defaults (GTK_TABLE (table), gconfig->bitrate.update_statfile,
132                              0, 1, 0, 1);
133   gtk_widget_show (gconfig->bitrate.update_statfile);
134
135   label = gtk_label_new (_("Statistic file name"));
136   gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
137   gtk_table_attach_defaults (GTK_TABLE (table), label,
138                              0, 1, 1, 2);
139   gtk_widget_show (label);
140
141   gconfig->bitrate.statsfile_name = gtk_entry_new_with_max_length (4095);
142   gtk_table_attach_defaults (GTK_TABLE (table), gconfig->bitrate.statsfile_name,
143                              1, 2, 1, 2);
144   gtk_widget_show (gconfig->bitrate.statsfile_name);
145
146   return vbox;
147 }
148
149 /* Callbacks */
150 static void
151 _bitrate_pass (GtkComboBox *combo,
152                gpointer    user_data)
153 {
154   X264_Gui_Config *gconfig;
155
156   gconfig = (X264_Gui_Config *)user_data;
157
158   switch (gtk_combo_box_get_active (combo))
159     {
160     case X264_PASS_SINGLE_BITRATE:
161       gtk_label_set_text (GTK_LABEL (gconfig->bitrate.label), _("Average bitrate"));
162       if (!GTK_WIDGET_VISIBLE (gconfig->bitrate.w_average_bitrate)) {
163         gtk_widget_hide (gconfig->bitrate.w_quantizer);
164         gtk_widget_hide (gconfig->bitrate.w_target_bitrate);
165         gtk_widget_show (gconfig->bitrate.w_average_bitrate);
166       }
167       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gconfig->bitrate.update_statfile), FALSE);
168       gtk_widget_set_sensitive (gconfig->bitrate.update_statfile, FALSE);
169       break;
170     case X264_PASS_SINGLE_QUANTIZER:
171       gtk_label_set_text (GTK_LABEL (gconfig->bitrate.label), _("Quantizer"));
172       if (!GTK_WIDGET_VISIBLE (gconfig->bitrate.w_quantizer)) {
173         gtk_widget_hide (gconfig->bitrate.w_average_bitrate);
174         gtk_widget_hide (gconfig->bitrate.w_target_bitrate);
175         gtk_widget_show (gconfig->bitrate.w_quantizer);
176       }
177       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gconfig->bitrate.update_statfile), FALSE);
178       gtk_widget_set_sensitive (gconfig->bitrate.update_statfile, FALSE);
179       break;
180     case X264_PASS_MULTIPASS_1ST:
181     case X264_PASS_MULTIPASS_1ST_FAST:
182       gtk_label_set_text (GTK_LABEL (gconfig->bitrate.label), _("Target bitrate"));
183       if (!GTK_WIDGET_VISIBLE (gconfig->bitrate.w_target_bitrate)) {
184         gtk_widget_hide (gconfig->bitrate.w_quantizer);
185         gtk_widget_hide (gconfig->bitrate.w_average_bitrate);
186         gtk_widget_show (gconfig->bitrate.w_target_bitrate);
187       }
188       gtk_widget_set_sensitive (gconfig->bitrate.update_statfile, TRUE);
189       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gconfig->bitrate.update_statfile), TRUE);
190       break;
191     case X264_PASS_MULTIPASS_NTH:
192       gtk_label_set_text (GTK_LABEL (gconfig->bitrate.label), _("Target bitrate"));
193       if (!GTK_WIDGET_VISIBLE (gconfig->bitrate.w_target_bitrate)) {
194         gtk_widget_hide (gconfig->bitrate.w_quantizer);
195         gtk_widget_hide (gconfig->bitrate.w_average_bitrate);
196         gtk_widget_show (gconfig->bitrate.w_target_bitrate);
197       }
198       gtk_widget_set_sensitive (gconfig->bitrate.update_statfile, TRUE);
199       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gconfig->bitrate.update_statfile), TRUE);
200       break;
201     }
202 }
203
204 static void
205 _bitrate_statfile (GtkToggleButton *button,
206                    gpointer         user_data)
207 {
208   X264_Gui_Config *gconfig;
209
210   gconfig = (X264_Gui_Config *)user_data;
211
212   if (gtk_toggle_button_get_active (button))
213     gtk_widget_set_sensitive (gconfig->bitrate.statsfile_name, TRUE);
214   else
215     gtk_widget_set_sensitive (gconfig->bitrate.statsfile_name, FALSE);
216 }