From 5ab451760281b344bfa6e495ab1aea7d80323c3c Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Sun, 4 Jan 2015 04:39:15 +0000 Subject: [PATCH] audiod: Move get_play_time_slot_num() to audiod.c. audiod_status_dump() sends the play time string that corresponds to the current slot to all connected stat clients. It first calls the get_play_time_slot_num() helper to obtain the slot number, then calls get_time_string(slot_num). Currently the helper function is part of audiod_command.c, hence we expose the slot_info structure to audiod_command.c. Moving the helper from audiod_command.c to audiod.c is a first step to make this structure local to audiod.c. It also allows to remove the slot_num parameter from get_time_string(). --- audiod.c | 37 +++++++++++++++++++++++++++---------- audiod.h | 2 +- audiod_command.c | 23 +---------------------- 3 files changed, 29 insertions(+), 33 deletions(-) diff --git a/audiod.c b/audiod.c index 8f246ba5..e73d1413 100644 --- a/audiod.c +++ b/audiod.c @@ -214,28 +214,44 @@ static int get_matching_audio_format_nums(const char *re) return ret; } +static int get_play_time_slot_num(void) +{ + int i, oldest_slot = -1; + struct timeval oldest_wstime = {0, 0}; + + FOR_EACH_SLOT(i) { + struct slot_info *s = &slot[i]; + struct timeval wstime; + if (!s->wns || !s->wns[0].btrn) + continue; + btr_get_node_start(s->wns[0].btrn, &wstime); + if (oldest_slot >= 0 && tv_diff(&wstime, &oldest_wstime, NULL) > 0) + continue; + oldest_wstime = wstime; + oldest_slot = i; + } + return oldest_slot; +} + /** - * Compute the play time based on information of the given slot. - * - * \param slot_num The slot number (negative means: no slot). + * Compute the play time based on information of the current slot. * * This computes a string of the form "0:07 [3:33] (3%/3:40)" using information * from the status items received from para_server and the start time of the - * (first) writer of the given slot. + * (first) writer of the current slot. * * It has to take into account that the stream was probably not started at * the beginning of the file, that the clock between the server and the client * host may differ and that playback of the stream was delayed, e.g. because - * the prebuffer filter is used in the filter configuration of the given slot. + * the prebuffer filter is used in the filter configuration. * - * If no writer is active in the given slot, or \a slot_num is negative - * (indicating that para_audiod runs in standby mode), an approximation based - * only on the status items is computed and the returned string is prefixed - * with "~". + * If no writer is active, for example because para_audiod runs in standby + * mode, an approximation based only on the status items is computed and the + * returned string is prefixed with "~". * * \return A string that must be freed by the caller. */ -char *get_time_string(int slot_num) +char *get_time_string(void) { int ret, seconds = 0, length; struct timeval *tmp, sum, sss, /* server stream start */ @@ -243,6 +259,7 @@ char *get_time_string(int slot_num) wstime, /* writer start time */ wtime, /* now - writer start */ rskip; /* receiver start - sss */ + int slot_num = get_play_time_slot_num(); struct slot_info *s = slot_num < 0? NULL : &slot[slot_num]; char *msg; diff --git a/audiod.h b/audiod.h index c86b6659..7fc9eb14 100644 --- a/audiod.h +++ b/audiod.h @@ -68,7 +68,7 @@ extern int audiod_status; int handle_connect(int accept_fd, fd_set *rfds); void audiod_status_dump(bool force); -char *get_time_string(int slot_num); +char *get_time_string(void); struct btr_node *audiod_get_btr_root(void); void stat_client_write_item(int item_num); diff --git a/audiod_command.c b/audiod_command.c index 7e68d2d2..790c0102 100644 --- a/audiod_command.c +++ b/audiod_command.c @@ -216,26 +216,6 @@ __malloc static char *audiod_status_string(void) return para_strdup(status); } -static int get_play_time_slot_num(void) -{ - int i, oldest_slot = -1; - struct timeval oldest_wstime = {0, 0}; - - FOR_EACH_SLOT(i) { - struct slot_info *s = &slot[i]; - struct timeval wstime; - if (!s->wns || !s->wns[0].btrn) - continue; - btr_get_node_start(s->wns[0].btrn, &wstime); - if (oldest_slot >= 0 && tv_diff(&wstime, &oldest_wstime, NULL) > 0) - continue; - oldest_wstime = wstime; - oldest_slot = i; - } - //PARA_CRIT_LOG("oldest slot: %d\n", oldest_slot); - return oldest_slot; -} - __malloc static char *decoder_flags(void) { int i; @@ -513,11 +493,10 @@ out: */ void audiod_status_dump(bool force) { - int slot_num = get_play_time_slot_num(); char *old, *new; old = stat_item_values[SI_PLAY_TIME]; - new = get_time_string(slot_num); + new = get_time_string(); if (new) { if (force || !old || strcmp(old, new)) { free(old); -- 2.39.2