X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=audiod_command.c;h=27ef63caea22f9af45d9a951a5df39d1cb078210;hp=855e5cea102e51076b50ad345d014096d9c08e4a;hb=dded41e5bed40cca8876e1056351cc1dbab309d0;hpb=84f3cda92d0fb3d072b1a2d9bf8c2156c18d6398 diff --git a/audiod_command.c b/audiod_command.c index 855e5cea..27ef63ca 100644 --- a/audiod_command.c +++ b/audiod_command.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2007 Andre Noll + * Copyright (C) 2005-2008 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -14,6 +14,7 @@ #include "list.h" #include "close_on_fork.h" #include "sched.h" +#include "ggo.h" #include "filter.h" #include "grab_client.cmdline.h" #include "grab_client.h" @@ -26,6 +27,9 @@ #include "fd.h" #include "audiod_command_list.h" +extern char *stat_item_values[NUM_STAT_ITEMS]; + + /** iterate over the array of all audiod commands */ #define FOR_EACH_COMMAND(c) for (c = 0; audiod_cmds[c].name; c++) @@ -35,55 +39,6 @@ static int client_write(int fd, const char *buf) return write(fd, buf, len) != len? -E_CLIENT_WRITE: 1; } -static char *get_time_string(struct timeval *newest_stime) -{ - struct timeval diff, adj_stream_start, tmp; - int total = 0, use_server_time = 1, - length_seconds = stat_task->length_seconds; - - if (!stat_task->playing) { - if (length_seconds) - return NULL; - return make_message("%s:\n", status_item_list[SI_PLAY_TIME]); - } - if (audiod_status == AUDIOD_OFF) - goto out; - if (stat_task->sa_time_diff_sign > 0) - tv_diff(&stat_task->server_stream_start, &stat_task->sa_time_diff, - &adj_stream_start); - else - tv_add(&stat_task->server_stream_start, &stat_task->sa_time_diff, - &adj_stream_start); - tmp = adj_stream_start; - if (newest_stime && audiod_status == AUDIOD_ON) { - tv_diff(newest_stime, &adj_stream_start, &diff); - if (tv2ms(&diff) < 5000) { - tmp = *newest_stime; - use_server_time = 0; - } - } - tv_diff(now, &tmp, &diff); - total = diff.tv_sec + stat_task->offset_seconds; - if (total > length_seconds) - total = length_seconds; - if (total < 0) - total = 0; -out: - return make_message( - "%s: %s%d:%02d [%d:%02d] (%d%%/%d:%02d)\n", - status_item_list[SI_PLAY_TIME], - use_server_time? "~" : "", - total / 60, - total % 60, - (length_seconds - total) / 60, - (length_seconds - total) % 60, - length_seconds? (total * 100 + length_seconds / 2) / - length_seconds : 0, - length_seconds / 60, - length_seconds % 60 - ); -} - __malloc static char *audiod_status_string(void) { const char *status = (audiod_status == AUDIOD_ON)? @@ -263,7 +218,7 @@ int com_stat(int fd, __a_unused int argc, __a_unused char **argv) char *tmp, *v; if (!((1 << i) & mask)) continue; - v = stat_task->stat_item_values[i]; + v = stat_item_values[i]; tmp = make_message("%s%s%s", buf? buf: "", v? v : "", v? "\n" : ""); free(buf); @@ -279,8 +234,7 @@ out: static struct filter_node *find_filter_node(int slot_num, int format, int filternum) { - struct filter_node *fn; - int i, j; + int i; FOR_EACH_SLOT(i) { struct slot_info *s = &slot[i]; @@ -290,14 +244,10 @@ static struct filter_node *find_filter_node(int slot_num, int format, int filter continue; if (format >= 0 && s->format != format) continue; - if (num_filters(i) < filternum) + if (num_filters(i) <= filternum) continue; /* success */ - j = 1; - list_for_each_entry(fn, &s->fc->filters, node) - if (filternum <= 0 || j++ == filternum) - break; - return fn; + return s->fc->filter_nodes + filternum; } return NULL; } @@ -461,7 +411,7 @@ out: free(buf); free(argv); if (clifd > 0 && ret < 0 && ret != -E_CLIENT_WRITE) { - char *tmp = make_message("%s\n", PARA_STRERROR(-ret)); + char *tmp = make_message("%s\n", para_strerror(-ret)); client_write(clifd, tmp); free(tmp); close(clifd); @@ -476,44 +426,44 @@ void audiod_status_dump(void) struct timeval *t = wstime(); char *old, *new, *tmp; - old = stat_task->stat_item_values[SI_PLAY_TIME]; + old = stat_item_values[SI_PLAY_TIME]; new = get_time_string(t); if (new) { if (!old || strcmp(old, new)) { free(old); stat_client_write(new, SI_PLAY_TIME); - stat_task->stat_item_values[SI_PLAY_TIME] = new; + stat_item_values[SI_PLAY_TIME] = new; } else free(new); } new = uptime_str(); - old = stat_task->stat_item_values[SI_AUDIOD_UPTIME]; + old = stat_item_values[SI_AUDIOD_UPTIME]; if (!old || strcmp(old, new)) { free(old); tmp = make_message("%s: %s\n", status_item_list[SI_AUDIOD_UPTIME], new); stat_client_write(tmp, SI_AUDIOD_UPTIME); free(tmp); - stat_task->stat_item_values[SI_AUDIOD_UPTIME] = new; + stat_item_values[SI_AUDIOD_UPTIME] = new; } else free(new); - old = stat_task->stat_item_values[SI_AUDIOD_STATUS]; + old = stat_item_values[SI_AUDIOD_STATUS]; new = audiod_status_string(); if (!old || strcmp(old, new)) { free(old); stat_client_write(new, SI_AUDIOD_STATUS); - stat_task->stat_item_values[SI_AUDIOD_STATUS] = new; + stat_item_values[SI_AUDIOD_STATUS] = new; } else free(new); - old = stat_task->stat_item_values[SI_DECODER_FLAGS]; + old = stat_item_values[SI_DECODER_FLAGS]; new = decoder_flags(); if (!old || strcmp(old, new)) { free(old); stat_client_write(new, SI_DECODER_FLAGS); - stat_task->stat_item_values[SI_DECODER_FLAGS] = new; + stat_item_values[SI_DECODER_FLAGS] = new; } else free(new); } @@ -532,7 +482,7 @@ void dump_empty_status(void) char *tmp = make_message("%s:\n", status_item_list[i]); stat_client_write(tmp, i); free(tmp); - free(stat_task->stat_item_values[i]); - stat_task->stat_item_values[i] = NULL; + free(stat_item_values[i]); + stat_item_values[i] = NULL; } }