summaryrefslogtreecommitdiffstats
path: root/src/modules
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2006-08-13 16:19:56 +0000
committerLennart Poettering <lennart@poettering.net>2006-08-13 16:19:56 +0000
commita621d9028548723d13df64df06a4f4538504e7a3 (patch)
treeb488b3488a11516b3c594cc2c805d693a5d6c938 /src/modules
parentb5cbea940ea70b8ed92fa3be6b742e8a14897337 (diff)
allow hooking into the process of creating playback streams. To implement this I modified the pa_sink_input_new() signature to take a pa_sink_input_new_data structure instead of direct arguments.
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@1237 fefdeb5f-60dc-0310-8127-8f9354f1896f
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/module-combine.c14
-rw-r--r--src/modules/module-sine.c12
-rw-r--r--src/modules/rtp/module-rtp-recv.c11
3 files changed, 31 insertions, 6 deletions
diff --git a/src/modules/module-combine.c b/src/modules/module-combine.c
index 9368aed8..008fe6e7 100644
--- a/src/modules/module-combine.c
+++ b/src/modules/module-combine.c
@@ -220,6 +220,8 @@ static pa_usec_t sink_get_latency_cb(pa_sink *s) {
static struct output *output_new(struct userdata *u, pa_sink *sink, int resample_method) {
struct output *o = NULL;
char t[256];
+ pa_sink_input_new_data data;
+
assert(u && sink && u->sink);
o = pa_xmalloc(sizeof(struct output));
@@ -237,7 +239,16 @@ static struct output *output_new(struct userdata *u, pa_sink *sink, int resample
sink->core->memblock_stat);
snprintf(t, sizeof(t), "%s: output #%u", u->sink->name, u->n_outputs+1);
- if (!(o->sink_input = pa_sink_input_new(sink, __FILE__, t, &u->sink->sample_spec, &u->sink->channel_map, NULL, 1, resample_method)))
+
+ pa_sink_input_new_data_init(&data);
+ data.sink = sink;
+ data.driver = __FILE__;
+ data.name = t;
+ pa_sink_input_new_data_set_sample_spec(&data, &u->sink->sample_spec);
+ pa_sink_input_new_data_set_channel_map(&data, &u->sink->channel_map);
+ data.module = u->module;
+
+ if (!(o->sink_input = pa_sink_input_new(u->core, &data, PA_SINK_INPUT_VARIABLE_RATE)))
goto fail;
o->sink_input->get_latency = sink_input_get_latency_cb;
@@ -245,7 +256,6 @@ static struct output *output_new(struct userdata *u, pa_sink *sink, int resample
o->sink_input->drop = sink_input_drop_cb;
o->sink_input->kill = sink_input_kill_cb;
o->sink_input->userdata = o;
- o->sink_input->owner = u->module;
PA_LLIST_PREPEND(struct output, u->outputs, o);
u->n_outputs++;
diff --git a/src/modules/module-sine.c b/src/modules/module-sine.c
index f4392b9a..5ceddce0 100644
--- a/src/modules/module-sine.c
+++ b/src/modules/module-sine.c
@@ -109,6 +109,7 @@ int pa__init(pa_core *c, pa_module*m) {
pa_sample_spec ss;
uint32_t frequency;
char t[256];
+ pa_sink_input_new_data data;
if (!(ma = pa_modargs_new(m->argument, valid_modargs))) {
pa_log(__FILE__": Failed to parse module arguments");
@@ -142,14 +143,21 @@ int pa__init(pa_core *c, pa_module*m) {
calc_sine(u->memblock->data, u->memblock->length, frequency);
snprintf(t, sizeof(t), "Sine Generator at %u Hz", frequency);
- if (!(u->sink_input = pa_sink_input_new(sink, __FILE__, t, &ss, NULL, NULL, 0, -1)))
+
+ pa_sink_input_new_data_init(&data);
+ data.sink = sink;
+ data.driver = __FILE__;
+ data.name = t;
+ pa_sink_input_new_data_set_sample_spec(&data, &ss);
+ data.module = m;
+
+ if (!(u->sink_input = pa_sink_input_new(c, &data, 0)))
goto fail;
u->sink_input->peek = sink_input_peek;
u->sink_input->drop = sink_input_drop;
u->sink_input->kill = sink_input_kill;
u->sink_input->userdata = u;
- u->sink_input->owner = m;
u->peek_index = 0;
diff --git a/src/modules/rtp/module-rtp-recv.c b/src/modules/rtp/module-rtp-recv.c
index 0359a43b..df6f8c11 100644
--- a/src/modules/rtp/module-rtp-recv.c
+++ b/src/modules/rtp/module-rtp-recv.c
@@ -265,6 +265,7 @@ static struct session *session_new(struct userdata *u, const pa_sdp_info *sdp_in
pa_sink *sink;
int fd = -1;
pa_memblock *silence;
+ pa_sink_input_new_data data;
if (u->n_sessions >= MAX_SESSIONS) {
pa_log(__FILE__": session limit reached.");
@@ -289,7 +290,14 @@ static struct session *session_new(struct userdata *u, const pa_sdp_info *sdp_in
sdp_info->session_name ? sdp_info->session_name : "",
sdp_info->session_name ? ")" : "");
- s->sink_input = pa_sink_input_new(sink, __FILE__, c, &sdp_info->sample_spec, NULL, NULL, 0, PA_RESAMPLER_INVALID);
+ pa_sink_input_new_data_init(&data);
+ data.sink = sink;
+ data.driver = __FILE__;
+ data.name = c;
+ data.module = u->module;
+ pa_sink_input_new_data_set_sample_spec(&data, &sdp_info->sample_spec);
+
+ s->sink_input = pa_sink_input_new(u->core, &data, 0);
pa_xfree(c);
if (!s->sink_input) {
@@ -298,7 +306,6 @@ static struct session *session_new(struct userdata *u, const pa_sdp_info *sdp_in
}
s->sink_input->userdata = s;
- s->sink_input->owner = u->module;
s->sink_input->peek = sink_input_peek;
s->sink_input->drop = sink_input_drop;