X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=write.c;h=d2169f26c9ed499c300c03ca01a81b0c9f1963db;hb=009e80ae25df7a247a263b5b8e2259c9bdfe20ce;hp=416408a1f4cfe606d858ea833f4531225c3d90db;hpb=ffb2eaa90429f6d5c3d369509efcdf91c5463dad;p=paraslash.git diff --git a/write.c b/write.c index 416408a1..d2169f26 100644 --- a/write.c +++ b/write.c @@ -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);