X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=write.c;h=d2169f26c9ed499c300c03ca01a81b0c9f1963db;hp=bf178c47ef1c7ffb0dcfcf80fd465516da6a72b9;hb=009e80ae25df7a247a263b5b8e2259c9bdfe20ce;hpb=59df964251d4e6b71b4ce6d02fdbb6e11643acab diff --git a/write.c b/write.c index bf178c47..d2169f26 100644 --- a/write.c +++ b/write.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2009 Andre Noll + * Copyright (C) 2005-2010 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -37,7 +37,7 @@ struct check_wav_task { /** Number of channels specified in wav header given by \a buf. */ unsigned channels; /** Sample rate specified in wav header given by \a buf. */ - unsigned samplerate; + unsigned sample_rate; /** The task structure used by the scheduler. */ struct task task; struct btr_node *btrn; @@ -67,23 +67,22 @@ static void check_wav_pre_select(struct sched *s, struct task *t) sched_min_delay(s); } +#define HANDLE_EXEC(_cmd) \ + if (!strcmp(cmd, #_cmd)) { \ + if (!conf._cmd ## _given && cwt->state == CWS_NEED_HEADER) \ + return -E_BTR_NAVAIL; \ + *result = make_message("%d", cwt->state == CWS_NO_HEADER? \ + conf._cmd ## _arg : cwt->_cmd); \ + return 1; \ + } \ + + static int check_wav_exec(struct btr_node *btrn, const char *cmd, char **result) { struct check_wav_task *cwt = btr_context(btrn); - - if (!strcmp(cmd, "samplerate")) { - if (cwt->state != CWS_HAVE_HEADER) - return -E_BTR_NAVAIL; - *result = make_message("%d", cwt->samplerate); - return 1; - } - if (!strcmp(cmd, "channels")) { - if (cwt->state != CWS_HAVE_HEADER) - return -E_BTR_NAVAIL; - *result = make_message("%d", cwt->channels); - return 1; - } + HANDLE_EXEC(sample_rate); + HANDLE_EXEC(channels); return -ERRNO_TO_PARA_ERROR(ENOTSUP); } @@ -107,7 +106,7 @@ static void check_wav_post_select(__a_unused struct sched *s, struct task *t) goto pushdown; cwt->min_iqs = 0; cwt->channels = 2; - cwt->samplerate = 44100; + cwt->sample_rate = 44100; if (a[0] != 'R' || a[1] != 'I' || a[2] != 'F' || a[3] != 'F') { PARA_NOTICE_LOG("wav header not found\n"); cwt->state = CWS_NO_HEADER; @@ -118,8 +117,8 @@ static void check_wav_post_select(__a_unused struct sched *s, struct task *t) cwt->state = CWS_HAVE_HEADER; sprintf(t->status, "check wav: have header"); cwt->channels = (unsigned) a[22]; - cwt->samplerate = a[24] + (a[25] << 8) + (a[26] << 16) + (a[27] << 24); - PARA_INFO_LOG("channels: %d, sample rate: %d\n", cwt->channels, cwt->samplerate); + cwt->sample_rate = a[24] + (a[25] << 8) + (a[26] << 16) + (a[27] << 24); + PARA_INFO_LOG("channels: %d, sample rate: %d\n", cwt->channels, cwt->sample_rate); btr_consume(btrn, WAV_HEADER_LEN); pushdown: btr_pushdown(btrn);