struct timeval restart_barrier;
};
+/* Describes one instance of a receiver-filter-writer chain. */
+struct slot_info {
+ /* Number of the audio format in this slot. */
+ int format;
+ /* The stream_start status item announced by para_server. */
+ struct timeval server_stream_start;
+ /* The offset status item announced by para_server. */
+ unsigned offset_seconds;
+ /* The seconds_total status item announced by para_server. */
+ unsigned seconds_total;
+ /* The receiver info associated with this slot. */
+ struct receiver_node *receiver_node;
+ /* The array of filter nodes. */
+ struct filter_node *fns;
+ /* The array of writers attached to the last filter. */
+ struct writer_node *wns;
+};
+
+/** Maximal number of simultaneous instances. */
+#define MAX_STREAM_SLOTS 5
+
+/** Iterate over all slots. */
+#define FOR_EACH_SLOT(_slot) for (_slot = 0; _slot < MAX_STREAM_SLOTS; _slot++)
+
/**
* para_audiod uses \p MAX_STREAM_SLOTS different slots, each of which may
* be associated with a receiver/filter/writer triple. This array holds all
return -E_UNSUPPORTED_AUDIO_FORMAT;
}
+/**
+ * Return the flags for the \a decoder_flags status item.
+ *
+ * Allocates a string which contains one octal digit per slot. Bit zero (value
+ * 1) is set if a receiver is active. Bit one (value 2) and bit three (value 4)
+ * have the analogous meaning for filter and writer, respectively.
+ *
+ * \return String that must be freed by the caller.
+ */
+__malloc char *audiod_get_decoder_flags(void)
+{
+ int i;
+ char flags[MAX_STREAM_SLOTS + 1];
+
+ FOR_EACH_SLOT(i) {
+ struct slot_info *s = &slot[i];
+ char flag = '0';
+ if (s->receiver_node)
+ flag += 1;
+ if (s->fns)
+ flag += 2;
+ if (s->wns)
+ flag += 4;
+ flags[i] = flag;
+ }
+ flags[MAX_STREAM_SLOTS] = '\0';
+ return para_strdup(flags);
+}
+
static int get_matching_audio_format_nums(const char *re)
{
int i, ret;
/** array of audio format names supported by para_audiod */
extern const char *audio_formats[];
-/** maximal number of simultaneous instances */
-#define MAX_STREAM_SLOTS 5
-
/**
* the possible modes of operation
*
const char *help;
};
-/**
- * Describes one instance of a receiver-filter-writer chain.
- *
- * \sa receiver_node, receiver, filter, filter_node, writer, writer_node,
- * writer_node_group.
- */
-struct slot_info {
- /** Number of the audio format in this slot. */
- int format;
- /** The stream_start status item announced by para_server. */
- struct timeval server_stream_start;
- /** The offset status item announced by para_server. */
- unsigned offset_seconds;
- /** The seconds_total status item announced by para_server. */
- unsigned seconds_total;
- /** The receiver info associated with this slot. */
- struct receiver_node *receiver_node;
- /** The array of filter nodes. */
- struct filter_node *fns;
- /** The array of writers attached to the last filter. */
- struct writer_node *wns;
-};
-
-extern struct slot_info slot[MAX_STREAM_SLOTS];
+__malloc char *audiod_get_decoder_flags(void);
extern struct audiod_args_info conf;
extern int audiod_status;
void stat_client_write_item(int item_num);
void clear_and_dump_items(void);
void close_stat_clients(void);
-
-/** iterate over all slots */
-#define FOR_EACH_SLOT(_slot) for (_slot = 0; _slot < MAX_STREAM_SLOTS; _slot++)
return para_strdup(status);
}
-__malloc static char *decoder_flags(void)
-{
- int i;
- char flags[MAX_STREAM_SLOTS + 1];
-
- FOR_EACH_SLOT(i) {
- struct slot_info *s = &slot[i];
- char flag = '0';
- if (s->receiver_node)
- flag += 1;
- if (s->fns)
- flag += 2;
- if (s->wns)
- flag += 4;
- flags[i] = flag;
- }
- flags[MAX_STREAM_SLOTS] = '\0';
- return para_strdup(flags);
-}
-
static int dump_commands(int fd)
{
char *buf = para_strdup(""), *tmp = NULL;
free(new);
old = stat_item_values[SI_DECODER_FLAGS];
- new = decoder_flags();
+ new = audiod_get_decoder_flags();
if (force || !old || strcmp(old, new)) {
free(old);
stat_item_values[SI_DECODER_FLAGS] = new;