/** define the array of error lists needed by para_audiod */
INIT_AUDIOD_ERRLISTS;
/** define the array containing all supported audio formats */
-DEFINE_AUDIO_FORMAT_ARRAY;
+const char *audio_formats[] = {AUDIOD_AUDIO_FORMAT_ARRAY NULL};
/** defines how to handle one supported audio format */
struct audio_format_info {
{
int i;
struct timeval diff;
+ char *audio_format = stat_task->stat_item_values[SI_FORMAT];
- if (!stat_task->af_status || !stat_task->pcd)
+ if (!audio_format || !stat_task->pcd)
return 0;
- i = get_audio_format_num(stat_task->af_status);
+ i = get_audio_format_num(audio_format + strlen(
+ status_item_list[SI_FORMAT]) + 1);
if (i < 0)
return 0;
if (receiver_running(i))
case SI_STATUS:
stat_task->playing = strstr(line, "playing")? 1 : 0;
break;
- case SI_FORMAT:
- free(stat_task->af_status);
- stat_task->af_status = para_strdup(line + ilen + 1);
- break;
case SI_OFFSET:
stat_task->offset_seconds = atoi(line + ilen + 1);
break;
if (!sl->fc || !*sl->fc->out_loaded || sl->wng)
continue;
if (tv_diff(now, &initial_delay_barrier, &diff) > 0) {
- PARA_INFO_LOG("barrier: %lu:%lu, now: %lu, %lu\n",
- initial_delay_barrier.tv_sec,
- initial_delay_barrier.tv_usec,
- now->tv_sec, now->tv_usec);
open_writers(i);
s->timeout = min_delay;
continue;
for (i = conf.receiver_given - 1; i >= 0; i--) {
char *arg = conf.receiver_arg[i];
char *recv_arg = strchr(arg, ':');
- PARA_INFO_LOG("arg: %s\n", arg);
ret = -E_MISSING_COLON;
if (!recv_arg)
goto out;
static void status_post_select(__a_unused struct sched *s, struct task *t)
{
struct status_task *st = t->private_data;
+ unsigned bytes_left;
t->ret = 1;
- if (!st->pcd || !st->pcd->loaded
- || st->pcd->status != CL_RECEIVING)
+ if (!st->pcd || st->pcd->status != CL_RECEIVING)
return;
- st->pcd->loaded = for_each_line(st->pcd->buf, st->pcd->loaded,
+ bytes_left = for_each_line(st->pcd->buf, st->pcd->loaded,
&check_stat_line);
+ if (st->pcd->loaded != bytes_left) {
+ st->last_status_read = *now;
+ st->pcd->loaded = bytes_left;
+ } else {
+ struct timeval diff;
+ tv_diff(now, &st->last_status_read, &diff);
+ if (diff.tv_sec > 61)
+ close_stat_pipe();
+ }
}
static void init_status_task(struct status_task *st)