// 200 or later belong to non us-ascii character set.
OPT_PERIOD_SIZE = 200,
OPT_BUFFER_SIZE,
+ OPT_WAITER_TYPE,
OPT_DISABLE_RESAMPLE,
OPT_DISABLE_CHANNELS,
OPT_DISABLE_FORMAT,
{"avail-min", 1, 0, 'A'},
{"start-delay", 1, 0, 'R'},
{"stop-delay", 1, 0, 'T'},
+ {"waiter-type", 1, 0, OPT_WAITER_TYPE},
// For plugins in alsa-lib.
{"disable-resample", 0, 0, OPT_DISABLE_RESAMPLE},
{"disable-channels", 0, 0, OPT_DISABLE_CHANNELS},
state->msec_for_start_threshold = arg_parse_decimal_num(optarg, &err);
else if (key == 'T')
state->msec_for_stop_threshold = arg_parse_decimal_num(optarg, &err);
+ else if (key == OPT_WAITER_TYPE)
+ state->waiter_type_literal = arg_duplicate_string(optarg, &err);
else if (key == OPT_DISABLE_RESAMPLE)
state->no_auto_resample = true;
else if (key == OPT_DISABLE_CHANNELS)
}
}
+ if (state->waiter_type_literal != NULL) {
+ if (state->test_nowait) {
+ fprintf(stderr,
+ "An option for waiter type should not be "
+ "used with nowait test option.\n");
+ return -EINVAL;
+ }
+ if (!state->nonblock && !state->mmap) {
+ fprintf(stderr,
+ "An option for waiter type should be used "
+ "with nonblock or mmap options.\n");
+ return -EINVAL;
+ }
+ state->waiter_type =
+ waiter_type_from_label(state->waiter_type_literal);
+ } else {
+ state->waiter_type = WAITER_TYPE_DEFAULT;
+ }
+
return err;
}
if ((state->nonblock || state->mmap) && !state->test_nowait)
state->use_waiter = true;
- state->waiter_type = WAITER_TYPE_DEFAULT;
err = snd_pcm_hw_params_any(state->handle, state->hw_params);
if (err < 0)
struct libasound_state *state = xfer->private_data;
free(state->node_literal);
+ free(state->waiter_type_literal);
state->node_literal = NULL;
+ state->waiter_type_literal = NULL;
if (state->hw_params)
snd_pcm_hw_params_free(state->hw_params);