#include "sink-input.h"
#include "sample-util.h"
+#include "xmalloc.h"
+#include "subscribe.h"
#define CONVERT_BUFFER_LENGTH 4096
if (!(resampler = pa_resampler_new(spec, &s->sample_spec)))
return NULL;
- i = malloc(sizeof(struct pa_sink_input));
- assert(i);
- i->name = name ? strdup(name) : NULL;
+ i = pa_xmalloc(sizeof(struct pa_sink_input));
+ i->name = pa_xstrdup(name);
i->client = NULL;
i->owner = NULL;
i->sink = s;
pa_sample_snprint(st, sizeof(st), spec);
fprintf(stderr, "sink-input: created %u \"%s\" on %u with sample spec \"%s\"\n", i->index, i->name, s->index, st);
+
+ pa_subscription_post(s->core, PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_NEW, i->index);
return i;
}
pa_memblock_unref(i->resampled_chunk.memblock);
if (i->resampler)
pa_resampler_free(i->resampler);
+
+ pa_subscription_post(i->sink->core, PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_REMOVE, i->index);
- free(i->name);
- free(i);
+ pa_xfree(i->name);
+ pa_xfree(i);
}
void pa_sink_input_kill(struct pa_sink_input*i) {
i->resampled_chunk.index = i->resampled_chunk.length = 0;
}
}
+
+void pa_sink_input_set_volume(struct pa_sink_input *i, pa_volume_t volume) {
+ assert(i && i->sink && i->sink->core);
+
+ if (i->volume != volume) {
+ i->volume = volume;
+ pa_subscription_post(i->sink->core, PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_CHANGE, i->index);
+ }
+}