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 */
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;
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;
*/
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);