From: Ronald S. Bultje Date: Tue, 19 Aug 2003 05:43:55 +0000 (+0000) Subject: Add SIGUSR1/SIGUSR2 as play/stop signals. Also add these to the documentation. Fixes... X-Git-Tag: BRANCH-ERROR-ROOT~39 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b5f3c4eaf9616d2da551a4b4f6f06c6d4dc1ee83;p=platform%2Fupstream%2Fgstreamer.git Add SIGUSR1/SIGUSR2 as play/stop signals. Also add these to the documentation. Fixes #120065 Original commit message from CVS: Add SIGUSR1/SIGUSR2 as play/stop signals. Also add these to the documentation. Fixes #120065 --- diff --git a/tools/gst-launch.1.in b/tools/gst-launch.1.in index ab30320..4449b2d 100644 --- a/tools/gst-launch.1.in +++ b/tools/gst-launch.1.in @@ -192,6 +192,15 @@ Ranges are in this format: [ PROPERTY, PROPERTY ] .br Lists use this format: ( PROPERTY \fI[, PROPERTY ...]\fR ) +.SH "PIPELINE CONTROL" + +A pipeline can be controlled by signals. SIGUSR2 will stop the pipeline +(GST_STATE_NULL); SIGUSR1 will put it back to play (GST_STATE_PLAYING). +By default, the pipeline will start in the playing state. +.br +There are currently no signals defined to go into the ready or pause +(GST_STATE_READY and GST_STATE_PAUSED) state explicitely. + .SH "PIPELINE EXAMPLES" The examples below assume that you have the correct plug-ins available. diff --git a/tools/gst-launch.c b/tools/gst-launch.c index 41a6189..104199b 100644 --- a/tools/gst-launch.c +++ b/tools/gst-launch.c @@ -133,14 +133,16 @@ fault_handler_sighandler (int signum) { fault_restore (); - if (signum == SIGSEGV) { - g_print ("Caught SIGSEGV\n"); - } - else if (signum == SIGQUIT){ - g_print ("Caught SIGQUIT\n"); - } - else { - g_print ("signo: %d\n", signum); + switch (signum) { + case SIGSEGV: + g_print ("Caught SIGSEGV\n"); + break; + case SIGQUIT: + g_print ("Caught SIGQUIT\n"); + break; + default: + g_print ("signo: %d\n", signum); + break; } fault_spin(); @@ -153,16 +155,18 @@ fault_handler_sigaction (int signum, siginfo_t *si, void *misc) { fault_restore (); - if (si->si_signo == SIGSEGV) { - g_print ("Caught SIGSEGV accessing address %p\n", si->si_addr); - } - else if (si->si_signo == SIGQUIT){ - g_print ("Caught SIGQUIT\n"); - } - else { - g_print ("signo: %d\n", si->si_signo); - g_print ("errno: %d\n", si->si_errno); - g_print ("code: %d\n", si->si_code); + switch (si->si_signo) { + case SIGSEGV: + g_print ("Caught SIGSEGV accessing address %p\n", si->si_addr); + break; + case SIGQUIT: + g_print ("Caught SIGQUIT\n"); + break; + default: + g_print ("signo: %d\n", si->si_signo); + g_print ("errno: %d\n", si->si_errno); + g_print ("code: %d\n", si->si_code); + break; } fault_spin(); @@ -194,8 +198,8 @@ fault_restore (void) memset (&action, 0, sizeof (action)); action.sa_handler = SIG_DFL; - sigaction(SIGSEGV, &action, NULL); - sigaction(SIGQUIT, &action, NULL); + sigaction (SIGSEGV, &action, NULL); + sigaction (SIGQUIT, &action, NULL); } static void @@ -245,7 +249,33 @@ sigint_restore (void) memset (&action, 0, sizeof (action)); action.sa_handler = SIG_DFL; - sigaction(SIGINT, &action, NULL); + sigaction (SIGINT, &action, NULL); +} + +static void +play_handler (int signum) +{ + switch (signum) { + case SIGUSR1: + g_print ("Caught SIGUSR1 - Play request\n"); + gst_element_set_state (pipeline, GST_STATE_PLAYING); + break; + case SIGUSR2: + g_print ("Caught SIGUSR2 - Stop request\n"); + gst_element_set_state (pipeline, GST_STATE_NULL); + break; + } +} + +static void +play_signal_setup(void) +{ + struct sigaction action; + + memset (&action, 0, sizeof (action)); + action.sa_handler = play_handler; + sigaction (SIGUSR1, &action, NULL); + sigaction (SIGUSR2, &action, NULL); } int @@ -308,6 +338,7 @@ main(int argc, char *argv[]) fault_setup(); sigint_setup(); + play_signal_setup(); if (trace) { if (!gst_alloc_trace_available()) {