]> git.sesse.net Git - x264/blob - gtk/x264_gtk_bitrate.c
Update file headers throughout x264
[x264] / gtk / x264_gtk_bitrate.c
1 /*****************************************************************************
2  * x264_gtk_bitrate.c: h264 gtk encoder frontend
3  *****************************************************************************
4  * Copyright (C) 2006 Vincent Torri
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111, USA.
19  *****************************************************************************/
20
21 #if defined __FreeBSD__ || defined __OpenBSD__ || defined __NetBSD__ || defined __DragonFly__
22 #  include <inttypes.h>
23 #else
24 #  include <stdint.h>
25 #endif
26
27 #include <gtk/gtk.h>
28
29 #include "../x264.h"
30 #include "x264_gtk_i18n.h"
31 #include "x264_gtk_private.h"
32 #include "x264_gtk_enum.h"
33
34
35 /* Callbacks */
36 static void     x264_bitrate_pass     (GtkComboBox     *combo,
37                                    gpointer         user_data);
38 static void     x264_bitrate_statfile (GtkToggleButton *button,
39                                    gpointer         user_data);
40
41 GtkWidget *
42 x264_bitrate_page (X264_Gui_Config *gconfig)
43 {
44   GtkWidget   *vbox;
45   GtkWidget   *frame;
46   GtkWidget   *table;
47   GtkWidget   *image;
48   GtkWidget   *eb;
49   GtkWidget   *label;
50   GtkTooltips *tooltips;
51
52   tooltips = gtk_tooltips_new ();
53
54   vbox = gtk_vbox_new (FALSE, 0);
55   gtk_container_set_border_width (GTK_CONTAINER (vbox), 6);
56
57   image = gtk_image_new_from_file (X264_DATA_DIR "/x264/x264.png");
58   gtk_box_pack_start (GTK_BOX (vbox), image, FALSE, TRUE, 6);
59   gtk_widget_show (image);
60
61   frame = gtk_frame_new (_("Main settings"));
62   gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 6);
63   gtk_widget_show (frame);
64
65   table = gtk_table_new (2, 2, TRUE);
66   gtk_table_set_row_spacings (GTK_TABLE (table), 6);
67   gtk_table_set_col_spacings (GTK_TABLE (table), 6);
68   gtk_container_set_border_width (GTK_CONTAINER (table), 6);
69   gtk_container_add (GTK_CONTAINER (frame), table);
70   gtk_widget_show (table);
71
72   eb = gtk_event_box_new ();
73   gtk_event_box_set_visible_window (GTK_EVENT_BOX (eb), FALSE);
74   gtk_tooltips_set_tip (tooltips, eb,
75                         _("Encoding type - description"),
76                         "");
77   gtk_table_attach_defaults (GTK_TABLE (table), eb,
78                              0, 1, 0, 1);
79   gtk_widget_show (eb);
80
81   label = gtk_label_new (_("Encoding type"));
82   gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
83   gtk_container_add (GTK_CONTAINER (eb), label);
84   gtk_widget_show (label);
85
86   gconfig->bitrate.pass = gtk_combo_box_new_text ();
87   gtk_combo_box_append_text (GTK_COMBO_BOX (gconfig->bitrate.pass),
88                              _("Single Pass - Bitrate"));
89   gtk_combo_box_append_text (GTK_COMBO_BOX (gconfig->bitrate.pass),
90                              _("Single Pass - Quantizer"));
91   gtk_combo_box_append_text (GTK_COMBO_BOX (gconfig->bitrate.pass),
92                              _("Multipass - First Pass"));
93   gtk_combo_box_append_text (GTK_COMBO_BOX (gconfig->bitrate.pass),
94                              _("Multipass - First Pass (fast)"));
95   gtk_combo_box_append_text (GTK_COMBO_BOX (gconfig->bitrate.pass),
96                              _("Multipass - Nth Pass"));
97   gtk_table_attach_defaults (GTK_TABLE (table), gconfig->bitrate.pass,
98                              1, 2, 0, 1);
99   g_signal_connect (G_OBJECT (gconfig->bitrate.pass),
100                     "changed",
101                     G_CALLBACK (x264_bitrate_pass),
102                     gconfig);
103   gtk_widget_show (gconfig->bitrate.pass);
104
105   eb = gtk_event_box_new ();
106   gtk_event_box_set_visible_window (GTK_EVENT_BOX (eb), FALSE);
107   gtk_tooltips_set_tip (tooltips, eb,
108                         _("Quantizer - description"),
109                         "");
110   gtk_table_attach_defaults (GTK_TABLE (table), eb,
111                              0, 1, 1, 2);
112   gtk_widget_show (eb);
113
114   gconfig->bitrate.label = gtk_label_new (_("Quantizer"));
115   gtk_misc_set_alignment (GTK_MISC (gconfig->bitrate.label), 0.0, 0.5);
116   gtk_container_add (GTK_CONTAINER (eb), gconfig->bitrate.label);
117   gtk_widget_show (gconfig->bitrate.label);
118
119   gconfig->bitrate.w_quantizer = gtk_hscale_new_with_range (0.0, 51.0, 1.0);
120   gtk_scale_set_digits (GTK_SCALE (gconfig->bitrate.w_quantizer), 0);
121   gtk_scale_set_value_pos (GTK_SCALE (gconfig->bitrate.w_quantizer), GTK_POS_RIGHT);
122   gtk_table_attach_defaults (GTK_TABLE (table), gconfig->bitrate.w_quantizer,
123                              1, 2, 1, 2);
124
125   gconfig->bitrate.w_average_bitrate = gtk_entry_new_with_max_length (4095);
126   gtk_table_attach_defaults (GTK_TABLE (table), gconfig->bitrate.w_average_bitrate,
127                              1, 2, 1, 2);
128
129   gconfig->bitrate.w_target_bitrate = gtk_entry_new_with_max_length (4095);
130   gtk_table_attach_defaults (GTK_TABLE (table), gconfig->bitrate.w_target_bitrate,
131                              1, 2, 1, 2);
132
133   frame = gtk_frame_new (_("Statistic file"));
134   gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 6);
135   gtk_widget_show (frame);
136
137   table = gtk_table_new (2, 2, TRUE);
138   gtk_table_set_row_spacings (GTK_TABLE (table), 6);
139   gtk_table_set_col_spacings (GTK_TABLE (table), 6);
140   gtk_container_set_border_width (GTK_CONTAINER (table), 6);
141   gtk_container_add (GTK_CONTAINER (frame), table);
142   gtk_widget_show (table);
143
144   gconfig->bitrate.update_statfile = gtk_check_button_new_with_label (_("Update statistic file"));
145   gtk_tooltips_set_tip (tooltips, gconfig->bitrate.update_statfile,
146                         _("Update statistic file - description"),
147                         "");
148   g_signal_connect (G_OBJECT (gconfig->bitrate.update_statfile),
149                     "toggled",
150                     G_CALLBACK (x264_bitrate_statfile), gconfig);
151   gtk_table_attach_defaults (GTK_TABLE (table), gconfig->bitrate.update_statfile,
152                              0, 1, 0, 1);
153   gtk_widget_show (gconfig->bitrate.update_statfile);
154
155   label = gtk_label_new (_("Statistic file name"));
156   gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
157   gtk_table_attach_defaults (GTK_TABLE (table), label,
158                              0, 1, 1, 2);
159   gtk_widget_show (label);
160
161   gconfig->bitrate.statsfile_name = gtk_entry_new_with_max_length (4095);
162   gtk_table_attach_defaults (GTK_TABLE (table), gconfig->bitrate.statsfile_name,
163                              1, 2, 1, 2);
164   gtk_widget_show (gconfig->bitrate.statsfile_name);
165
166   return vbox;
167 }
168
169 /* Callbacks */
170 static void
171 x264_bitrate_pass (GtkComboBox *combo,
172                gpointer    user_data)
173 {
174   X264_Gui_Config *gconfig;
175
176   gconfig = (X264_Gui_Config *)user_data;
177
178   switch (gtk_combo_box_get_active (combo))
179     {
180     case X264_PASS_SINGLE_BITRATE:
181       gtk_label_set_text (GTK_LABEL (gconfig->bitrate.label), _("Average bitrate"));
182       if (!GTK_WIDGET_VISIBLE (gconfig->bitrate.w_average_bitrate)) {
183         gtk_widget_hide (gconfig->bitrate.w_quantizer);
184         gtk_widget_hide (gconfig->bitrate.w_target_bitrate);
185         gtk_widget_show (gconfig->bitrate.w_average_bitrate);
186       }
187       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gconfig->bitrate.update_statfile), FALSE);
188       gtk_widget_set_sensitive (gconfig->bitrate.update_statfile, FALSE);
189       break;
190     case X264_PASS_SINGLE_QUANTIZER:
191       gtk_label_set_text (GTK_LABEL (gconfig->bitrate.label), _("Quantizer"));
192       if (!GTK_WIDGET_VISIBLE (gconfig->bitrate.w_quantizer)) {
193         gtk_widget_hide (gconfig->bitrate.w_average_bitrate);
194         gtk_widget_hide (gconfig->bitrate.w_target_bitrate);
195         gtk_widget_show (gconfig->bitrate.w_quantizer);
196       }
197       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gconfig->bitrate.update_statfile), FALSE);
198       gtk_widget_set_sensitive (gconfig->bitrate.update_statfile, FALSE);
199       break;
200     case X264_PASS_MULTIPASS_1ST:
201     case X264_PASS_MULTIPASS_1ST_FAST:
202       gtk_label_set_text (GTK_LABEL (gconfig->bitrate.label), _("Target bitrate"));
203       if (!GTK_WIDGET_VISIBLE (gconfig->bitrate.w_target_bitrate)) {
204         gtk_widget_hide (gconfig->bitrate.w_quantizer);
205         gtk_widget_hide (gconfig->bitrate.w_average_bitrate);
206         gtk_widget_show (gconfig->bitrate.w_target_bitrate);
207       }
208       gtk_widget_set_sensitive (gconfig->bitrate.update_statfile, TRUE);
209       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gconfig->bitrate.update_statfile), TRUE);
210       break;
211     case X264_PASS_MULTIPASS_NTH:
212       gtk_label_set_text (GTK_LABEL (gconfig->bitrate.label), _("Target bitrate"));
213       if (!GTK_WIDGET_VISIBLE (gconfig->bitrate.w_target_bitrate)) {
214         gtk_widget_hide (gconfig->bitrate.w_quantizer);
215         gtk_widget_hide (gconfig->bitrate.w_average_bitrate);
216         gtk_widget_show (gconfig->bitrate.w_target_bitrate);
217       }
218       gtk_widget_set_sensitive (gconfig->bitrate.update_statfile, TRUE);
219       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gconfig->bitrate.update_statfile), TRUE);
220       break;
221     }
222 }
223
224 static void
225 x264_bitrate_statfile (GtkToggleButton *button,
226                    gpointer         user_data)
227 {
228   X264_Gui_Config *gconfig;
229
230   gconfig = (X264_Gui_Config *)user_data;
231
232   if (gtk_toggle_button_get_active (button))
233     gtk_widget_set_sensitive (gconfig->bitrate.statsfile_name, TRUE);
234   else
235     gtk_widget_set_sensitive (gconfig->bitrate.statsfile_name, FALSE);
236 }