grab: Implement -n option to specify the name of the btrn.
authorAndre Noll <maan@systemlinux.org>
Sun, 10 Jan 2010 18:52:19 +0000 (19:52 +0100)
committerAndre Noll <maan@systemlinux.org>
Sun, 10 Jan 2010 18:52:19 +0000 (19:52 +0100)
audiod.cmd
grab_client.c

index a33b28f..7ffe98e 100644 (file)
@@ -14,10 +14,10 @@ H: on -> standby -> off -> on
 N: grab
 D: grab the audio stream
 L:
-U: -- grab [-m[{s|p|a}]] [-p=<parent>] [-o]
+U: -- grab [-m[{s|p|a}]] [-p=<parent>] [-n=<name>] [-o]
 H:
-H: grab ('splice') the audio stream at any position in the filter
-H: chain and send that data back to the client.
+H: grab ('splice') the audio stream at any position in the buffer
+H: tree and send that data back to the client.
 H:
 H: Options:
 H:
@@ -35,7 +35,9 @@ H:    ready for writing (i.e. would block). Sloppy mode ignores
 H:     the write, pedantic mode aborts and aggressive mode tries
 H:     to write anyway.
 H:
-H: -p  Grab output of this node of the buffer tree.
+H: -p  Grab output of node <parent> of the buffer tree.
+H:
+H: -n  Name of the new buffer tree node. Defaults to 'grab'.
 H:
 H: -o  One-shot mode: Stop grabbing if audio file changes.
 ---
index 2c95022..2b8235b 100644 (file)
@@ -45,6 +45,8 @@ enum grab_flags {
 struct grab_client {
        /* The value of the -p option. */
        char *parent;
+       /* The value of the -n option. */
+       char *name;
        /** The file descriptor to send the grabbed stream to. */
        int fd;
        /** See \ref grab_mode. */
@@ -121,6 +123,7 @@ static void gc_post_select(struct sched *s, struct task *t);
 static void gc_activate(struct grab_client *gc)
 {
        struct btr_node *root = audiod_get_btr_root(), *parent;
+       char *name = gc->name? gc->name : "grab";
 
        if (!root)
                return;
@@ -129,11 +132,12 @@ static void gc_activate(struct grab_client *gc)
                return;
        PARA_INFO_LOG("activating fd %d\n", gc->fd);
        list_move(&gc->node, &active_grab_client_list);
-       gc->btrn = btr_new_node("grab", parent, NULL, NULL);
+       gc->btrn = btr_new_node(name, parent, NULL, NULL);
        if (!gc->task.pre_select) {
                gc->task.pre_select = gc_pre_select;
                gc->task.post_select = gc_post_select;
-               sprintf(gc->task.status, "grab");
+               snprintf(gc->task.status, sizeof(gc->task.status) - 1, "%s", name);
+               gc->task.status[sizeof(gc->task.status) - 1] = '\0';
                register_task(&gc->task);
        }
 }
@@ -178,6 +182,7 @@ static int gc_close(struct grab_client *gc, int err)
                 */
                close(gc->fd);
                free(gc->parent);
+               free(gc->name);
                return 1;
        }
        gc_activate(gc);
@@ -247,6 +252,10 @@ static int gc_check_args(int argc, char **argv, struct grab_client *gc)
                        gc->parent = para_strdup(arg + 3);
                        continue;
                }
+               if (!strncmp(arg, "-n=", 3)) {
+                       gc->name = para_strdup(arg + 3);
+                       continue;
+               }
                return -E_GC_SYNTAX;
        }
        if (i != argc)