gmyth-stream/gmemcoder/src/main.c
author renatofilho
Tue May 08 14:59:15 2007 +0100 (2007-05-08)
branchtrunk
changeset 634 43f66895cc86
parent 600 7da2a5e32fa6
child 678 89bdaa9e72bf
permissions -rw-r--r--
[svn r640] removed multi files support
renatofilho@586
     1
#include <sys/stat.h>
renatofilho@586
     2
#include <fcntl.h>
renatofilho@586
     3
#include <unistd.h>
renatofilho@586
     4
#include <string.h>
renatofilho@586
     5
renatofilho@586
     6
#include <gst/gst.h>
renatofilho@586
     7
#include <glib.h> 
renatofilho@586
     8
renatofilho@588
     9
#include "gmencoder.h"
renatofilho@586
    10
renatofilho@588
    11
#define FILE_OUT  1
renatofilho@586
    12
renatofilho@586
    13
static GMainLoop *mainloop = NULL;
renatofilho@588
    14
/* Options */
renatofilho@588
    15
static gchar*   input_file      = NULL;
renatofilho@588
    16
static gchar*   video_encode    = NULL;
renatofilho@588
    17
static gchar*   video_opts      = NULL;
renatofilho@588
    18
static gdouble  video_fps       = 0.0;
renatofilho@588
    19
static gint     video_rate      = 0;
renatofilho@588
    20
static gint     video_width     = 0;
renatofilho@588
    21
static gint     video_height    = 0;
renatofilho@588
    22
static gchar*   audio_encode    = NULL;
renatofilho@588
    23
static gchar*   audio_opts      = NULL;
renatofilho@588
    24
static double   audio_rate      = 0.0;
renatofilho@600
    25
static gchar*   mux_name        = NULL;
renatofilho@600
    26
static gchar*   output_uri      = NULL;
renatofilho@586
    27
renatofilho@586
    28
renatofilho@586
    29
static void
renatofilho@586
    30
_mencoder_eos_cb (GMencoder *mencoder, gpointer data)
renatofilho@586
    31
{
renatofilho@586
    32
    g_print ("EOS\n");
renatofilho@586
    33
    g_main_loop_quit ((GMainLoop *) data);
renatofilho@586
    34
}
renatofilho@586
    35
renatofilho@586
    36
static void
renatofilho@586
    37
_mencoder_error_cb (GMencoder *mencoder, const gchar* msg, gpointer data)
renatofilho@586
    38
{
renatofilho@586
    39
    g_print ("Error: %s\n", msg);
renatofilho@634
    40
	g_mencoder_close_stream (mencoder);
renatofilho@586
    41
    g_main_loop_quit ((GMainLoop *) data);
renatofilho@586
    42
}
renatofilho@586
    43
renatofilho@586
    44
static gboolean
renatofilho@586
    45
_io_channel_cb (GIOChannel *ch,
renatofilho@586
    46
                GIOCondition condition,
renatofilho@586
    47
                gpointer data)
renatofilho@586
    48
{
renatofilho@586
    49
    GString *cmd = g_string_new ("");
renatofilho@586
    50
    g_io_channel_read_line_string (ch, cmd, NULL, NULL);
renatofilho@586
    51
renatofilho@586
    52
    if (strcmp (cmd->str, "PLAY\n") == 0) {
renatofilho@586
    53
        g_mencoder_play_stream (G_MENCODER (data));
renatofilho@586
    54
    } else if (strcmp (cmd->str, "PAUSE\n") == 0) {
renatofilho@586
    55
        g_mencoder_pause_stream (G_MENCODER (data));
renatofilho@586
    56
    } else if (strcmp (cmd->str, "STOP\n") == 0) {
renatofilho@586
    57
        g_mencoder_close_stream (G_MENCODER (data));
renatofilho@586
    58
    } else if (strcmp (cmd->str, "QUIT\n") == 0) {
renatofilho@586
    59
        g_mencoder_close_stream (G_MENCODER (data));
renatofilho@586
    60
        g_main_loop_quit (mainloop);
renatofilho@586
    61
    }
renatofilho@586
    62
    g_string_free (cmd, TRUE);
renatofilho@586
    63
    return TRUE;
renatofilho@586
    64
}
renatofilho@586
    65
renatofilho@586
    66
int 
renatofilho@586
    67
