⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 x264_gtk.c

📁 linux下编译已经通过
💻 C
📖 第 1 页 / 共 4 页
字号:
  gtk_widget_show (label);  page = _more_page (gconfig);  gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, label);  gtk_widget_show (page);  label = gtk_label_new (_("Quantization matrices"));  gtk_widget_show (label);  page = _cqm_page (gconfig);  gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, label);  gtk_widget_show (page);  _current_set (gconfig, x264_gtk);  result = gtk_dialog_run (GTK_DIALOG (win_x264_gtk));  _dialog_run (GTK_DIALOG (win_x264_gtk), result, gconfig, x264_gtk);  return win_x264_gtk;}voidx264_gtk_shutdown (GtkWidget *dialog){  X264_Gui_Config *gconfig;  gconfig = g_object_get_data (G_OBJECT (dialog), "x264-gui-config");  gtk_widget_destroy (dialog);  if (gconfig)    g_free (gconfig);}voidx264_gtk_free (X264_Gtk *x264_gtk){  if (!x264_gtk)    return;  g_free (x264_gtk);}/* Notebook pages *//* Callbacks */static void_dialog_run (GtkDialog       *dialog __UNUSED__,             gint             response,             X264_Gui_Config *gconfig,             X264_Gtk        *x264_gtk){  if (response == GTK_RESPONSE_OK)    {      GIOChannel *file;      gchar      *filename;      gchar      *dir;      gsize       length;      gint        res;#ifndef _WIN32      mode_t      mode;#endif      dir = x264_gtk_path (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 = x264_gtk_path ("x264.cfg");      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){  gchar            buf[64];  X264_Gui_Config *config;  x264_param_t     param;  gint             i;  if (!user_data)    return;  config = (X264_Gui_Config *)user_data;  x264_param_default (&param);  /* bitrate */  gtk_combo_box_set_active (GTK_COMBO_BOX (config->bitrate.pass), 1);  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),                       0.0,                       51.0);  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);  gtk_widget_set_sensitive (config->bitrate.update_statfile, FALSE);  /* rate control */  g_snprintf (buf, 64, "%d", round((param.rc.f_ip_factor - 1.0) * 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.0) * 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);  g_snprintf (buf, 64, "%d", param.rc.i_vbv_max_bitrate);  gtk_entry_set_text (GTK_ENTRY (config->rate_control.vbv.vbv_max_bitrate), buf);  g_snprintf (buf, 64, "%d", param.rc.i_vbv_buffer_size);  gtk_entry_set_text (GTK_ENTRY (config->rate_control.vbv.vbv_buffer_size), buf);  g_snprintf (buf, 64, "%.1f", param.rc.f_vbv_buffer_init);  gtk_entry_set_text (GTK_ENTRY (config->rate_control.vbv.vbv_buffer_init), 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.bframe_pyramid), param.b_bframe_pyramid);  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->mb.bframes.bidir_me), param.analyse.b_bidir_me);  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->mb.bframes.bframe_adaptive), param.b_bframe_adaptive);  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->mb.bframes.weighted_bipred), param.analyse.b_weighted_bipred);  g_snprintf (buf, 64, "%d", param.i_bframe);  gtk_entry_set_text (GTK_ENTRY (config->mb.bframes.bframe), buf);  gtk_range_set_value (GTK_RANGE (config->mb.bframes.bframe_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);  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->more.motion_estimation.fast_pskip), param.analyse.b_fast_pskip);  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->more.motion_estimation.dct_decimate), param.analyse.b_dct_decimate);  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);  gtk_spin_button_set_value (GTK_SPIN_BUTTON (config->more.misc.threads), param.i_threads);  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), param.i_log_level + 1);  gtk_entry_set_text (GTK_ENTRY (config->more.debug.fourcc), "H264");  /* cqm */  switch (param.i_cqm_preset) {  case X264_CQM_FLAT:    // workaround: gtk fails to update the matrix entries if we activate the button    // that was already active.    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->cqm.radio_jvt), TRUE);    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->cqm.radio_flat), TRUE);    break;  case X264_CQM_JVT:    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->cqm.radio_jvt), TRUE);    break;  case X264_CQM_CUSTOM:    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (config->cqm.radio_custom), TRUE);    break;  }  if (param.psz_cqm_file && (param.psz_cqm_file[0] != '\0'))    gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (config->cqm.cqm_file), param.psz_cqm_file);  for (i = 0; i < 16; i++) {    gchar buf[4];    g_snprintf (buf, 4, "%d", param.cqm_4iy[i]);    gtk_entry_set_text (GTK_ENTRY (config->cqm.cqm_4iy[i]), buf);    g_snprintf (buf, 4, "%d", param.cqm_4ic[i]);    gtk_entry_set_text (GTK_ENTRY (config->cqm.cqm_4ic[i]), buf);    g_snprintf (buf, 4, "%d", param.cqm_4py[i]);    gtk_entry_set_text (GTK_ENTRY (config->cqm.cqm_4py[i]), buf);    g_snprintf (buf, 4, "%d", param.cqm_4pc[i]);    gtk_entry_set_text (GTK_ENTRY (config->cqm.cqm_4pc[i]), buf);  }  for (i = 0; i < 64; i++) {    gchar buf[4];    g_snprintf (buf, 4, "%d", param.cqm_8iy[i]);    gtk_entry_set_text (GTK_ENTRY (config->cqm.cqm_8iy[i]), buf);    g_snprintf (buf, 4, "%d", param.cqm_8py[i]);    gtk_entry_set_text (GTK_ENTRY (config->cqm.cqm_8py[i]), buf);  }}static void_default_set (X264_Gtk *x264_gtk){  x264_param_t param;  x264_param_default (&param);  /* 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->stat_write = param.rc.b_stat_write;  x264_gtk->stat_read = param.rc.b_stat_read;  x264_gtk->update_statfile = 0;  x264_gtk->statsfile_length = strlen (param.rc.psz_stat_out);  memcpy (x264_gtk->statsfile_name, param.rc.psz_stat_out, x264_gtk->statsfile_length + 1);  /* rate control */  x264_gtk->keyframe_boost = round((param.rc.f_ip_factor - 1.0) * 100);  x264_gtk->bframes_reduction = round((param.rc.f_pb_factor - 1.0) * 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->vbv_max_bitrate = param.rc.i_vbv_max_bitrate;  x264_gtk->vbv_buffer_size = param.rc.i_vbv_buffer_size;  x264_gtk->vbv_buffer_init = param.rc.f_vbv_buffer_init;  /* mb */  x264_gtk->transform_8x8 = param.analyse.b_transform_8x8;  if (CHECK_FLAG(param.analyse.inter, X264_ANALYSE_PSUB16x16))    x264_gtk->pframe_search_8 = 1;  else

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -