From fe838e619339649b050ef71715127fe6b8e872b6 Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Sun, 10 Jan 2010 19:52:19 +0100 Subject: [PATCH] grab: Implement -n option to specify the name of the btrn. --- audiod.cmd | 10 ++++++---- grab_client.c | 13 +++++++++++-- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/audiod.cmd b/audiod.cmd index a33b28f1..7ffe98e7 100644 --- a/audiod.cmd +++ b/audiod.cmd @@ -14,10 +14,10 @@ H: on -> standby -> off -> on N: grab D: grab the audio stream L: -U: -- grab [-m[{s|p|a}]] [-p=] [-o] +U: -- grab [-m[{s|p|a}]] [-p=] [-n=] [-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 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. --- diff --git a/grab_client.c b/grab_client.c index 2c95022e..2b8235b4 100644 --- a/grab_client.c +++ b/grab_client.c @@ -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) -- 2.39.5