3 #include "x264_gtk_i18n.h"
4 #include "x264_gtk_private.h"
8 static void _insert_numeric (GtkEditable *editable,
15 _rate_control_page (X264_Gui_Config *config)
22 GtkTooltips *tooltips;
24 tooltips = gtk_tooltips_new ();
26 vbox = gtk_vbox_new (FALSE, 0);
27 gtk_container_set_border_width (GTK_CONTAINER (vbox), 6);
30 frame = gtk_frame_new (_("Bitrate"));
31 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 6);
32 gtk_widget_show (frame);
34 table = gtk_table_new (3, 2, TRUE);
35 gtk_table_set_row_spacings (GTK_TABLE (table), 6);
36 gtk_container_set_border_width (GTK_CONTAINER (table), 6);
37 gtk_container_add (GTK_CONTAINER (frame), table);
38 gtk_widget_show (table);
40 eb = gtk_event_box_new ();
41 gtk_event_box_set_visible_window (GTK_EVENT_BOX (eb), FALSE);
42 gtk_tooltips_set_tip (tooltips, eb,
43 _("Keyframe boost - description"),
45 gtk_table_attach_defaults (GTK_TABLE (table), eb,
49 label = gtk_label_new (_("Keyframe boost (%)"));
50 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
51 gtk_container_add (GTK_CONTAINER (eb), label);
52 gtk_widget_show (label);
54 config->rate_control.bitrate.keyframe_boost = gtk_entry_new_with_max_length (3);
55 g_signal_connect (G_OBJECT (config->rate_control.bitrate.keyframe_boost),
57 G_CALLBACK (_insert_numeric),
59 gtk_table_attach_defaults (GTK_TABLE (table),
60 config->rate_control.bitrate.keyframe_boost,
62 gtk_widget_show (config->rate_control.bitrate.keyframe_boost);
64 eb = gtk_event_box_new ();
65 gtk_event_box_set_visible_window (GTK_EVENT_BOX (eb), FALSE);
66 gtk_tooltips_set_tip (tooltips, eb,
67 _("B-frames reduction - description"),
69 gtk_table_attach_defaults (GTK_TABLE (table), eb,
73 label = gtk_label_new (_("B-frames reduction (%)"));
74 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
75 gtk_container_add (GTK_CONTAINER (eb), label);
76 gtk_widget_show (label);
78 config->rate_control.bitrate.bframes_reduction = gtk_entry_new_with_max_length (5);
79 gtk_table_attach_defaults (GTK_TABLE (table),
80 config->rate_control.bitrate.bframes_reduction,
82 gtk_widget_show (config->rate_control.bitrate.bframes_reduction);
84 eb = gtk_event_box_new ();
85 gtk_event_box_set_visible_window (GTK_EVENT_BOX (eb), FALSE);
86 gtk_tooltips_set_tip (tooltips, eb,
87 _("Bitrate variability - description"),
89 gtk_table_attach_defaults (GTK_TABLE (table), eb,
93 label = gtk_label_new (_("Bitrate variability (%)"));
94 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
95 gtk_container_add (GTK_CONTAINER (eb), label);
96 gtk_widget_show (label);
98 config->rate_control.bitrate.bitrate_variability = gtk_entry_new_with_max_length (3);
99 gtk_table_attach_defaults (GTK_TABLE (table),
100 config->rate_control.bitrate.bitrate_variability,
102 gtk_widget_show (config->rate_control.bitrate.bitrate_variability);
104 /* Quantization limits */
105 frame = gtk_frame_new (_("Quantization limits"));
106 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 6);
107 gtk_widget_show (frame);
109 table = gtk_table_new (3, 2, TRUE);
110 gtk_table_set_row_spacings (GTK_TABLE (table), 6);
111 gtk_container_set_border_width (GTK_CONTAINER (table), 6);
112 gtk_container_add (GTK_CONTAINER (frame), table);
113 gtk_widget_show (table);
115 eb = gtk_event_box_new ();
116 gtk_event_box_set_visible_window (GTK_EVENT_BOX (eb), FALSE);
117 gtk_tooltips_set_tip (tooltips, eb,
118 _("Min QP - description"),
120 gtk_table_attach_defaults (GTK_TABLE (table), eb,
122 gtk_widget_show (eb);
124 label = gtk_label_new (_("Min QP"));
125 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
126 gtk_container_add (GTK_CONTAINER (eb), label);
127 gtk_widget_show (label);
129 config->rate_control.quantization_limits.min_qp = gtk_entry_new_with_max_length (3);
130 gtk_table_attach_defaults (GTK_TABLE (table),
131 config->rate_control.quantization_limits.min_qp,
133 gtk_widget_show (config->rate_control.quantization_limits.min_qp);
135 eb = gtk_event_box_new ();
136 gtk_event_box_set_visible_window (GTK_EVENT_BOX (eb), FALSE);
137 gtk_tooltips_set_tip (tooltips, eb,
138 _("Max QP - description"),
140 gtk_table_attach_defaults (GTK_TABLE (table), eb,
142 gtk_widget_show (eb);
144 label = gtk_label_new (_("Max QP"));
145 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
146 gtk_container_add (GTK_CONTAINER (eb), label);
147 gtk_widget_show (label);
149 config->rate_control.quantization_limits.max_qp = gtk_entry_new_with_max_length (3);
150 gtk_table_attach_defaults (GTK_TABLE (table),
151 config->rate_control.quantization_limits.max_qp,
153 gtk_widget_show (config->rate_control.quantization_limits.max_qp);
155 eb = gtk_event_box_new ();
156 gtk_event_box_set_visible_window (GTK_EVENT_BOX (eb), FALSE);
157 gtk_tooltips_set_tip (tooltips, eb,
158 _("Max QP Step - description"),
160 gtk_table_attach_defaults (GTK_TABLE (table), eb,
162 gtk_widget_show (eb);
164 label = gtk_label_new (_("Max QP Step"));
165 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
166 gtk_container_add (GTK_CONTAINER (eb), label);
167 gtk_widget_show (label);
169 config->rate_control.quantization_limits.max_qp_step = gtk_entry_new_with_max_length (3);
170 gtk_table_attach_defaults (GTK_TABLE (table),
171 config->rate_control.quantization_limits.max_qp_step,
173 gtk_widget_show (config->rate_control.quantization_limits.max_qp_step);
176 frame = gtk_frame_new (_("Scene Cuts"));
177 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 6);
178 gtk_widget_show (frame);
180 table = gtk_table_new (3, 2, TRUE);
181 gtk_table_set_row_spacings (GTK_TABLE (table), 6);
182 gtk_container_set_border_width (GTK_CONTAINER (table), 6);
183 gtk_container_add (GTK_CONTAINER (frame), table);
184 gtk_widget_show (table);
186 eb = gtk_event_box_new ();
187 gtk_event_box_set_visible_window (GTK_EVENT_BOX (eb), FALSE);
188 gtk_tooltips_set_tip (tooltips, eb,
189 _("Scene Cut Threshold - description"),
191 gtk_table_attach_defaults (GTK_TABLE (table), eb,
193 gtk_widget_show (eb);
195 label = gtk_label_new (_("Scene Cut Threshold"));
196 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
197 gtk_container_add (GTK_CONTAINER (eb), label);
198 gtk_widget_show (label);
200 config->rate_control.scene_cuts.scene_cut_threshold = gtk_entry_new_with_max_length (3);
201 gtk_table_attach_defaults (GTK_TABLE (table),
202 config->rate_control.scene_cuts.scene_cut_threshold,
204 gtk_widget_show (config->rate_control.scene_cuts.scene_cut_threshold);
206 eb = gtk_event_box_new ();
207 gtk_event_box_set_visible_window (GTK_EVENT_BOX (eb), FALSE);
208 gtk_tooltips_set_tip (tooltips, eb,
209 _("Min IDR-frame interval - description"),
211 gtk_table_attach_defaults (GTK_TABLE (table), eb,
213 gtk_widget_show (eb);
215 label = gtk_label_new (_("Min IDR-frame interval"));
216 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
217 gtk_container_add (GTK_CONTAINER (eb), label);
218 gtk_widget_show (label);
220 config->rate_control.scene_cuts.min_idr_frame_interval = gtk_entry_new_with_max_length (3);
221 gtk_table_attach_defaults (GTK_TABLE (table),
222 config->rate_control.scene_cuts.min_idr_frame_interval,
224 gtk_widget_show (config->rate_control.scene_cuts.min_idr_frame_interval);
226 eb = gtk_event_box_new ();
227 gtk_event_box_set_visible_window (GTK_EVENT_BOX (eb), FALSE);
228 gtk_tooltips_set_tip (tooltips, eb,
229 _("Max IDR-frame interval - description"),
231 gtk_table_attach_defaults (GTK_TABLE (table), eb,
233 gtk_widget_show (eb);
235 label = gtk_label_new (_("Max IDR-frame interval"));
236 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
237 gtk_container_add (GTK_CONTAINER (eb), label);
238 gtk_widget_show (label);
240 config->rate_control.scene_cuts.max_idr_frame_interval = gtk_entry_new_with_max_length (3);
241 gtk_table_attach_defaults (GTK_TABLE (table),
242 config->rate_control.scene_cuts.max_idr_frame_interval,
244 gtk_widget_show (config->rate_control.scene_cuts.max_idr_frame_interval);
247 frame = gtk_frame_new (_("Video buffer verifier"));
248 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 6);
249 gtk_widget_show (frame);
251 table = gtk_table_new (3, 2, TRUE);
252 gtk_table_set_row_spacings (GTK_TABLE (table), 6);
253 gtk_container_set_border_width (GTK_CONTAINER (table), 6);
254 gtk_container_add (GTK_CONTAINER (frame), table);
255 gtk_widget_show (table);
257 eb = gtk_event_box_new ();
258 gtk_event_box_set_visible_window (GTK_EVENT_BOX (eb), FALSE);
259 gtk_tooltips_set_tip (tooltips, eb,
260 _("Max local bitrate - description"),
262 gtk_table_attach_defaults (GTK_TABLE (table), eb,
264 gtk_widget_show (eb);
266 label = gtk_label_new (_("Max local bitrate"));
267 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
268 gtk_container_add (GTK_CONTAINER (eb), label);
269 gtk_widget_show (label);
271 config->rate_control.vbv.vbv_max_bitrate = gtk_entry_new_with_max_length (3);
272 gtk_table_attach_defaults (GTK_TABLE (table),
273 config->rate_control.vbv.vbv_max_bitrate,
275 gtk_widget_show (config->rate_control.vbv.vbv_max_bitrate);
277 eb = gtk_event_box_new ();
278 gtk_event_box_set_visible_window (GTK_EVENT_BOX (eb), FALSE);
279 gtk_tooltips_set_tip (tooltips, eb,
280 _("VBV buffer size - description"),
282 gtk_table_attach_defaults (GTK_TABLE (table), eb,
284 gtk_widget_show (eb);
286 label = gtk_label_new (_("VBV buffer size"));
287 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
288 gtk_container_add (GTK_CONTAINER (eb), label);
289 gtk_widget_show (label);
291 config->rate_control.vbv.vbv_buffer_size = gtk_entry_new_with_max_length (3);
292 gtk_table_attach_defaults (GTK_TABLE (table),
293 config->rate_control.vbv.vbv_buffer_size,
295 gtk_widget_show (config->rate_control.vbv.vbv_buffer_size);
297 eb = gtk_event_box_new ();
298 gtk_event_box_set_visible_window (GTK_EVENT_BOX (eb), FALSE);
299 gtk_tooltips_set_tip (tooltips, eb,
300 _("Initial VBV buffer occupancy - description"),
302 gtk_table_attach_defaults (GTK_TABLE (table), eb,
304 gtk_widget_show (eb);
306 label = gtk_label_new (_("Initial VBV buffer occupancy"));
307 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
308 gtk_container_add (GTK_CONTAINER (eb), label);
309 gtk_widget_show (label);
311 config->rate_control.vbv.vbv_buffer_init = gtk_entry_new_with_max_length (3);
312 gtk_table_attach_defaults (GTK_TABLE (table),
313 config->rate_control.vbv.vbv_buffer_init,
315 gtk_widget_show (config->rate_control.vbv.vbv_buffer_init);
321 _insert_numeric (GtkEditable *editable,
331 result = (gchar *)g_malloc (sizeof (gchar) * (length + 1));
335 for (i = 0, j = 0; i < length; i++)
337 if (g_ascii_isdigit (text[i]))
345 g_signal_handlers_block_by_func (editable,
346 (gpointer) _insert_numeric, data);
347 gtk_editable_insert_text (editable, result, j, position);
348 g_signal_handlers_unblock_by_func (editable,
349 (gpointer) _insert_numeric, data);
351 g_signal_stop_emission_by_name (editable, "insert-text");