udev: Add tsched_buffer_size module argument

This makes it easier to configure the buffer size.
This commit is contained in:
Tanu Kaskinen 2013-02-16 17:29:58 +02:00
parent 9849a21587
commit 5619917207

View file

@ -36,6 +36,7 @@
#include <pulsecore/core-util.h> #include <pulsecore/core-util.h>
#include <pulsecore/namereg.h> #include <pulsecore/namereg.h>
#include <pulsecore/ratelimit.h> #include <pulsecore/ratelimit.h>
#include <pulsecore/strbuf.h>
#include "module-udev-detect-symdef.h" #include "module-udev-detect-symdef.h"
@ -45,6 +46,7 @@ PA_MODULE_VERSION(PACKAGE_VERSION);
PA_MODULE_LOAD_ONCE(TRUE); PA_MODULE_LOAD_ONCE(TRUE);
PA_MODULE_USAGE( PA_MODULE_USAGE(
"tsched=<enable system timer based scheduling mode?> " "tsched=<enable system timer based scheduling mode?> "
"tsched_buffer_size=<buffer size when using timer based scheduling> "
"fixed_latency_range=<disable latency range changes on underrun?> " "fixed_latency_range=<disable latency range changes on underrun?> "
"ignore_dB=<ignore dB information from the device?> " "ignore_dB=<ignore dB information from the device?> "
"deferred_volume=<syncronize sw and hw volume changes in IO-thread?> " "deferred_volume=<syncronize sw and hw volume changes in IO-thread?> "
@ -64,11 +66,14 @@ struct userdata {
pa_hashmap *devices; pa_hashmap *devices;
pa_bool_t use_tsched:1; pa_bool_t use_tsched:1;
bool tsched_buffer_size_valid:1;
pa_bool_t fixed_latency_range:1; pa_bool_t fixed_latency_range:1;
pa_bool_t ignore_dB:1; pa_bool_t ignore_dB:1;
pa_bool_t deferred_volume:1; pa_bool_t deferred_volume:1;
bool use_ucm:1; bool use_ucm:1;
uint32_t tsched_buffer_size;
struct udev* udev; struct udev* udev;
struct udev_monitor *monitor; struct udev_monitor *monitor;
pa_io_event *udev_io; pa_io_event *udev_io;
@ -79,6 +84,7 @@ struct userdata {
static const char* const valid_modargs[] = { static const char* const valid_modargs[] = {
"tsched", "tsched",
"tsched_buffer_size",
"fixed_latency_range", "fixed_latency_range",
"ignore_dB", "ignore_dB",
"deferred_volume", "deferred_volume",
@ -365,6 +371,7 @@ static void card_changed(struct userdata *u, struct udev_device *dev) {
const char *path; const char *path;
const char *t; const char *t;
char *n; char *n;
pa_strbuf *args_buf;
pa_assert(u); pa_assert(u);
pa_assert(dev); pa_assert(dev);
@ -391,26 +398,33 @@ static void card_changed(struct userdata *u, struct udev_device *dev) {
n = pa_namereg_make_valid_name(t); n = pa_namereg_make_valid_name(t);
d->card_name = pa_sprintf_malloc("alsa_card.%s", n); d->card_name = pa_sprintf_malloc("alsa_card.%s", n);
d->args = pa_sprintf_malloc("device_id=\"%s\" " args_buf = pa_strbuf_new();
"name=\"%s\" " pa_strbuf_printf(args_buf,
"card_name=\"%s\" " "device_id=\"%s\" "
"namereg_fail=false " "name=\"%s\" "
"tsched=%s " "card_name=\"%s\" "
"fixed_latency_range=%s " "namereg_fail=false "
"ignore_dB=%s " "tsched=%s "
"deferred_volume=%s " "fixed_latency_range=%s "
"use_ucm=%s " "ignore_dB=%s "
"card_properties=\"module-udev-detect.discovered=1\"", "deferred_volume=%s "
path_get_card_id(path), "use_ucm=%s "
n, "card_properties=\"module-udev-detect.discovered=1\"",
d->card_name, path_get_card_id(path),
pa_yes_no(u->use_tsched), n,
pa_yes_no(u->fixed_latency_range), d->card_name,
pa_yes_no(u->ignore_dB), pa_yes_no(u->use_tsched),
pa_yes_no(u->deferred_volume), pa_yes_no(u->fixed_latency_range),
pa_yes_no(u->use_ucm)); pa_yes_no(u->ignore_dB),
pa_yes_no(u->deferred_volume),
pa_yes_no(u->use_ucm));
pa_xfree(n); pa_xfree(n);
if (u->tsched_buffer_size_valid)
pa_strbuf_printf(args_buf, " tsched_buffer_size=%" PRIu32, u->tsched_buffer_size);
d->args = pa_strbuf_tostring_free(args_buf);
pa_hashmap_put(u->devices, d->path, d); pa_hashmap_put(u->devices, d->path, d);
verify_access(u, d); verify_access(u, d);
@ -695,6 +709,15 @@ int pa__init(pa_module *m) {
} }
u->use_tsched = use_tsched; u->use_tsched = use_tsched;
if (pa_modargs_get_value(ma, "tsched_buffer_size", NULL)) {
if (pa_modargs_get_value_u32(ma, "tsched_buffer_size", &u->tsched_buffer_size) < 0) {
pa_log("Failed to parse tsched_buffer_size= argument.");
goto fail;
}
u->tsched_buffer_size_valid = true;
}
if (pa_modargs_get_value_boolean(ma, "fixed_latency_range", &fixed_latency_range) < 0) { if (pa_modargs_get_value_boolean(ma, "fixed_latency_range", &fixed_latency_range) < 0) {
pa_log("Failed to parse fixed_latency_range= argument."); pa_log("Failed to parse fixed_latency_range= argument.");
goto fail; goto fail;