📄 x264_gtk_cqm.c
字号:
misc = gtk_entry_new_with_max_length (3); gtk_widget_size_request (misc, &size); table = gtk_table_new (8, 8, FALSE); gtk_table_set_row_spacings (GTK_TABLE (table), 6); gtk_table_set_col_spacings (GTK_TABLE (table), 6); gtk_container_set_border_width (GTK_CONTAINER (table), 6); for (i = 0; i < 64; i++) { gconfig->cqm.cqm_8iy[i] = gtk_entry_new_with_max_length (3); gtk_widget_set_size_request (gconfig->cqm.cqm_8iy[i], 25, size.height); gtk_table_attach_defaults (GTK_TABLE (table), gconfig->cqm.cqm_8iy[i], i >> 3, (i >> 3) + 1, i & 7, (i & 7) + 1); gtk_widget_show (gconfig->cqm.cqm_8iy[i]); } return table;}static GtkWidget *_cqm_8x8_py_page (X264_Gui_Config *gconfig){ GtkWidget *table; GtkWidget *misc; GtkRequisition size; gint i; misc = gtk_entry_new_with_max_length (3); gtk_widget_size_request (misc, &size); table = gtk_table_new (8, 8, FALSE); gtk_table_set_row_spacings (GTK_TABLE (table), 6); gtk_table_set_col_spacings (GTK_TABLE (table), 6); gtk_container_set_border_width (GTK_CONTAINER (table), 6); for (i = 0; i < 64; i++) { gconfig->cqm.cqm_8py[i] = gtk_entry_new_with_max_length (3); gtk_widget_set_size_request (gconfig->cqm.cqm_8py[i], 25, size.height); gtk_table_attach_defaults (GTK_TABLE (table), gconfig->cqm.cqm_8py[i], i >> 3, (i >> 3) + 1, i & 7, (i & 7) + 1); gtk_widget_show (gconfig->cqm.cqm_8py[i]); } return table;}/* Callbacks */static void_cqm_flat_matrix_cb (GtkToggleButton *togglebutton, gpointer user_data){ X264_Gui_Config *gconfig; gconfig = (X264_Gui_Config *)user_data; if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gconfig->cqm.radio_flat))) { gint i; gtk_widget_set_sensitive (gconfig->cqm.cqm_file, FALSE); for (i = 0; i < 16; i++) { gtk_widget_set_sensitive (gconfig->cqm.cqm_4iy[i], FALSE); gtk_widget_set_sensitive (gconfig->cqm.cqm_4ic[i], FALSE); gtk_widget_set_sensitive (gconfig->cqm.cqm_4py[i], FALSE); gtk_widget_set_sensitive (gconfig->cqm.cqm_4pc[i], FALSE); } for (i = 0; i < 64; i++) { gtk_widget_set_sensitive (gconfig->cqm.cqm_8iy[i], FALSE); gtk_widget_set_sensitive (gconfig->cqm.cqm_8py[i], FALSE); } }}static void_cqm_jvt_matrix_cb (GtkToggleButton *togglebutton, gpointer user_data){ X264_Gui_Config *gconfig; gconfig = (X264_Gui_Config *)user_data; if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gconfig->cqm.radio_jvt))) { gint i; gtk_widget_set_sensitive (gconfig->cqm.cqm_file, FALSE); for (i = 0; i < 16; i++) { gtk_widget_set_sensitive (gconfig->cqm.cqm_4iy[i], FALSE); gtk_widget_set_sensitive (gconfig->cqm.cqm_4ic[i], FALSE); gtk_widget_set_sensitive (gconfig->cqm.cqm_4py[i], FALSE); gtk_widget_set_sensitive (gconfig->cqm.cqm_4pc[i], FALSE); } for (i = 0; i < 64; i++) { gtk_widget_set_sensitive (gconfig->cqm.cqm_8iy[i], FALSE); gtk_widget_set_sensitive (gconfig->cqm.cqm_8py[i], FALSE); } }}static void_cqm_custom_matrix_cb (GtkToggleButton *togglebutton, gpointer user_data){ X264_Gui_Config *gconfig; gconfig = (X264_Gui_Config *)user_data; if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gconfig->cqm.radio_custom))) { gint i; gtk_widget_set_sensitive (gconfig->cqm.cqm_file, TRUE); for (i = 0; i < 16; i++) { gtk_widget_set_sensitive (gconfig->cqm.cqm_4iy[i], TRUE); gtk_widget_set_sensitive (gconfig->cqm.cqm_4ic[i], TRUE); gtk_widget_set_sensitive (gconfig->cqm.cqm_4py[i], TRUE); gtk_widget_set_sensitive (gconfig->cqm.cqm_4pc[i], TRUE); } for (i = 0; i < 64; i++) { gtk_widget_set_sensitive (gconfig->cqm.cqm_8iy[i], TRUE); gtk_widget_set_sensitive (gconfig->cqm.cqm_8py[i], TRUE); } }}static gboolean_set_coefs (int size, GtkWidget **entries, GIOChannel *file){ gchar *line; gsize length; int i = 0; int offset = 0; while (i < size) { gchar **coefs; int j; if (g_io_channel_read_line (file, &line, &length, NULL, NULL) != G_IO_STATUS_NORMAL) { g_print ("Not a JM custom AVC matrix compliant file\n"); return FALSE; } if ((line[0] == '\0') || (line[0] == '\n') || (line[0] == '\r') || (line[0] == '#')) { g_free (line); continue; } coefs = g_strsplit (line, ",", size + 1); for (j = 0; j < size; j++) { gtk_entry_set_text (GTK_ENTRY (entries[offset]), coefs[j]); offset++; } g_strfreev (coefs); g_free (line); i++; } return TRUE;}static void_cqm_matrix_file_cb (GtkFileChooser *filechooser, gint response, gpointer user_data){ X264_Gui_Config *gconfig; GIOChannel *file; GError *error = NULL; gchar *filename; gchar *line; gsize length; if (!user_data) return; gconfig = (X264_Gui_Config *)user_data; filename = gtk_file_chooser_get_filename (filechooser); file = g_io_channel_new_file (filename, "r", &error); if (error) { g_print ("Can not open file %s\n", filename); g_free (filename); return; } while ((g_io_channel_read_line (file, &line, &length, NULL, NULL) == G_IO_STATUS_NORMAL)) { if (!line) continue; if ((line[0] == '\0') || (line[0] == '\n') || (line[0] == '\r') || (line[0] == '#')) { g_free (line); continue; } if (g_str_has_prefix (line, "INTRA4X4_LUMA")) { g_free (line); if (!_set_coefs (4, gconfig->cqm.cqm_4iy, file)) { g_free (filename); return; } continue; } if (g_str_has_prefix (line, "INTRA4X4_CHROMAU")) { g_free (line); if (!_set_coefs (4, gconfig->cqm.cqm_4ic, file)) { g_free (filename); return; } continue; } if (g_str_has_prefix (line, "INTER4X4_LUMA")) { g_free (line); if (!_set_coefs (4, gconfig->cqm.cqm_4py, file)) { g_free (filename); return; } continue; } if (g_str_has_prefix (line, "INTER4X4_CHROMAU")) { g_free (line); if (!_set_coefs (4, gconfig->cqm.cqm_4pc, file)) { g_free (filename); return; } continue; } if (g_str_has_prefix (line, "INTRA8X8_LUMA")) { g_free (line); if (!_set_coefs (8, gconfig->cqm.cqm_8iy, file)) { g_free (filename); return; } continue; } if (g_str_has_prefix (line, "INTER8X8_LUMA")) { g_free (line); if (!_set_coefs (8, gconfig->cqm.cqm_8py, file)) { g_free (filename); return; } continue; } } g_free (filename);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -