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:
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.
---
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. */
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;
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);
}
}
*/
close(gc->fd);
free(gc->parent);
+ free(gc->name);
return 1;
}
gc_activate(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)