From 0d37443245a99388afa85e6198bde567504dd16d Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Sun, 4 Jan 2015 04:55:43 +0000 Subject: [PATCH] audiod: Make struct slot_info local to audiod.c. Thanks to the previous commit there is only one user of struct slot_info left in audiod_command.c: decoder_flags(). Moving this function to audiod.c allows to make the structure private to audiod.c, along with the slot array and the MAX_STREAM_SLOTS and FOR_EACH_SLOT macros. Since audiod_command still needs the decoder flags for the stat command, the function is made public and renamed to audiod_get_decoder_flags(). --- audiod.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++ audiod.h | 31 +--------------------------- audiod_command.c | 22 +------------------- 3 files changed, 55 insertions(+), 51 deletions(-) diff --git a/audiod.c b/audiod.c index e73d1413..1f226265 100644 --- a/audiod.c +++ b/audiod.c @@ -68,6 +68,30 @@ struct audio_format_info { 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 @@ -198,6 +222,35 @@ static int get_audio_format_num(const char *name) 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; diff --git a/audiod.h b/audiod.h index 7fc9eb14..94288eec 100644 --- a/audiod.h +++ b/audiod.h @@ -13,9 +13,6 @@ enum {AUDIOD_AUDIO_FORMATS_ENUM}; /** 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 * @@ -39,30 +36,7 @@ struct audiod_command { 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; @@ -74,6 +48,3 @@ struct btr_node *audiod_get_btr_root(void); 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++) diff --git a/audiod_command.c b/audiod_command.c index 790c0102..b847e5aa 100644 --- a/audiod_command.c +++ b/audiod_command.c @@ -216,26 +216,6 @@ __malloc static char *audiod_status_string(void) 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; @@ -525,7 +505,7 @@ void audiod_status_dump(bool force) 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; -- 2.39.5