#include <unistd.h>
#ifdef _WIN32 /* Needed to define _O_BINARY */
# include <fcntl.h>
+# define strncasecmp _strnicmp
#endif
#include <errno.h>
#include <string.h>
#include "../config.h"
#include "x264_icon.h"
#include "x264_gtk.h"
+#include "x264_gtk_i18n.h"
#include "x264_gtk_demuxers.h"
#include "x264_gtk_encode_private.h"
#include "x264_gtk_encode_encode.h"
GtkWidget *fps_num;
GtkWidget *fps_den;
GtkWidget *frame_count;
-
+
/* output */
GtkWidget *path_output;
GtkWidget *file_output;
/* 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 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);
if (stat(name, &buf) < 0)
{
- fprintf(stderr, "Can't stat file\n");
+ fprintf(stderr, _("Can't stat file\n"));
return 0;
}
return buf.st_size;
encode = (X264_Gtk_Encode *)g_malloc0 (sizeof (X264_Gtk_Encode));
- dialog = gtk_dialog_new_with_buttons ("X264 Gtk Encoder",
+ dialog = gtk_dialog_new_with_buttons (_("X264 Gtk Encoder"),
NULL, 0,
NULL);
icon = gdk_pixbuf_new_from_inline (-1, x264_icon,
encode);
encode->main_dialog = dialog;
- button = gtk_button_new_with_label ("Configure");
+ 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",
NULL);
/* input */
- frame = gtk_frame_new ("Input file");
+ frame = gtk_frame_new (_("Input file"));
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), frame, FALSE, TRUE, 6);
gtk_widget_show (frame);
gtk_container_add (GTK_CONTAINER (frame), table);
gtk_widget_show (table);
- label = gtk_label_new ("Input file:");
+ 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_file_chooser_dialog_new(_("Select a file"),
GTK_WINDOW(dialog),
GTK_FILE_CHOOSER_ACTION_OPEN,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
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_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");
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_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_set_name (filter, _("YUV CIF sequence"));
gtk_file_filter_add_pattern (filter, "*.cif");
gtk_file_chooser_add_filter (chooser, filter);
- /* CIF filter */
+ /* QCIF filter */
filter = gtk_file_filter_new ();
- gtk_file_filter_set_name (filter, "YUV QCIF sequence");
+ 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_chooser_add_filter (chooser, filter);
/* AVS filter */
filter = gtk_file_filter_new ();
- gtk_file_filter_set_name (filter, "Avisynth Script");
+ 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));
+ 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:");
+ 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);
gtk_table_attach_defaults (GTK_TABLE (table), encode->width, 1, 2, 1, 2);
gtk_widget_show (encode->width);
- label = gtk_label_new ("Height:");
+ 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);
gtk_widget_show (encode->height);
- label = gtk_label_new ("Frame rate num:");
+ 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);
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:");
+ 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);
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:");
+ 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);
gtk_widget_show (encode->frame_count);
/* output */
- frame = gtk_frame_new ("Output file");
+ frame = gtk_frame_new (_("Output file"));
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), frame, FALSE, TRUE, 6);
gtk_widget_show (frame);
gtk_container_add (GTK_CONTAINER (frame), table);
gtk_widget_show (table);
- label = gtk_label_new ("Output path:");
+ 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",
+ 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.):");
+ 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);
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:");
+ 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);
GSList *filters;
GtkFileFilter *selected;
int container;
-
+
filters = gtk_file_chooser_list_filters(GTK_FILE_CHOOSER (encode->file_input));
selected = gtk_file_chooser_get_filter(GTK_FILE_CHOOSER (encode->file_input));
container = g_slist_index(filters, selected);
{
/* All format needed, search for extension */
const char *ext = strrchr(in, '.');
- if (!strncmp(ext, ".avs", 4) || !strncmp(ext, ".AVS", 4))
- encode->container = X264_DEMUXER_AVS;
- else if (!strncmp(ext, ".avi", 4) || !strncmp(ext, ".AVI", 4))
+ if (!strncasecmp(ext, ".y4m", 4))
+ encode->container = X264_DEMUXER_Y4M;
+ else if (!strncasecmp(ext, ".avs", 4))
encode->container = X264_DEMUXER_AVS;
- else if (!strncmp(ext, ".cif", 4) || !strncmp(ext, ".CIF", 4))
+ else if (!strncasecmp(ext, ".avi", 4))
+ encode->container = X264_DEMUXER_AVI;
+ else if (!strncasecmp(ext, ".cif", 4))
encode->container = X264_DEMUXER_CIF;
- else if (!strncmp(ext, ".qcif", 4) || !strncmp(ext, ".QCIF", 4))
+ else if (!strncasecmp(ext, ".qcif", 4))
encode->container = X264_DEMUXER_QCIF;
else
encode->container = X264_DEMUXER_YUV;
/* The all supproted type is 0 => shift of 1 */
encode->container = (X264_Demuxer_Type)container-1;
}
-
+
switch (encode->container) {
case X264_DEMUXER_YUV: /* YUV */
break;
- case X264_DEMUXER_CIF: /* CIF */
+ case X264_DEMUXER_CIF: /* YUV CIF */
param.i_width = 352;
param.i_height = 288;
break;
- case X264_DEMUXER_QCIF: /* QCIF */
+ case X264_DEMUXER_QCIF: /* YUV QCIF */
/* Default input file driver */
param.i_width = 176;
param.i_height = 144;
break;
+ case X264_DEMUXER_Y4M: /* YUV4MPEG */
+ /* Default input file driver */
+ sensitivity = FALSE;
+ p_open_infile = open_file_y4m;
+ p_get_frame_total = get_frame_total_y4m;
+ p_close_infile = close_file_y4m;
+ break;
#ifdef AVIS_INPUT
case X264_DEMUXER_AVI: /* AVI */
case X264_DEMUXER_AVS: /* AVS */
GTK_BUTTONS_CLOSE,
strerror(errno));
gtk_dialog_run (GTK_DIALOG (dialog_message));
- gtk_widget_destroy (dialog_message);
+ gtk_widget_destroy (dialog_message);
}
encode->size = _file_size(in);
gpointer user_data)
{
GtkWidget *window;
-
+
window = x264_gtk_window_create (GTK_WIDGET (user_data));
x264_gtk_shutdown (window);
}
path_output = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (encode->path_output));
filename_output = gtk_entry_get_text (GTK_ENTRY (encode->file_output));
- if (!file_input ||
+ if (!file_input ||
(file_input[0] == '\0')) {
GtkWidget *dialog_message;
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
- "Error: input file name is not set");
+ _("Error: input file name is not set"));
gtk_dialog_run (GTK_DIALOG (dialog_message));
gtk_widget_destroy (dialog_message);
break;
}
- if (!filename_output ||
+ if (!filename_output ||
(filename_output[0] == '\0')) {
GtkWidget *dialog_message;
dialog_message = gtk_message_dialog_new (GTK_WINDOW (dialog),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_CLOSE,
- "Error: output file name is not set");
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ _("Error: output file name is not set"));
gtk_dialog_run (GTK_DIALOG (dialog_message));
gtk_widget_destroy (dialog_message);
break;
}
file_output = g_strconcat (path_output, "/", filename_output, ext, NULL);
- g_print ("file output : %s\n", file_output);
+ g_print (_("file output : %s\n"), file_output);
+
+ {
+ GIOChannel *file;
+
+ file = g_io_channel_new_file (file_output, "r", NULL);
+ if (file) {
+ GtkWidget *dialog_overwrite;
+ GtkWidget *eb;
+ GtkWidget *label;
+ const gchar *label_text = NULL;
+ gint res;
+
+ dialog_overwrite = gtk_dialog_new_with_buttons (_("Existing file"),
+ GTK_WINDOW (dialog),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_STOCK_YES,
+ GTK_RESPONSE_ACCEPT,
+ GTK_STOCK_NO,
+ GTK_RESPONSE_REJECT,
+ NULL);
+
+ eb = gtk_event_box_new ();
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog_overwrite)->vbox), eb);
+ gtk_container_set_border_width (GTK_CONTAINER (eb), 6);
+ gtk_widget_show (eb);
+
+ label_text = g_strconcat (_("Do you want to overwrite file\n"),
+ file_output, " ?", NULL);
+ label = gtk_label_new (label_text);
+ gtk_container_add (GTK_CONTAINER (eb), label);
+ gtk_widget_show (label);
+
+ res = gtk_dialog_run (GTK_DIALOG (dialog_overwrite));
+ gtk_widget_destroy (dialog_overwrite);
+ g_io_channel_unref (file);
+ if ((res == GTK_RESPONSE_REJECT) || (res == GTK_RESPONSE_DELETE_EVENT))
+ break;
+ }
+ }
x264_gtk = x264_gtk_load ();
param = x264_gtk_param_get (x264_gtk);
- g_free (x264_gtk);
+ x264_gtk_free (x264_gtk);
{
gint width;
sizeof (X264_Pipe_Data),
&size, NULL);
if (status != G_IO_STATUS_NORMAL) {
- g_print ("Error ! %d %d %d\n", status, sizeof (X264_Pipe_Data), size);
+ g_print (_("Error ! %d %d %d\n"), status, (int)sizeof (X264_Pipe_Data), (int)size);
return FALSE;
}
gtk_entry_set_text (GTK_ENTRY (thread_data->current_video_frame),
str);
- snprintf (str, 128, "%dKB",
+ snprintf (str, 128, _("%dKB"),
pipe_data.file >> 10);
gtk_entry_set_text (GTK_ENTRY (thread_data->video_data),
str);
fps = pipe_data.elapsed > 0 ? 1000000.0 * (gdouble)pipe_data.frame / (gdouble)pipe_data.elapsed : 0.0;
- snprintf (str, 128, "%.2fKB/s (%.2f fps)",
+ snprintf (str, 128, _("%.2fKB/s (%.2f fps)"),
(double) pipe_data.file * 8 * thread_data->param->i_fps_num /
((double) thread_data->param->i_fps_den * pipe_data.frame * 1000),
fps);