/** 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;
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);
}
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;
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);