x264_gtk_more.c
上传用户:hjq518
上传日期:2021-12-09
资源大小:5084k
文件大小:21k
源码类别:

Audio

开发平台:

Visual C++

  1. /*****************************************************************************
  2.  * x264_gtk_more.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. #include <gtk/gtk.h>
  21. #include "x264_gtk_i18n.h"
  22. #include "x264_gtk_private.h"
  23. /* Callbacks */
  24. static void x264_more_deblocking_filter (GtkToggleButton *button,
  25.                                      gpointer         user_data);
  26. static void x264_more_cabac             (GtkToggleButton *button,
  27.                                      gpointer         user_data);
  28. static void x264_more_mixed_ref         (GtkToggleButton *button,
  29.                                      gpointer         user_data);
  30. GtkWidget *
  31. x264_more_page (X264_Gui_Config *config)
  32. {
  33.   GtkWidget     *vbox;
  34.   GtkWidget     *frame;
  35.   GtkWidget     *hbox;
  36.   GtkWidget     *table;
  37.   GtkWidget     *eb;
  38.   GtkWidget     *label;
  39.   GtkObject     *adj;
  40.   GtkRequisition size;
  41.   GtkRequisition size2;
  42.   GtkRequisition size3;
  43.   GtkRequisition size4;
  44.   GtkRequisition size5;
  45.   GtkTooltips   *tooltips;
  46.   tooltips = gtk_tooltips_new ();
  47.   label = gtk_entry_new_with_max_length (3);
  48.   gtk_widget_size_request (label, &size);
  49.   gtk_widget_destroy (GTK_WIDGET (label));
  50.   label = gtk_check_button_new_with_label (_("Deblocking Filter"));
  51.   gtk_widget_size_request (label, &size2);
  52.   gtk_widget_destroy (GTK_WIDGET (label));
  53.   label = gtk_label_new (_("Partition decision"));
  54.   gtk_widget_size_request (label, &size3);
  55.   gtk_widget_destroy (GTK_WIDGET (label));
  56.   label = gtk_label_new (_("Threshold"));
  57.   gtk_widget_size_request (label, &size5);
  58.   gtk_widget_destroy (GTK_WIDGET (label));
  59.   vbox = gtk_vbox_new (FALSE, 0);
  60.   gtk_container_set_border_width (GTK_CONTAINER (vbox), 6);
  61.   /* Motion Estimation */
  62.   frame = gtk_frame_new (_("Motion Estimation"));
  63.   gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 6);
  64.   gtk_widget_show (frame);
  65.   table = gtk_table_new (5, 3, 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.   eb = gtk_event_box_new ();
  72.   gtk_event_box_set_visible_window (GTK_EVENT_BOX (eb), FALSE);
  73.   gtk_tooltips_set_tip (tooltips, eb,
  74.                         _("Partition decision - description"),
  75.                         "");
  76.   gtk_table_attach_defaults (GTK_TABLE (table), eb,
  77.                              0, 1, 0, 1);
  78.   gtk_widget_show (eb);
  79.   label = gtk_label_new (_("Partition decision"));
  80.   gtk_widget_set_size_request (label, size2.width, size3.height);
  81.   gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
  82.   gtk_container_add (GTK_CONTAINER (eb), label);
  83.   gtk_widget_show (label);
  84.   config->more.motion_estimation.partition_decision = gtk_combo_box_new_text ();
  85.   gtk_combo_box_append_text (GTK_COMBO_BOX (config->more.motion_estimation.partition_decision),
  86.                              _("1 (Fastest)"));
  87.   gtk_combo_box_append_text (GTK_COMBO_BOX (config->more.motion_estimation.partition_decision),
  88.                              "2");
  89.   gtk_combo_box_append_text (GTK_COMBO_BOX (config->more.motion_estimation.partition_decision),
  90.                              "3");
  91.   gtk_combo_box_append_text (GTK_COMBO_BOX (config->more.motion_estimation.partition_decision),
  92.                              "4");
  93.   gtk_combo_box_append_text (GTK_COMBO_BOX (config->more.motion_estimation.partition_decision),
  94.                              _("5 (High quality)"));
  95.   gtk_combo_box_append_text (GTK_COMBO_BOX (config->more.motion_estimation.partition_decision),
  96.                              _("6 (RDO)"));
  97.   gtk_combo_box_append_text (GTK_COMBO_BOX (config->more.motion_estimation.partition_decision),
  98.                              _("6b (RDO on B frames)"));
  99.   gtk_table_attach_defaults (GTK_TABLE (table), config->more.motion_estimation.partition_decision,
  100.                              1, 3, 0, 1);
  101.   gtk_widget_show (config->more.motion_estimation.partition_decision);
  102.   eb = gtk_event_box_new ();
  103.   gtk_event_box_set_visible_window (GTK_EVENT_BOX (eb), FALSE);
  104.   gtk_tooltips_set_tip (tooltips, eb,
  105.                         _("Method - description"),
  106.                         "");
  107.   gtk_table_attach_defaults (GTK_TABLE (table), eb,
  108.                              0, 1, 1, 2);
  109.   gtk_widget_show (eb);
  110.   label = gtk_label_new (_("Method"));
  111.   gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
  112.   gtk_container_add (GTK_CONTAINER (eb), label);
  113.   gtk_widget_show (label);
  114.   config->more.motion_estimation.method = gtk_combo_box_new_text ();
  115.   gtk_combo_box_append_text (GTK_COMBO_BOX (config->more.motion_estimation.method),
  116.                              _("Diamond Search"));
  117.   gtk_combo_box_append_text (GTK_COMBO_BOX (config->more.motion_estimation.method),
  118.                              _("Hexagonal Search"));
  119.   gtk_combo_box_append_text (GTK_COMBO_BOX (config->more.motion_estimation.method),
  120.                              _("Uneven Multi-Hexagon"));
  121.   gtk_combo_box_append_text (GTK_COMBO_BOX (config->more.motion_estimation.method),
  122.                              _("Exhaustive search"));
  123.   gtk_table_attach_defaults (GTK_TABLE (table), config->more.motion_estimation.method,
  124.                              1, 3, 1, 2);
  125.   gtk_widget_show (config->more.motion_estimation.method);
  126.   eb = gtk_event_box_new ();
  127.   gtk_event_box_set_visible_window (GTK_EVENT_BOX (eb), FALSE);
  128.   gtk_tooltips_set_tip (tooltips, eb,
  129.                         _("Range - description"),
  130.                         "");
  131.   gtk_table_attach_defaults (GTK_TABLE (table), eb,
  132.                              0, 1, 2, 3);
  133.   gtk_widget_show (eb);
  134.   label = gtk_label_new (_("Range"));
  135.   gtk_widget_size_request (label, &size4);
  136.   gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
  137.   gtk_container_add (GTK_CONTAINER (eb), label);
  138.   gtk_widget_show (label);
  139.   config->more.motion_estimation.range = gtk_entry_new_with_max_length (3);
  140.   gtk_widget_set_size_request (config->more.motion_estimation.range,
  141.                                20, size.height);
  142.   gtk_table_attach_defaults (GTK_TABLE (table), config->more.motion_estimation.range,
  143.                              1, 2, 2, 3);
  144.   gtk_widget_show (config->more.motion_estimation.range);
  145.   config->more.motion_estimation.chroma_me = gtk_check_button_new_with_label (_("Chroma ME"));
  146.   gtk_tooltips_set_tip (tooltips, config->more.motion_estimation.chroma_me,
  147.                         _("Chroma ME - description"),
  148.                         "");
  149.   gtk_table_attach_defaults (GTK_TABLE (table), config->more.motion_estimation.chroma_me,
  150.                              2, 3, 2, 3);
  151.   gtk_widget_show (config->more.motion_estimation.chroma_me);
  152.   eb = gtk_event_box_new ();
  153.   gtk_event_box_set_visible_window (GTK_EVENT_BOX (eb), FALSE);
  154.   gtk_tooltips_set_tip (tooltips, eb,
  155.                         _("Max Ref. frames - description"),
  156.                         "");
  157.   gtk_table_attach_defaults (GTK_TABLE (table), eb,
  158.                              0, 1, 3, 4);
  159.   gtk_widget_show (eb);
  160.   label = gtk_label_new (_("Max Ref. frames"));
  161.   gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
  162.   gtk_container_add (GTK_CONTAINER (eb), label);
  163.   gtk_widget_show (label);
  164.   config->more.motion_estimation.max_ref_frames = gtk_entry_new_with_max_length (3);
  165.   gtk_widget_set_size_request (config->more.motion_estimation.max_ref_frames,
  166.                                20, size.height);
  167.   gtk_table_attach_defaults (GTK_TABLE (table), config->more.motion_estimation.max_ref_frames,
  168.                              1, 2, 3, 4);
  169.   gtk_widget_show (config->more.motion_estimation.max_ref_frames);
  170.   config->more.motion_estimation.mixed_refs = gtk_check_button_new_with_label (_("Mixed Refs"));
  171.   gtk_tooltips_set_tip (tooltips, config->more.motion_estimation.mixed_refs,
  172.                         _("Mixed Refs - description"),
  173.                         "");
  174.   g_signal_connect (G_OBJECT (config->more.motion_estimation.mixed_refs),
  175.                     "toggled",
  176.                     G_CALLBACK (x264_more_mixed_ref), config);
  177.   gtk_table_attach_defaults (GTK_TABLE (table), config->more.motion_estimation.mixed_refs,
  178.                              2, 3, 3, 4);
  179.   gtk_widget_show (config->more.motion_estimation.mixed_refs);
  180.   config->more.motion_estimation.fast_pskip = gtk_check_button_new_with_label (_("Fast P skip"));
  181.   gtk_tooltips_set_tip (tooltips, config->more.motion_estimation.fast_pskip,
  182.                         _("Fast P skip - description"),
  183.                         "");
  184.   gtk_table_attach_defaults (GTK_TABLE (table), config->more.motion_estimation.fast_pskip,
  185.                              0, 1, 4, 5);
  186.   gtk_widget_show (config->more.motion_estimation.fast_pskip);
  187.   config->more.motion_estimation.dct_decimate = gtk_check_button_new_with_label (_("DCT decimate"));
  188.   gtk_tooltips_set_tip (tooltips, config->more.motion_estimation.dct_decimate,
  189.                         _("DCT decimate - description"),
  190.                         "");
  191.   gtk_table_attach_defaults (GTK_TABLE (table), config->more.motion_estimation.dct_decimate,
  192.                              1, 2, 4, 5);
  193.   gtk_widget_show (config->more.motion_estimation.dct_decimate);
  194.   /* Misc. Options */
  195.   frame = gtk_frame_new (_("Misc. Options"));
  196.   gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 6);
  197.   gtk_widget_show (frame);
  198.   table = gtk_table_new (5, 4, FALSE);
  199.   gtk_table_set_row_spacings (GTK_TABLE (table), 6);
  200.   gtk_table_set_col_spacings (GTK_TABLE (table), 6);
  201.   gtk_container_set_border_width (GTK_CONTAINER (table), 6);
  202.   gtk_container_add (GTK_CONTAINER (frame), table);
  203.   gtk_widget_show (table);
  204.   eb = gtk_event_box_new ();
  205.   gtk_event_box_set_visible_window (GTK_EVENT_BOX (eb), FALSE);
  206.   gtk_tooltips_set_tip (tooltips, eb,
  207.                         _("Sample Aspect Ratio - description"),
  208.                         "");
  209.   gtk_table_attach_defaults (GTK_TABLE (table), eb,
  210.                              0, 1, 0, 1);
  211.   gtk_widget_show (eb);
  212.   label = gtk_label_new (_("Sample Aspect Ratio"));
  213.   gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
  214.   gtk_container_add (GTK_CONTAINER (eb), label);
  215.   gtk_widget_show (label);
  216.   hbox = gtk_hbox_new (TRUE, 6);
  217.   gtk_table_attach_defaults (GTK_TABLE (table), hbox,
  218.                              1, 2, 0, 1);
  219.   gtk_widget_show (hbox);
  220.   config->more.misc.sample_ar_x = gtk_entry_new_with_max_length (3);
  221.   gtk_widget_set_size_request (config->more.misc.sample_ar_x, 25, size.height);
  222.   gtk_box_pack_start (GTK_BOX (hbox), config->more.misc.sample_ar_x, FALSE, TRUE, 0);
  223.   gtk_widget_show (config->more.misc.sample_ar_x);
  224.   config->more.misc.sample_ar_y = gtk_entry_new_with_max_length (3);
  225.   gtk_widget_set_size_request (config->more.misc.sample_ar_y, 25, size.height);
  226.   gtk_box_pack_start (GTK_BOX (hbox), config->more.misc.sample_ar_y, FALSE, TRUE, 0);
  227.   gtk_widget_show (config->more.misc.sample_ar_y);
  228.   eb = gtk_event_box_new ();
  229.   gtk_event_box_set_visible_window (GTK_EVENT_BOX (eb), FALSE);
  230.   gtk_tooltips_set_tip (tooltips, eb,
  231.                         _("Threads - description"),
  232.                         "");
  233.   gtk_table_attach_defaults (GTK_TABLE (table), eb,
  234.                              2, 3, 0, 1);
  235.   gtk_widget_show (eb);
  236.   label = gtk_label_new (_("Threads"));
  237.   gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
  238.   gtk_container_add (GTK_CONTAINER (eb), label);
  239.   gtk_widget_show (label);
  240.   adj = gtk_adjustment_new (1.0, 1.0, 4.0, 1.0, 1.0, 1.0);
  241.   config->more.misc.threads = gtk_spin_button_new (GTK_ADJUSTMENT (adj), 1.0, 0);
  242.   gtk_widget_set_size_request (config->more.misc.threads, size5.width, size.height);
  243.   gtk_table_attach_defaults (GTK_TABLE (table),
  244.                              config->more.misc.threads,
  245.                              3, 4, 0, 1);
  246.   gtk_widget_show (config->more.misc.threads);
  247.   config->more.misc.cabac = gtk_check_button_new_with_label (_("CABAC"));
  248.   gtk_widget_set_size_request (config->more.misc.cabac, size5.width, size.height);
  249.   gtk_tooltips_set_tip (tooltips, config->more.misc.cabac,
  250.                         _("CABAC - description"),
  251.                         "");
  252.   g_signal_connect (G_OBJECT (config->more.misc.cabac),
  253.                     "toggled",
  254.                     G_CALLBACK (x264_more_cabac), config);
  255.   gtk_table_attach_defaults (GTK_TABLE (table), config->more.misc.cabac,
  256.                              0, 1, 1, 2);
  257.   gtk_widget_show (config->more.misc.cabac);
  258.   eb = gtk_event_box_new ();
  259.   gtk_event_box_set_visible_window (GTK_EVENT_BOX (eb), FALSE);
  260.   gtk_tooltips_set_tip (tooltips, eb,
  261.                         _("Trellis - description"),
  262.                         "");
  263.   gtk_table_attach_defaults (GTK_TABLE (table), eb,
  264.                              1, 2, 1, 2);
  265.   gtk_widget_show (eb);
  266.   label = gtk_label_new (_("Trellis"));
  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);
  270.   config->more.misc.trellis = gtk_combo_box_new_text ();
  271.   gtk_combo_box_append_text (GTK_COMBO_BOX (config->more.misc.trellis),
  272.                              _("Disabled"));
  273.   gtk_combo_box_append_text (GTK_COMBO_BOX (config->more.misc.trellis),
  274.                              _("Enabled (once)"));
  275.   gtk_combo_box_append_text (GTK_COMBO_BOX (config->more.misc.trellis),
  276.                              _("Enabled (mode decision)"));
  277.   gtk_table_attach_defaults (GTK_TABLE (table), config->more.misc.trellis,
  278.                              2, 4, 1, 2);
  279.   gtk_widget_show (config->more.misc.trellis);
  280.   eb = gtk_event_box_new ();
  281.   gtk_event_box_set_visible_window (GTK_EVENT_BOX (eb), FALSE);
  282.   gtk_tooltips_set_tip (tooltips, eb,
  283.                         _("Noise reduction - description"),
  284.                         "");
  285.   gtk_table_attach_defaults (GTK_TABLE (table), eb,
  286.                              0, 1, 2, 3);
  287.   gtk_widget_show (eb);
  288.   label = gtk_label_new (_("Noise reduction"));
  289.   gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
  290.   gtk_container_add (GTK_CONTAINER (eb), label);
  291.   gtk_widget_show (label);
  292.   config->more.misc.noise_reduction = gtk_entry_new_with_max_length (3);
  293.   gtk_widget_set_size_request (config->more.misc.noise_reduction, size5.width, size.height);
  294.   gtk_table_attach_defaults (GTK_TABLE (table), config->more.misc.noise_reduction,
  295.                              1, 2, 2, 3);
  296.   gtk_widget_show (config->more.misc.noise_reduction);
  297.   config->more.misc.df.deblocking_filter = gtk_check_button_new_with_label (_("Deblocking Filter"));
  298.   gtk_tooltips_set_tip (tooltips, config->more.misc.df.deblocking_filter,
  299.                         _("Deblocking Filter - description"),
  300.                         "");
  301.   g_signal_connect (G_OBJECT (config->more.misc.df.deblocking_filter),
  302.                     "toggled",
  303.                     G_CALLBACK (x264_more_deblocking_filter), config);
  304.   gtk_table_attach_defaults (GTK_TABLE (table), config->more.misc.df.deblocking_filter,
  305.                              0, 1, 3, 4);
  306.   gtk_widget_show (config->more.misc.df.deblocking_filter);
  307.   eb = gtk_event_box_new ();
  308.   gtk_event_box_set_visible_window (GTK_EVENT_BOX (eb), FALSE);
  309.   gtk_tooltips_set_tip (tooltips, eb,
  310.                         _("Strength - description"),
  311.                         "");
  312.   gtk_table_attach_defaults (GTK_TABLE (table), eb,
  313.                              1, 2, 3, 4);
  314.   gtk_widget_show (eb);
  315.   label = gtk_label_new (_("Strength"));
  316.   gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
  317.   gtk_widget_set_size_request (label, size5.width, size4.height);
  318.   gtk_container_add (GTK_CONTAINER (eb), label);
  319.   gtk_widget_show (label);
  320.   config->more.misc.df.strength = gtk_hscale_new_with_range (-6.0, 6.0, 1.0);
  321.   gtk_widget_size_request (config->more.misc.df.strength, &size4);
  322.   gtk_scale_set_digits (GTK_SCALE (config->more.misc.df.strength), 0);
  323.   gtk_scale_set_value_pos (GTK_SCALE (config->more.misc.df.strength), GTK_POS_RIGHT);
  324.   //  gtk_widget_set_size_request (config->more.misc.df.strength, size5.width, size4.height);
  325.   gtk_table_attach_defaults (GTK_TABLE (table), config->more.misc.df.strength,
  326.                              2, 4, 3, 4);
  327.   gtk_widget_show (config->more.misc.df.strength);
  328.   eb = gtk_event_box_new ();
  329.   gtk_event_box_set_visible_window (GTK_EVENT_BOX (eb), FALSE);
  330.   gtk_tooltips_set_tip (tooltips, eb,
  331.                         _("Threshold - description"),
  332.                         "");
  333.   gtk_table_attach_defaults (GTK_TABLE (table), eb,
  334.                              1, 2, 4, 5);
  335.   gtk_widget_show (eb);
  336.   label = gtk_label_new (_("Threshold"));
  337.   gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
  338.   gtk_widget_set_size_request (label, size5.width, size4.height);
  339.   gtk_container_add (GTK_CONTAINER (eb), label);
  340.   gtk_widget_show (label);
  341.   config->more.misc.df.threshold = gtk_hscale_new_with_range (-6.0, 6.0, 1.0);
  342.   gtk_scale_set_digits (GTK_SCALE (config->more.misc.df.threshold), 0);
  343.   gtk_scale_set_value_pos (GTK_SCALE (config->more.misc.df.threshold), GTK_POS_RIGHT);
  344.   gtk_table_attach_defaults (GTK_TABLE (table), config->more.misc.df.threshold,
  345.                              2, 4, 4, 5);
  346.   gtk_widget_show (config->more.misc.df.threshold);
  347.   /* Debug */
  348.   frame = gtk_frame_new (_("Debug"));
  349.   gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 6);
  350.   gtk_widget_show (frame);
  351.   table = gtk_table_new (2, 2, TRUE);
  352.   gtk_table_set_row_spacings (GTK_TABLE (table), 6);
  353.   gtk_container_set_border_width (GTK_CONTAINER (table), 6);
  354.   gtk_container_add (GTK_CONTAINER (frame), table);
  355.   gtk_widget_show (table);
  356.   eb = gtk_event_box_new ();
  357.   gtk_event_box_set_visible_window (GTK_EVENT_BOX (eb), FALSE);
  358.   gtk_tooltips_set_tip (tooltips, eb,
  359.                         _("Log level - description"),
  360.                         "");
  361.   gtk_table_attach_defaults (GTK_TABLE (table), eb,
  362.                              0, 1, 0, 1);
  363.   gtk_widget_show (eb);
  364.   label = gtk_label_new (_("Log level"));
  365.   gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
  366.   gtk_container_add (GTK_CONTAINER (eb), label);
  367.   gtk_widget_show (label);
  368.   config->more.debug.log_level = gtk_combo_box_new_text ();
  369.   gtk_combo_box_append_text (GTK_COMBO_BOX (config->more.debug.log_level),
  370.                              _("None"));
  371.   gtk_combo_box_append_text (GTK_COMBO_BOX (config->more.debug.log_level),
  372.                              _("Error"));
  373.   gtk_combo_box_append_text (GTK_COMBO_BOX (config->more.debug.log_level),
  374.                              _("Warning"));
  375.   gtk_combo_box_append_text (GTK_COMBO_BOX (config->more.debug.log_level),
  376.                              _("Info"));
  377.   gtk_combo_box_append_text (GTK_COMBO_BOX (config->more.debug.log_level),
  378.                              _("Debug"));
  379.   gtk_table_attach_defaults (GTK_TABLE (table), config->more.debug.log_level,
  380.                              1, 2, 0, 1);
  381.   gtk_widget_show (config->more.debug.log_level);
  382.   eb = gtk_event_box_new ();
  383.   gtk_event_box_set_visible_window (GTK_EVENT_BOX (eb), FALSE);
  384.   gtk_tooltips_set_tip (tooltips, eb,
  385.                         _("FourCC - description"),
  386.                         "");
  387.   gtk_table_attach_defaults (GTK_TABLE (table), eb,
  388.                              0, 1, 1, 2);
  389.   gtk_widget_show (eb);
  390.   label = gtk_label_new ("FourCC");
  391.   gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
  392.   gtk_container_add (GTK_CONTAINER (eb), label);
  393.   gtk_widget_show (label);
  394.   config->more.debug.fourcc = gtk_entry_new_with_max_length (4);
  395.   gtk_table_attach_defaults (GTK_TABLE (table),
  396.                              config->more.debug.fourcc,
  397.                              1, 2, 1, 2);
  398.   gtk_widget_set_sensitive (config->more.debug.fourcc, FALSE);
  399.   gtk_widget_show (config->more.debug.fourcc);
  400.   return vbox;
  401. }
  402. /* Callbacks */
  403. static void
  404. x264_more_deblocking_filter (GtkToggleButton *button,
  405.                          gpointer         user_data)
  406. {
  407.   X264_Gui_Config *config;
  408.   config = (X264_Gui_Config *)user_data;
  409.   if (gtk_toggle_button_get_active (button)) {
  410.     gtk_widget_set_sensitive (config->more.misc.df.strength, TRUE);
  411.     gtk_widget_set_sensitive (config->more.misc.df.threshold, TRUE);
  412.   }
  413.   else {
  414.     gtk_widget_set_sensitive (config->more.misc.df.strength, FALSE);
  415.     gtk_widget_set_sensitive (config->more.misc.df.threshold, FALSE);
  416.   }
  417. }
  418. static void
  419. x264_more_cabac (GtkToggleButton *button,
  420.              gpointer         user_data)
  421. {
  422.   X264_Gui_Config *config;
  423.   config = (X264_Gui_Config *)user_data;
  424.   if (gtk_toggle_button_get_active (button))
  425.     gtk_widget_set_sensitive (config->more.misc.trellis, TRUE);
  426.   else
  427.     gtk_widget_set_sensitive (config->more.misc.trellis, FALSE);
  428. }
  429. static void
  430. x264_more_mixed_ref (GtkToggleButton *button,
  431.                  gpointer         user_data)
  432. {
  433.   X264_Gui_Config *config;
  434.   config = (X264_Gui_Config *)user_data;
  435.   if (gtk_toggle_button_get_active (button)) {
  436.     const gchar *text;
  437.     gint         val;
  438.     text = gtk_entry_get_text (GTK_ENTRY (config->more.motion_estimation.max_ref_frames));
  439.     val = (gint)g_ascii_strtoull (text, NULL, 10);
  440.     if (val < 2)
  441.       gtk_entry_set_text (GTK_ENTRY (config->more.motion_estimation.max_ref_frames), "2");
  442.   }
  443. }