📄 x264_gtk.c.svn-base
字号:
#endif dir = g_build_filename (g_get_home_dir (), ".x264", NULL);#ifdef _WIN32 res = mkdir (dir);#else mode = S_IRUSR | S_IXUSR | S_IWUSR | S_IRGRP | S_IXGRP | S_IWGRP | S_IROTH | S_IXOTH | S_IWOTH; res = mkdir (dir, mode);#endif /* _WIN32 */ if (res != 0 && errno != EEXIST) { g_free (dir); return; } filename = g_build_filename (g_get_home_dir (), ".x264", "x264.cfg", NULL); g_print ("Writing configuration to %s\n", filename); file = g_io_channel_new_file (filename, "w+", NULL); if (file) { _current_get (gconfig, x264_gtk); g_io_channel_set_encoding (file, NULL, NULL); g_io_channel_write_chars (file, (const gchar *)x264_gtk, sizeof (X264_Gtk), &length, NULL); g_io_channel_unref (file); } g_free (filename); g_free (dir); }}/* x264 config management */static void_default_load (GtkButton *button __UNUSED__, gpointer user_data){ X264_Gui_Config *config; x264_param_t param; gchar buf[64]; if (!user_data) return; config = (X264_Gui_Config *)user_data; x264_param_default (¶m); /* bitrate */ gtk_combo_box_set_active (GTK_COMBO_BOX (config->bitrate.pass), 1); g_print ("bitrate %d\n", param.rc.i_bitrate); g_snprintf (buf, 64, "%d", param.rc.i_bitrate); gtk_entry_set_text (GTK_ENTRY (config->bitrate.w_average_bitrate), buf); gtk_entry_set_text (GTK_ENTRY (config->bitrate.w_target_bitrate), buf); gtk_range_set_range (GTK_RANGE (config->bitrate.w_quantizer), (gdouble)param.rc.i_qp_min, (gdouble)param.rc.i_qp_max); gtk_range_set_value (GTK_RANGE (config->bitrate.w_quantizer), (gdouble)param.rc.i_qp_constant); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->bitrate.update_statfile), FALSE); gtk_entry_set_text (GTK_ENTRY (config->bitrate.statsfile_name), "x264.stats"); gtk_widget_set_sensitive (config->bitrate.statsfile_name, FALSE); /* rate control */ g_snprintf (buf, 64, "%d", round((param.rc.f_ip_factor - 1) * 100)); gtk_entry_set_text (GTK_ENTRY (config->rate_control.bitrate.keyframe_boost), buf); g_snprintf (buf, 64, "%d", round((param.rc.f_pb_factor - 1) * 100)); gtk_entry_set_text (GTK_ENTRY (config->rate_control.bitrate.bframes_reduction), buf); g_snprintf (buf, 64, "%d", (gint)(param.rc.f_qcompress * 100)); gtk_entry_set_text (GTK_ENTRY (config->rate_control.bitrate.bitrate_variability), buf); g_snprintf (buf, 64, "%d", param.rc.i_qp_min); gtk_entry_set_text (GTK_ENTRY (config->rate_control.quantization_limits.min_qp), buf); g_snprintf (buf, 64, "%d", param.rc.i_qp_max); gtk_entry_set_text (GTK_ENTRY (config->rate_control.quantization_limits.max_qp), buf); g_snprintf (buf, 64, "%d", param.rc.i_qp_step); gtk_entry_set_text (GTK_ENTRY (config->rate_control.quantization_limits.max_qp_step), buf); g_snprintf (buf, 64, "%d", param.i_scenecut_threshold); gtk_entry_set_text (GTK_ENTRY (config->rate_control.scene_cuts.scene_cut_threshold), buf); g_snprintf (buf, 64, "%d", param.i_keyint_min); gtk_entry_set_text (GTK_ENTRY (config->rate_control.scene_cuts.min_idr_frame_interval), buf); g_snprintf (buf, 64, "%d", param.i_keyint_max); gtk_entry_set_text (GTK_ENTRY (config->rate_control.scene_cuts.max_idr_frame_interval), buf); /* mb */ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->mb.partitions.transform_8x8), param.analyse.b_transform_8x8); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->mb.partitions.pframe_search_8), CHECK_FLAG(param.analyse.inter, X264_ANALYSE_PSUB16x16)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->mb.partitions.bframe_search_8), CHECK_FLAG(param.analyse.inter, X264_ANALYSE_BSUB16x16)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->mb.partitions.pframe_search_4), CHECK_FLAG(param.analyse.inter, X264_ANALYSE_PSUB8x8)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->mb.partitions.inter_search_8), CHECK_FLAG(param.analyse.inter, X264_ANALYSE_I8x8)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->mb.partitions.inter_search_4), CHECK_FLAG(param.analyse.inter, X264_ANALYSE_I4x4)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->mb.bframes.use_as_reference), param.i_bframe); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->mb.bframes.adaptive), param.b_bframe_adaptive); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->mb.bframes.weighted_biprediction), param.analyse.b_weighted_bipred); g_snprintf (buf, 64, "%d", param.b_bframe_adaptive); gtk_entry_set_text (GTK_ENTRY (config->mb.bframes.max_consecutive), buf); gtk_range_set_value (GTK_RANGE (config->mb.bframes.bias), (gdouble)param.i_bframe_bias); gtk_combo_box_set_active (GTK_COMBO_BOX (config->mb.bframes.direct_mode), param.analyse.i_direct_mv_pred); /* more */ if (param.analyse.b_bframe_rdo) gtk_combo_box_set_active (GTK_COMBO_BOX (config->more.motion_estimation.partition_decision), X264_PD_6b); else gtk_combo_box_set_active (GTK_COMBO_BOX (config->more.motion_estimation.partition_decision), param.analyse.i_subpel_refine - 1); gtk_combo_box_set_active (GTK_COMBO_BOX (config->more.motion_estimation.method), param.analyse.i_me_method); g_snprintf (buf, 64, "%d", param.analyse.i_me_range); gtk_entry_set_text (GTK_ENTRY (config->more.motion_estimation.range), buf); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->more.motion_estimation.chroma_me), param.analyse.b_chroma_me); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->more.motion_estimation.mixed_refs), param.analyse.b_mixed_references); g_snprintf (buf, 64, "%d", param.i_frame_reference); gtk_entry_set_text (GTK_ENTRY (config->more.motion_estimation.max_ref_frames), buf); g_snprintf (buf, 64, "%d", param.vui.i_sar_width); gtk_entry_set_text (GTK_ENTRY (config->more.misc.sample_ar_x), buf); g_snprintf (buf, 64, "%d", param.vui.i_sar_height); gtk_entry_set_text (GTK_ENTRY (config->more.misc.sample_ar_y), buf); g_snprintf (buf, 64, "%d", param.i_threads); gtk_entry_set_text (GTK_ENTRY (config->more.misc.threads), buf); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->more.misc.cabac), param.b_cabac); gtk_combo_box_set_active (GTK_COMBO_BOX (config->more.misc.trellis), param.analyse.i_trellis); g_snprintf (buf, 64, "%d", param.analyse.i_noise_reduction); gtk_entry_set_text (GTK_ENTRY (config->more.misc.noise_reduction), buf); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->more.misc.df.deblocking_filter), param.b_deblocking_filter); gtk_range_set_value (GTK_RANGE (config->more.misc.df.strength), (gdouble)param.i_deblocking_filter_alphac0); gtk_range_set_value (GTK_RANGE (config->more.misc.df.threshold), (gdouble)param.i_deblocking_filter_beta); gtk_combo_box_set_active (GTK_COMBO_BOX (config->more.debug.log_level), 1); gtk_entry_set_text (GTK_ENTRY (config->more.debug.fourcc), "H264");}static void_default_set (X264_Gtk *x264_gtk){ x264_param_t param; gchar *text; x264_param_default (¶m); /* bitrate */ x264_gtk->pass = X264_PASS_SINGLE_QUANTIZER; x264_gtk->average_bitrate = param.rc.i_bitrate; x264_gtk->target_bitrate = param.rc.i_bitrate; x264_gtk->quantizer = param.rc.i_qp_constant; x264_gtk->update_statfile = 0; text = "x264.stats"; memcpy (x264_gtk->statsfile_name, text, strlen (text) + 1); /* rate control */ x264_gtk->keyframe_boost = round((param.rc.f_ip_factor - 1) * 100); x264_gtk->bframes_reduction = round((param.rc.f_pb_factor - 1) * 100); x264_gtk->bitrate_variability = round(param.rc.f_qcompress * 100); x264_gtk->min_qp = param.rc.i_qp_min; x264_gtk->max_qp = param.rc.i_qp_max; x264_gtk->max_qp_step = param.rc.i_qp_step; x264_gtk->scene_cut_threshold = param.i_scenecut_threshold; x264_gtk->min_idr_frame_interval = param.i_keyint_min; x264_gtk->max_idr_frame_interval = param.i_keyint_max; x264_gtk->direct_mode = param.analyse.i_direct_mv_pred; /* mb */ x264_gtk->transform_8x8 = param.analyse.b_transform_8x8; x264_gtk->max_ref_frames = param.i_frame_reference; x264_gtk->mixed_refs = param.analyse.b_mixed_references; if (CHECK_FLAG(param.analyse.inter, X264_ANALYSE_PSUB16x16)) x264_gtk->pframe_search_8 = 1; else x264_gtk->pframe_search_8 = 0; if (CHECK_FLAG(param.analyse.inter, X264_ANALYSE_BSUB16x16)) x264_gtk->bframe_search_8 = 1; else x264_gtk->bframe_search_8 = 0; if (CHECK_FLAG(param.analyse.inter, X264_ANALYSE_PSUB8x8)) x264_gtk->pframe_search_4 = 1; else x264_gtk->pframe_search_4 = 0; x264_gtk->inter_search_8 = CHECK_FLAG(param.analyse.inter, X264_ANALYSE_I8x8); x264_gtk->inter_search_4 = CHECK_FLAG(param.analyse.inter, X264_ANALYSE_I4x4); x264_gtk->use_as_reference = param.i_bframe; x264_gtk->adaptive = param.b_bframe_adaptive; x264_gtk->weighted_biprediction = param.analyse.b_weighted_bipred; x264_gtk->max_consecutive = 0; /* not used */ x264_gtk->bias = param.i_bframe_bias; /* more */ x264_gtk->bframe_rdo = param.analyse.b_bframe_rdo; x264_gtk->partition_decision = param.analyse.i_subpel_refine - 1; x264_gtk->me_method = param.analyse.i_me_method; x264_gtk->range = param.analyse.i_me_range; x264_gtk->chroma_me = param.analyse.b_chroma_me; x264_gtk->sample_ar_x = param.vui.i_sar_width; x264_gtk->sample_ar_y = param.vui.i_sar_height; x264_gtk->threads = param.i_threads; x264_gtk->cabac = param.b_cabac; x264_gtk->trellis = param.analyse.i_trellis; x264_gtk->noise_reduction = param.analyse.i_noise_reduction; x264_gtk->deblocking_filter = param.b_deblocking_filter; x264_gtk->strength = param.i_deblocking_filter_alphac0; x264_gtk->threshold = param.i_deblocking_filter_beta; x264_gtk->debug_method = X264_DEBUG_METHOD_ERROR; text = "H264"; memcpy (x264_gtk->fourcc, text, strlen (text) + 1);}static void_current_set (X264_Gui_Config *config, X264_Gtk *x264_gtk){ gchar buf[4096]; if (!config) return; /* bitrate */ gtk_combo_box_set_active (GTK_COMBO_BOX (config->bitrate.pass), x264_gtk->pass); g_snprintf (buf, 5, "%d", x264_gtk->average_bitrate); gtk_entry_set_text (GTK_ENTRY (config->bitrate.w_average_bitrate), buf); gtk_range_set_value (GTK_RANGE (config->bitrate.w_quantizer), x264_gtk->quantizer); g_snprintf (buf, 5, "%d", x264_gtk->target_bitrate); gtk_entry_set_text (GTK_ENTRY (config->bitrate.w_target_bitrate), buf); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->bitrate.update_statfile), x264_gtk->update_statfile); gtk_entry_set_text (GTK_ENTRY (config->bitrate.statsfile_name), x264_gtk->statsfile_name); if (x264_gtk->update_statfile) gtk_widget_set_sensitive (config->bitrate.statsfile_name, TRUE); else gtk_widget_set_sensitive (config->bitrate.statsfile_name, FALSE); /* rate control */ g_snprintf (buf, 5, "%d", x264_gtk->keyframe_boost); gtk_entry_set_text (GTK_ENTRY (config->rate_control.bitrate.keyframe_boost), buf); g_snprintf (buf, 5, "%d", x264_gtk->bframes_reduction); gtk_entry_set_text (GTK_ENTRY (config->rate_control.bitrate.bframes_reduction), buf); g_snprintf (buf, 5, "%d", x264_gtk->bitrate_variability); gtk_entry_set_text (GTK_ENTRY (config->rate_control.bitrate.bitrate_variability), buf); g_snprintf (buf, 5, "%d", x264_gtk->min_qp); gtk_entry_set_text (GTK_ENTRY (config->rate_control.quantization_limits.min_qp), buf); g_snprintf (buf, 5, "%d", x264_gtk->max_qp); gtk_entry_set_text (GTK_ENTRY (config->rate_control.quantization_limits.max_qp), buf); g_snprintf (buf, 5, "%d", x264_gtk->max_qp_step); gtk_entry_set_text (GTK_ENTRY (config->rate_control.quantization_limits.max_qp_step), buf); g_snprintf (buf, 5, "%d", x264_gtk->scene_cut_threshold); gtk_entry_set_text (GTK_ENTRY (config->rate_control.scene_cuts.scene_cut_threshold), buf); g_snprintf (buf, 5, "%d", x264_gtk->min_idr_frame_interval); gtk_entry_set_text (GTK_ENTRY (config->rate_control.scene_cuts.min_idr_frame_interval), buf); g_snprintf (buf, 5, "%d", x264_gtk->max_idr_frame_interval); gtk_entry_set_text (GTK_ENTRY (config->rate_control.scene_cuts.max_idr_frame_interval), buf); /* mb */ if (x264_gtk->transform_8x8) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->mb.partitions.transform_8x8), TRUE); else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->mb.partitions.transform_8x8), FALSE); if (x264_gtk->pframe_search_8) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->mb.partitions.pframe_search_8), TRUE); else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->mb.partitions.pframe_search_8), FALSE); if (x264_gtk->bframe_search_8) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->mb.partitions.bframe_search_8), TRUE); else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->mb.partitions.bframe_search_8), FALSE); if (x264_gtk->pframe_search_4) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->mb.partitions.pframe_search_4), TRUE); else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->mb.partitions.pframe_search_4), FALSE); if (x264_gtk->inter_search_8) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->mb.partitions.inter_search_8), TRUE); else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->mb.partitions.inter_search_8), FALSE); if (x264_gtk->inter_search_4) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->mb.partitions.inter_search_4), TRUE); else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->mb.partitions.inter_search_4), FALSE); if (x264_gtk->use_as_reference) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->mb.bframes.use_as_reference), TRUE);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -