renatofilho@586: #include renatofilho@586: #include renatofilho@586: #include renatofilho@586: #include renatofilho@586: renatofilho@586: #include renatofilho@586: #include renatofilho@586: renatofilho@588: #include "gmencoder.h" renatofilho@586: renatofilho@588: #define FILE_OUT 1 renatofilho@586: renatofilho@586: static GMainLoop *mainloop = NULL; renatofilho@588: /* Options */ renatofilho@588: static gchar* input_file = NULL; renatofilho@588: static gchar* video_encode = NULL; renatofilho@588: static gchar* video_opts = NULL; renatofilho@588: static gdouble video_fps = 0.0; renatofilho@588: static gint video_rate = 0; renatofilho@588: static gint video_width = 0; renatofilho@588: static gint video_height = 0; renatofilho@588: static gchar* audio_encode = NULL; renatofilho@588: static gchar* audio_opts = NULL; renatofilho@588: static double audio_rate = 0.0; renatofilho@588: static gchar* output_element = NULL; renatofilho@588: static gchar* output_opts = NULL; renatofilho@586: renatofilho@586: static void renatofilho@586: _mencoder_ready_cb (GMencoder *mencoder, gpointer data) renatofilho@586: { renatofilho@586: g_mencoder_play_stream (mencoder); renatofilho@586: } renatofilho@586: renatofilho@586: static void renatofilho@586: _mencoder_eos_cb (GMencoder *mencoder, gpointer data) renatofilho@586: { renatofilho@586: g_print ("EOS\n"); renatofilho@586: g_main_loop_quit ((GMainLoop *) data); renatofilho@586: } renatofilho@586: renatofilho@586: static void renatofilho@586: _mencoder_error_cb (GMencoder *mencoder, const gchar* msg, gpointer data) renatofilho@586: { renatofilho@586: g_print ("Error: %s\n", msg); renatofilho@586: g_main_loop_quit ((GMainLoop *) data); renatofilho@586: } renatofilho@586: renatofilho@586: static gboolean renatofilho@586: _io_channel_cb (GIOChannel *ch, renatofilho@586: GIOCondition condition, renatofilho@586: gpointer data) renatofilho@586: { renatofilho@586: GString *cmd = g_string_new (""); renatofilho@586: g_io_channel_read_line_string (ch, cmd, NULL, NULL); renatofilho@586: renatofilho@586: if (strcmp (cmd->str, "PLAY\n") == 0) { renatofilho@586: g_mencoder_play_stream (G_MENCODER (data)); renatofilho@586: } else if (strcmp (cmd->str, "PAUSE\n") == 0) { renatofilho@586: g_mencoder_pause_stream (G_MENCODER (data)); renatofilho@586: } else if (strcmp (cmd->str, "STOP\n") == 0) { renatofilho@586: g_mencoder_close_stream (G_MENCODER (data)); renatofilho@586: } else if (strcmp (cmd->str, "QUIT\n") == 0) { renatofilho@586: g_mencoder_close_stream (G_MENCODER (data)); renatofilho@586: g_main_loop_quit (mainloop); renatofilho@586: } renatofilho@586: g_string_free (cmd, TRUE); renatofilho@586: return TRUE; renatofilho@586: } renatofilho@586: renatofilho@586: int renatofilho@586: main (int argc, char** argv) renatofilho@586: { renatofilho@586: GMencoder *coder; renatofilho@586: GIOChannel *ch; renatofilho@588: gchar **oopts; renatofilho@588: gchar **vopts; renatofilho@588: gchar **aopts; renatofilho@588: renatofilho@588: GOptionContext *context; renatofilho@588: static const GOptionEntry options [] = { renatofilho@588: {"input-file", 'i', 0, G_OPTION_ARG_STRING, &input_file, "Input File", NULL}, renatofilho@588: {"video-encode", 0, 0, G_OPTION_ARG_STRING, &video_encode, "GstElementName for used to video encode", NULL}, renatofilho@588: {"video-opts", 0, 0, G_OPTION_ARG_STRING, &video_opts, "Properties to set on video element", NULL}, renatofilho@588: {"video-fps", 0, 0, G_OPTION_ARG_DOUBLE, &video_fps, "Video FPS", NULL}, renatofilho@588: {"video-rate", 0, 0, G_OPTION_ARG_INT, &video_rate, "Video rate", NULL}, renatofilho@588: {"video-width", 0, 0, G_OPTION_ARG_INT, &video_width, "Video width", NULL}, renatofilho@588: {"video-height", 0, 0, G_OPTION_ARG_INT, &video_height, "Video height", NULL}, renatofilho@588: {"audio-encode", 0, 0, G_OPTION_ARG_STRING, &audio_encode, "GstElementName for use to audio encode", NULL}, renatofilho@588: {"audio-opts", 0, 0, G_OPTION_ARG_STRING, &audio_opts, "Properties to set on audio element", NULL}, renatofilho@588: {"audio-rate", 0, 0, G_OPTION_ARG_INT, &audio_rate, "Audio rate", NULL}, renatofilho@588: {"output-element", 0, 0, G_OPTION_ARG_STRING, &output_element,"GstElementName for use to output", NULL}, renatofilho@588: {"output-opts", 0, 0, G_OPTION_ARG_STRING, &output_opts, "Properties to set on output element", NULL}, renatofilho@588: { NULL } renatofilho@588: }; renatofilho@586: renatofilho@586: g_type_init (); renatofilho@588: g_thread_init (NULL); renatofilho@588: renatofilho@588: //g_set_prgname ("gmemcoder"); renatofilho@588: context = g_option_context_new (NULL); renatofilho@588: g_option_context_set_help_enabled (context, TRUE); renatofilho@588: g_option_context_add_main_entries (context, options, NULL); renatofilho@588: g_option_context_add_group (context, gst_init_get_option_group ()); renatofilho@588: g_option_context_parse (context, &argc, &argv, NULL); renatofilho@588: renatofilho@586: gst_init (&argc, &argv); renatofilho@586: renatofilho@588: if (output_element == NULL) { renatofilho@588: g_print ("You need specify output-element name.\nTry --help for more information.\n"); renatofilho@588: return 1; renatofilho@588: } renatofilho@588: renatofilho@588: if (input_file == NULL) { renatofilho@588: g_print ("You need specify input file\nTry --help for more information.\n"); renatofilho@588: } renatofilho@586: renatofilho@586: coder = g_mencoder_new (); renatofilho@586: ch = g_io_channel_unix_new (0); renatofilho@586: renatofilho@588: aopts = g_strsplit (audio_opts, ",", 0); renatofilho@588: vopts = g_strsplit (video_opts, ",", 0); renatofilho@588: oopts = g_strsplit (output_opts, ",", 0); renatofilho@588: renatofilho@588: g_mencoder_setup_stream (coder, renatofilho@588: input_file, renatofilho@588: video_encode, vopts, video_fps, video_rate, video_width, video_height, renatofilho@588: audio_encode, aopts, audio_rate, renatofilho@588: output_element, oopts); renatofilho@588: renatofilho@588: g_strfreev (aopts); renatofilho@588: g_strfreev (vopts); renatofilho@588: g_strfreev (oopts); renatofilho@586: renatofilho@586: mainloop = g_main_loop_new (NULL, FALSE); renatofilho@586: g_io_add_watch (ch, G_IO_IN, _io_channel_cb, coder); renatofilho@586: renatofilho@586: renatofilho@586: g_signal_connect (G_OBJECT (coder), renatofilho@586: "ready", renatofilho@586: G_CALLBACK (_mencoder_ready_cb), renatofilho@586: NULL); renatofilho@586: renatofilho@586: g_signal_connect (G_OBJECT (coder), renatofilho@586: "eos", renatofilho@586: G_CALLBACK (_mencoder_eos_cb), renatofilho@586: mainloop); renatofilho@586: renatofilho@586: g_signal_connect (G_OBJECT (coder), renatofilho@586: "error", renatofilho@586: G_CALLBACK (_mencoder_error_cb), renatofilho@586: mainloop); renatofilho@586: renatofilho@586: g_main_loop_run (mainloop); renatofilho@586: renatofilho@586: return 0; renatofilho@586: }