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

📄 x264_gtk.c.svn-base

📁 一個影像串流的壓縮方式H264加密方式
💻 SVN-BASE
📖 第 1 页 / 共 3 页
字号:
#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 (&param);  /* 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 (&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->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 + -