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

📄 x264_gtk_encode_main_window.c.svn-base

📁 一個影像串流的壓縮方式H264加密方式
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
#if defined __FreeBSD__ || defined __OpenBSD__ || defined __NetBSD__ || defined __DragonFly__#  include <inttypes.h>#else#  include <stdint.h>#endif#include <unistd.h>#ifdef _WIN32 /* Needed to define _O_BINARY */#  include <fcntl.h>#  define strncasecmp _strnicmp#endif#include <errno.h>#include <string.h>#include <sys/stat.h>  /* For stat */#include <gtk/gtk.h>#include "../x264.h"#include "../config.h"#include "x264_icon.h"#include "x264_gtk.h"#include "x264_gtk_demuxers.h"#include "x264_gtk_encode_private.h"#include "x264_gtk_encode_encode.h"#include "x264_gtk_encode_status_window.h"typedef struct X264_Gtk_Encode_ X264_Gtk_Encode;struct X264_Gtk_Encode_{  GtkWidget         *main_dialog;  /* input */  X264_Demuxer_Type  container;  guint64            size; /* For YUV formats */  GtkWidget         *file_input;  GtkWidget         *width;  GtkWidget         *height;  GtkWidget         *fps_num;  GtkWidget         *fps_den;  GtkWidget         *frame_count;    /* output */  GtkWidget         *path_output;  GtkWidget         *file_output;  GtkWidget         *combo;};/* Callbacks */static gboolean _delete_window_cb    (GtkWidget *widget,                                      GdkEvent  *event,                                      gpointer   user_data);static void     _configure_window_cb (GtkButton *button,                                      gpointer   user_data);static void     _chooser_window_cb   (GtkDialog *dialog,                                      gint       res,                                      gpointer   user_data);static void     _response_window_cb  (GtkDialog *dialog,                                      gint       res,                                      gpointer   user_data);static void     _dimension_entry_cb  (GtkEditable *editable,                                      gpointer     user_data);static gboolean _fill_status_window (GIOChannel  *io,                                     GIOCondition condition,                                     gpointer     user_data);/* Code */guint64_file_size(const char* name){  struct stat buf;  memset(&buf, 0, sizeof(struct stat));  if (stat(name, &buf) < 0)  {    fprintf(stderr, "Can't stat file\n");    return 0;  }  return buf.st_size;}voidx264_gtk_encode_main_window (){  GtkWidget       *dialog;  GtkWidget       *frame;  GtkWidget       *button;  GtkWidget       *table;  GtkWidget       *label;  GtkFileChooser  *chooser;  GtkFileFilter   *filter;  GdkPixbuf       *icon;  X264_Gtk_Encode *encode;  encode = (X264_Gtk_Encode *)g_malloc0 (sizeof (X264_Gtk_Encode));  dialog = gtk_dialog_new_with_buttons ("X264 Gtk Encoder",                                        NULL, 0,                                        NULL);  icon = gdk_pixbuf_new_from_inline (-1, x264_icon,                                        FALSE, NULL);  gtk_window_set_icon (GTK_WINDOW (dialog), icon);  g_signal_connect (G_OBJECT (dialog),                    "delete-event",                    G_CALLBACK (_delete_window_cb),                    encode);  g_signal_connect (G_OBJECT (dialog),                    "response",                    G_CALLBACK (_response_window_cb),                    encode);  encode->main_dialog = dialog;  button = gtk_button_new_with_label ("Configure");  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), button, FALSE, TRUE, 6);  g_signal_connect (G_OBJECT (button),                    "clicked",                    G_CALLBACK (_configure_window_cb),                    dialog);  gtk_widget_show (button);  gtk_dialog_add_buttons (GTK_DIALOG (dialog),                          GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,                          GTK_STOCK_EXECUTE, GTK_RESPONSE_APPLY,                          NULL);  /* input */  frame = gtk_frame_new ("Input file");  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), frame, FALSE, TRUE, 6);  gtk_widget_show (frame);  table = gtk_table_new (6, 2, TRUE);  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);  gtk_container_add (GTK_CONTAINER (frame), table);  gtk_widget_show (table);  label = gtk_label_new ("Input file:");  gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);  gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 0, 1);  gtk_widget_show (label);  chooser = (GtkFileChooser*)      gtk_file_chooser_dialog_new("Select a file",                                  GTK_WINDOW(dialog),                                  GTK_FILE_CHOOSER_ACTION_OPEN,                                  GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,                                  GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,                                  NULL);  gtk_file_chooser_set_current_folder (chooser, g_get_home_dir ());   /* All supported */  filter = gtk_file_filter_new ();  gtk_file_filter_set_name (filter, "All supported");  gtk_file_filter_add_pattern (filter, "*.yuv");  gtk_file_filter_add_pattern (filter, "*.cif");  gtk_file_filter_add_pattern (filter, "*.qcif");  gtk_file_filter_add_pattern (filter, "*.y4m");#ifdef AVIS_INPUT  gtk_file_filter_add_pattern (filter, "*.avs");  gtk_file_filter_add_pattern (filter, "*.avi");#endif  gtk_file_chooser_add_filter (chooser, filter);  /* YUV filter */  filter = gtk_file_filter_new ();  gtk_file_filter_set_name (filter, "YUV sequence");  gtk_file_filter_add_pattern (filter, "*.yuv");  gtk_file_chooser_add_filter (chooser, filter);  /* CIF filter */  filter = gtk_file_filter_new ();  gtk_file_filter_set_name (filter, "YUV CIF sequence");  gtk_file_filter_add_pattern (filter, "*.cif");  gtk_file_chooser_add_filter (chooser, filter);  /* QCIF filter */  filter = gtk_file_filter_new ();  gtk_file_filter_set_name (filter, "YUV QCIF sequence");  gtk_file_filter_add_pattern (filter, "*.qcif");  gtk_file_chooser_add_filter (chooser, filter);  /* YUV4MPEG2 filter */  filter = gtk_file_filter_new ();  gtk_file_filter_set_name (filter, "YUV4MPEG2 sequence");  gtk_file_filter_add_pattern (filter, "*.y4m");  gtk_file_chooser_add_filter (chooser, filter);#ifdef AVIS_INPUT  /* AVI filter */  filter = gtk_file_filter_new ();  gtk_file_filter_set_name (filter, "AVI");  gtk_file_filter_add_pattern (filter, "*.avi");  gtk_file_chooser_add_filter (chooser, filter);  /* AVS filter */  filter = gtk_file_filter_new ();  gtk_file_filter_set_name (filter, "Avisynth Script");  gtk_file_filter_add_pattern (filter, "*.avs");  gtk_file_chooser_add_filter (chooser, filter);#endif  g_signal_connect_after(G_OBJECT (chooser), "response",                         G_CALLBACK (_chooser_window_cb),                         encode);  encode->file_input = gtk_file_chooser_button_new_with_dialog(GTK_WIDGET(chooser));  gtk_table_attach_defaults (GTK_TABLE (table), encode->file_input, 1, 2, 0, 1);  gtk_widget_show (encode->file_input);  label = gtk_label_new ("Width:");  gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);  gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 1, 2);  gtk_widget_show (label);  encode->width = gtk_entry_new_with_max_length (255);  gtk_entry_set_text (GTK_ENTRY (encode->width), "352");  g_signal_connect_after(G_OBJECT (encode->width), "changed",                   G_CALLBACK (_dimension_entry_cb),                   encode);  gtk_table_attach_defaults (GTK_TABLE (table), encode->width, 1, 2, 1, 2);  gtk_widget_show (encode->width);  label = gtk_label_new ("Height:");  gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);  gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 2, 3);  gtk_widget_show (label);  encode->height = gtk_entry_new_with_max_length (255);  gtk_entry_set_text (GTK_ENTRY (encode->height), "288");  gtk_table_attach_defaults (GTK_TABLE (table), encode->height, 1, 2, 2, 3);  g_signal_connect_after(G_OBJECT (encode->height), "changed",                   G_CALLBACK (_dimension_entry_cb),                   encode);  gtk_widget_show (encode->height);  label = gtk_label_new ("Frame rate num:");  gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);  gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 3, 4);  gtk_widget_show (label);  encode->fps_num = gtk_entry_new_with_max_length (255);  gtk_entry_set_text (GTK_ENTRY (encode->fps_num), "25");  gtk_table_attach_defaults (GTK_TABLE (table), encode->fps_num, 1, 2, 3, 4);  gtk_widget_show (encode->fps_num);  label = gtk_label_new ("Frame rate den:");  gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);  gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 4, 5);  gtk_widget_show (label);  encode->fps_den = gtk_entry_new_with_max_length (255);  gtk_entry_set_text (GTK_ENTRY (encode->fps_den), "1");  gtk_table_attach_defaults (GTK_TABLE (table), encode->fps_den, 1, 2, 4, 5);  gtk_widget_show (encode->fps_den);  label = gtk_label_new ("Frame count:");  gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);  gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 5, 6);  gtk_widget_show (label);  encode->frame_count = gtk_entry_new_with_max_length (255);  gtk_entry_set_text (GTK_ENTRY (encode->frame_count), "0");  gtk_table_attach_defaults (GTK_TABLE (table), encode->frame_count, 1, 2, 5, 6);  gtk_widget_show (encode->frame_count);  /* output */  frame = gtk_frame_new ("Output file");  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), frame, FALSE, TRUE, 6);  gtk_widget_show (frame);  table = gtk_table_new (3, 2, TRUE);  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);  gtk_container_add (GTK_CONTAINER (frame), table);  gtk_widget_show (table);  label = gtk_label_new ("Output path:");  gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);  gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 0, 1);  gtk_widget_show (label);  encode->path_output = gtk_file_chooser_button_new ("Select a path",                                                     GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);  gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (encode->path_output),                                       g_get_home_dir ());  gtk_table_attach_defaults (GTK_TABLE (table), encode->path_output, 1, 2, 0, 1);  gtk_widget_show (encode->path_output);  label = gtk_label_new ("Output file (without ext.):");  gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);  gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 1, 2);  gtk_widget_show (label);  encode->file_output = gtk_entry_new_with_max_length (4095);  gtk_table_attach_defaults (GTK_TABLE (table), encode->file_output, 1, 2, 1, 2);  gtk_widget_show (encode->file_output);  label = gtk_label_new ("Container:");  gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);  gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 2, 3);  gtk_widget_show (label);  encode->combo = gtk_combo_box_new_text ();  gtk_combo_box_append_text (GTK_COMBO_BOX (encode->combo),                             "Raw ES");  gtk_combo_box_append_text (GTK_COMBO_BOX (encode->combo),                             "Matroska");#ifdef MP4_OUTPUT  gtk_combo_box_append_text (GTK_COMBO_BOX (encode->combo),                             "Mp4");#endif  gtk_table_attach_defaults (GTK_TABLE (table), encode->combo, 1, 2, 2, 3);  gtk_widget_show (encode->combo);  gtk_combo_box_set_active (GTK_COMBO_BOX (encode->combo), 0);  gtk_widget_show (dialog);}/* Callbacks */static void_encode_shutdown (X264_Gtk_Encode *encode){  if (!encode) return;  g_free (encode);  encode = NULL;}static gboolean_delete_window_cb (GtkWidget *widget __UNUSED__,                   GdkEvent  *event __UNUSED__,                   gpointer   user_data){  gtk_main_quit ();  _encode_shutdown ((X264_Gtk_Encode *)user_data);  return TRUE;}static void_chooser_window_cb (GtkDialog *dialog,                    gint       res,                    gpointer   user_data){  X264_Gtk_Encode *encode;  gboolean         sensitivity = TRUE;  x264_param_t     param;  hnd_t            hin;  char            *in;#define       BUFFER_LENGTH  64  gchar            buffer[BUFFER_LENGTH];  /* input interface */  int              (*p_open_infile)( char *psz_filename, hnd_t *p_handle, x264_param_t *p_param );  int              (*p_get_frame_total)( hnd_t handle );  int              (*p_close_infile)( hnd_t handle );  encode = (X264_Gtk_Encode *)user_data;  in = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (encode->file_input));

⌨️ 快捷键说明

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