main (int argc, char** argv)
renatofilho@586
    68
{
renatofilho@600
    69
    GMencoder *coder = NULL;
renatofilho@586
    70
    GIOChannel *ch;
renatofilho@588
    71
    gchar **vopts;
renatofilho@588
    72
    gchar **aopts;
renatofilho@600
    73
    gchar **files;
renatofilho@600
    74
    gint i;
renatofilho@588
    75
renatofilho@588
    76
    GOptionContext *context;
renatofilho@588
    77
    static const GOptionEntry options []  = {
renatofilho@600
    78
        {"input-files",    'i', 0, G_OPTION_ARG_STRING,          &input_file,    "Input File", NULL},
renatofilho@588
    79
        {"video-encode",    0, 0, G_OPTION_ARG_STRING,          &video_encode,  "GstElementName for used to video encode", NULL},
renatofilho@588
    80
        {"video-opts",      0, 0, G_OPTION_ARG_STRING,          &video_opts,    "Properties to set on video element", NULL},
renatofilho@588
    81
        {"video-fps",       0, 0, G_OPTION_ARG_DOUBLE,          &video_fps,     "Video FPS", NULL},
renatofilho@588
    82
        {"video-rate",      0, 0, G_OPTION_ARG_INT,             &video_rate,    "Video rate", NULL},
renatofilho@588
    83
        {"video-width",     0, 0, G_OPTION_ARG_INT,             &video_width,   "Video width", NULL},
renatofilho@588
    84
        {"video-height",    0, 0, G_OPTION_ARG_INT,             &video_height,  "Video height", NULL},
renatofilho@588
    85
        {"audio-encode",    0, 0, G_OPTION_ARG_STRING,          &audio_encode,  "GstElementName for use to audio encode", NULL},
renatofilho@588
    86
        {"audio-opts",      0, 0, G_OPTION_ARG_STRING,          &audio_opts,    "Properties to set on audio element", NULL},
renatofilho@588
    87
        {"audio-rate",      0, 0, G_OPTION_ARG_INT,             &audio_rate,    "Audio rate", NULL},
renatofilho@600
    88
        {"mux-element",     0, 0, G_OPTION_ARG_STRING,          &mux_name,      "GstElementName for use to mux file", NULL},
renatofilho@600
    89
        {"output-uri",    'o', 0, G_OPTION_ARG_STRING,          &output_uri,    "Uri to output", NULL},
renatofilho@588
    90
        { NULL }
renatofilho@588
    91
    };
renatofilho@586
    92
renatofilho@586
    93
	g_type_init ();
renatofilho@588
    94
    g_thread_init (NULL);
renatofilho@600
    95
	mainloop = g_main_loop_new (NULL, FALSE);
renatofilho@588
    96
renatofilho@600
    97
	g_set_prgname ("gmemcoder");
renatofilho@588
    98
    context = g_option_context_new (NULL);
renatofilho@588
    99
    g_option_context_set_help_enabled (context, TRUE);
renatofilho@588
   100
    g_option_context_add_main_entries (context, options, NULL);
renatofilho@588
   101
    g_option_context_add_group (context, gst_init_get_option_group ());
renatofilho@588
   102
    g_option_context_parse (context, &argc, &argv, NULL);
renatofilho@588
   103
renatofilho@586
   104
	gst_init (&argc, &argv);
renatofilho@586
   105
renatofilho@600
   106
    if (output_uri == NULL) {
renatofilho@600
   107
        g_print ("You need specify output-uri.\nTry --help for more information.\n");
renatofilho@588
   108
        return 1; 
renatofilho@588
   109
    }
renatofilho@588
   110
renatofilho@588
   111
    if (input_file == NULL) {
renatofilho@588
   112
        g_print ("You need specify input file\nTry --help for more information.\n");
renatofilho@588
   113
    }
renatofilho@586
   114
renatofilho@586
   115
    coder = g_mencoder_new ();
renatofilho@586
   116
    ch = g_io_channel_unix_new (0);
renatofilho@586
   117
renatofilho@588
   118
    aopts = g_strsplit (audio_opts, ",", 0);
renatofilho@588
   119
    vopts = g_strsplit (video_opts, ",", 0);
renatofilho@588
   120
renatofilho@588
   121
    g_mencoder_setup_stream (coder, 
renatofilho@600
   122
            mux_name,
renatofilho@588
   123
            video_encode, vopts, video_fps, video_rate, video_width, video_height,
renatofilho@588
   124
            audio_encode, aopts, audio_rate, 
renatofilho@600
   125
            output_uri);
renatofilho@588
   126
renatofilho@600
   127
    files = g_strsplit (input_file, ",", 0);
renatofilho@600
   128
    for (i=0; i < g_strv_length (files); i++) {
renatofilho@600
   129
        if (!g_mencoder_append_uri (coder, files[i])) {
renatofilho@600
   130
            g_debug ("Invalid uri: %s", files[i]);
renatofilho@600
   131
        } 
renatofilho@600
   132
    }
renatofilho@600
   133
                
renatofilho@600
   134
    g_strfreev (files);
renatofilho@588
   135
    g_strfreev (aopts);
renatofilho@588
   136
    g_strfreev (vopts);
renatofilho@586
   137
renatofilho@600
   138
renatofilho@586
   139
    g_io_add_watch (ch, G_IO_IN, _io_channel_cb, coder);    
renatofilho@586
   140
renatofilho@586
   141
    g_signal_connect (G_OBJECT (coder),
renatofilho@586
   142
                        "eos",
renatofilho@586
   143
                        G_CALLBACK (_mencoder_eos_cb),
renatofilho@586
   144
                        mainloop);
renatofilho@586
   145
renatofilho@586
   146
    g_signal_connect (G_OBJECT (coder),
renatofilho@586
   147
                        "error",
renatofilho@586
   148
                        G_CALLBACK (_mencoder_error_cb),
renatofilho@586
   149
                        mainloop);
renatofilho@586
   150
renatofilho@600
   151
    g_mencoder_play_stream (coder);
renatofilho@600
   152
renatofilho@600
   153
    g_debug ("RUNNING..");
renatofilho@586
   154
	g_main_loop_run (mainloop);
renatofilho@634
   155
	g_debug ("DONE");
renatofilho@600
   156
    g_object_unref (coder);
renatofilho@600
   157
renatofilho@586
   158
	return 0;
renatofilho@586
   159
}