gmyth-stream/gmemcoder/src/main.c
author renatofilho
Mon Apr 23 18:50:32 2007 +0100 (2007-04-23)
branchtrunk
changeset 586 bd0ad44171e7
child 588 3219eb5401c0
permissions -rw-r--r--
[svn r592] app implementation
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@586
     9
#include "gmemcoder.h"
renatofilho@586
    10
renatofilho@586
    11
//#define FILE_OUT  1
renatofilho@586
    12
renatofilho@586
    13
static GMainLoop *mainloop = NULL;
renatofilho@586
    14
renatofilho@586
    15
static void
renatofilho@586
    16
_mencoder_ready_cb (GMencoder *mencoder, gpointer data)
renatofilho@586
    17
{
renatofilho@586
    18
    g_mencoder_play_stream (mencoder);
renatofilho@586
    19
}
renatofilho@586
    20
renatofilho@586
    21
static void
renatofilho@586
    22
_mencoder_eos_cb (GMencoder *mencoder, gpointer data)
renatofilho@586
    23
{
renatofilho@586
    24
    g_print ("EOS\n");
renatofilho@586
    25
    g_main_loop_quit ((GMainLoop *) data);
renatofilho@586
    26
}
renatofilho@586
    27
renatofilho@586
    28
static void
renatofilho@586
    29
_mencoder_error_cb (GMencoder *mencoder, const gchar* msg, gpointer data)
renatofilho@586
    30
{
renatofilho@586
    31
    g_print ("Error: %s\n", msg);
renatofilho@586
    32
    g_main_loop_quit ((GMainLoop *) data);
renatofilho@586
    33
}
renatofilho@586
    34
renatofilho@586
    35
static gboolean
renatofilho@586
    36
_io_channel_cb (GIOChannel *ch,
renatofilho@586
    37
                GIOCondition condition,
renatofilho@586
    38
                gpointer data)
renatofilho@586
    39
{
renatofilho@586
    40
    GString *cmd = g_string_new ("");
renatofilho@586
    41
    g_io_channel_read_line_string (ch, cmd, NULL, NULL);
renatofilho@586
    42
renatofilho@586
    43
    if (strcmp (cmd->str, "PLAY\n") == 0) {
renatofilho@586
    44
        g_mencoder_play_stream (G_MENCODER (data));
renatofilho@586
    45
    } else if (strcmp (cmd->str, "PAUSE\n") == 0) {
renatofilho@586
    46
        g_mencoder_pause_stream (G_MENCODER (data));
renatofilho@586
    47
    } else if (strcmp (cmd->str, "STOP\n") == 0) {
renatofilho@586
    48
        g_mencoder_close_stream (G_MENCODER (data));
renatofilho@586
    49
    } else if (strcmp (cmd->str, "QUIT\n") == 0) {
renatofilho@586
    50
        g_mencoder_close_stream (G_MENCODER (data));
renatofilho@586
    51
        g_main_loop_quit (mainloop);
renatofilho@586
    52
    }
renatofilho@586
    53
    g_string_free (cmd, TRUE);
renatofilho@586
    54
    return TRUE;
renatofilho@586
    55
}
renatofilho@586
    56
renatofilho@586
    57
int 
renatofilho@586
    58
main (int argc, char** argv)
renatofilho@586
    59
{
renatofilho@586
    60
    GMencoder *coder;
renatofilho@586
    61
    GIOChannel *ch;
renatofilho@586
    62
renatofilho@586
    63
	g_type_init ();
renatofilho@586
    64
	gst_init (&argc, &argv);
renatofilho@586
    65
renatofilho@586
    66
	g_set_prgname ("gmemcoder");
renatofilho@586
    67
renatofilho@586
    68
    coder = g_mencoder_new ();
renatofilho@586
    69
    ch = g_io_channel_unix_new (0);
renatofilho@586
    70
renatofilho@586
    71
#ifdef FILE_OUT
renatofilho@586
    72
    int fd = open (argv[2], O_WRONLY | O_CREAT | O_TRUNC);
renatofilho@586
    73
    g_debug ("FD %d", fd);
renatofilho@586
    74
    g_mencoder_setup_stream (coder, argv[1], 320, 288, fd);
renatofilho@586
    75
#else
renatofilho@586
    76
    g_mencoder_setup_stream (coder, argv[1], 320, 288, atoi (argv[2]));
renatofilho@586
    77
#endif
renatofilho@586
    78
renatofilho@586
    79
	mainloop = g_main_loop_new (NULL, FALSE);
renatofilho@586
    80
    g_io_add_watch (ch, G_IO_IN, _io_channel_cb, coder);    
renatofilho@586
    81
renatofilho@586
    82
renatofilho@586
    83
    g_signal_connect (G_OBJECT (coder),
renatofilho@586
    84
                        "ready",
renatofilho@586
    85
                        G_CALLBACK (_mencoder_ready_cb),
renatofilho@586
    86
                        NULL);
renatofilho@586
    87
renatofilho@586
    88
    g_signal_connect (G_OBJECT (coder),
renatofilho@586
    89
                        "eos",
renatofilho@586
    90
                        G_CALLBACK (_mencoder_eos_cb),
renatofilho@586
    91
                        mainloop);
renatofilho@586
    92
renatofilho@586
    93
    g_signal_connect (G_OBJECT (coder),
renatofilho@586
    94
                        "error",
renatofilho@586
    95
                        G_CALLBACK (_mencoder_error_cb),
renatofilho@586
    96
                        mainloop);
renatofilho@586
    97
renatofilho@586
    98
	g_main_loop_run (mainloop);
renatofilho@586
    99
renatofilho@586
   100
#if FILE_OUT
renatofilho@586
   101
    close (fd);
renatofilho@586
   102
#endif
renatofilho@586
   103
	
renatofilho@586
   104
	return 0;
renatofilho@586
   105
}