- int i;
-
- if (audiod_status != AUDIOD_ON)
- kill_all_decoders();
- else if (playing)
- start_current_receiver();
- check_timeouts();
- FOR_EACH_SLOT(i) {
- struct receiver_node *rn;
-
- close_decoder_if_idle(i);
- if (slot[i].format < 0)
- continue;
- rn = slot[i].receiver_node;
- if (rn && rn->loaded && !slot[i].wng) {
- PARA_INFO_LOG("no writer in slot %d\n", i);
- start_stream_writer(i, &s->now);
- }
- }
-}
-
-static void audiod_post_select(struct sched *s, __a_unused struct task *t)
-{
- int i;
-
- FOR_EACH_SLOT(i) {
- struct receiver_node *rn = slot[i].receiver_node;
-
- if (rn && rn->loaded)
- slot[i].rtime = s->now;
- }
-}
-
-static void init_audiod_task(struct audiod_task *at)
-{
- at->task.pre_select = audiod_pre_select;
- at->task.post_select = audiod_post_select;
- at->task.private_data = at;
- at->task.flags = 0;
- sprintf(at->task.status, "audiod task");
-}
-
-static int parse_stream_command(const char *txt, char **cmd)
-{
- char *p = strchr(txt, ':');
- int i;
-
- if (!p)
- return -E_MISSING_COLON;
- p++;
- FOR_EACH_AUDIO_FORMAT(i) {
- if (strncmp(txt, audio_formats[i], strlen(audio_formats[i])))
- continue;
- *cmd = p;
- return i;
- }
- return -E_UNSUPPORTED_AUDIO_FORMAT;
-}
-
-static int add_filter(int format, char *cmdline)
-{
- struct audio_format_info *a = &afi[format];
- int filter_num, nf = a->num_filters;
-
- filter_num = check_filter_arg(cmdline, &a->filter_conf[nf]);
- if (filter_num < 0)
- return filter_num;
- a->filters[nf] = &filters[filter_num];
- a->num_filters++;
- PARA_INFO_LOG("%s filter %d: %s\n", audio_formats[format], nf + 1,
- a->filters[nf]->name);
- return filter_num;
-}
-
-static int setup_default_filters(void)
-{
- int i, ret = 1;
-
- FOR_EACH_AUDIO_FORMAT(i) {
- struct audio_format_info *a = &afi[i];
- char *tmp;
- int j;
- if (a->num_filters)
- continue;
- /* add "dec" to audio format name */
- tmp = make_message("%sdec", audio_formats[i]);
- for (j = 0; filters[j].name; j++)
- if (!strcmp(tmp, filters[j].name))
- break;
- free(tmp);
- ret = -E_UNSUPPORTED_FILTER;
- if (!filters[j].name)
- goto out;
- tmp = para_strdup(filters[j].name);
- ret = add_filter(i, tmp);
- free(tmp);
- if (ret < 0)
- goto out;
- PARA_INFO_LOG("%s -> default filter: %s\n", audio_formats[i],
- filters[j].name);
- ret = add_filter(i, "wav");
- if (ret < 0)
- goto out;
- PARA_INFO_LOG("%s -> default filter: wav\n", audio_formats[i]);
- }
-out:
- return ret;
-}
-
-static int init_stream_io(void)
-{
- int i, ret, receiver_num, nf, nw;