The opus audio format handler.
[paraslash.git] / recv_common.c
index 3fe2a139e0b6a6b270dce5e548e18d76d63ae1aa..f899c301e4205070403e885325a1e98f8d0b69ca 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2013 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -7,17 +7,14 @@
 /** \file recv_common.c common functions of para_recv and para_audiod */
 
 #include <regex.h>
-#include <stdbool.h>
 
 #include "para.h"
 #include "list.h"
 #include "sched.h"
 #include "ggo.h"
+#include "buffer_tree.h"
 #include "recv.h"
 #include "string.h"
-#include "buffer_tree.h"
-
-DEFINE_RECEIVER_ARRAY;
 
 /**
  * Call the init function of each paraslash receiver.
@@ -34,20 +31,13 @@ static void *parse_receiver_args(int receiver_num, char *options)
 {
        struct receiver *r = &receivers[receiver_num];
        char **argv;
-       int argc, i;
+       int argc;
        void *conf;
 
-
-       PARA_DEBUG_LOG("%s, options: %s\n", r->name,
-               options? options : "(none)");
        if (options) {
-               PARA_DEBUG_LOG("options: %s\n", options);
-               argc = create_argv(options, " \t", &argv);
+               argc = create_shifted_argv(options, " \t", &argv);
                if (argc < 0)
                        return NULL;
-               for (i = argc - 1; i >= 0; i--)
-                       argv[i + 1] = argv[i];
-               argc++;
        } else {
                argc = 1;
                argv = para_malloc(2 * sizeof(char*));
@@ -55,9 +45,7 @@ static void *parse_receiver_args(int receiver_num, char *options)
        }
        argv[0] = make_message("%s_recv", r->name);
        conf = r->parse_config(argc, argv);
-       for (i = 0; i < argc; i++)
-               free(argv[i]);
-       free(argv);
+       free_argv(argv);
        return conf;
 }
 
@@ -123,6 +111,19 @@ void print_receiver_helps(int detailed)
        }
 }
 
+/**
+ * Simple pre-select hook, used by all receivers.
+ *
+ * \param s Scheduler info.
+ * \param t Determines the receiver node.
+ *
+ * This requests a minimal delay from the scheduler if the status of the buffer
+ * tree node indicates an error/eof condition. No file descriptors are added to
+ * the fd sets of \a s.
+ *
+ * \return The status of the btr node of the receiver node, i.e. the return
+ * value of the underlying call to \ref btr_node_status().
+ */
 int generic_recv_pre_select(struct sched *s, struct task *t)
 {
        struct receiver_node *rn = container_of(t, struct receiver_node, task);