mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-04 13:29:59 -05:00
main part of the native protocol
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@31 fefdeb5f-60dc-0310-8127-8f9354f1896f
This commit is contained in:
parent
eecf602476
commit
acb25b3510
62 changed files with 2473 additions and 755 deletions
|
|
@ -16,15 +16,15 @@
|
|||
#include "source.h"
|
||||
#include "module.h"
|
||||
#include "oss.h"
|
||||
#include "sample-util.h"
|
||||
|
||||
struct userdata {
|
||||
struct sink *sink;
|
||||
struct source *source;
|
||||
struct core *core;
|
||||
struct sample_spec sample_spec;
|
||||
struct pa_sample_spec sample_spec;
|
||||
|
||||
size_t in_fragment_size, out_fragment_size, in_fragments, out_fragments, sample_size, out_fill;
|
||||
uint32_t sample_usec;
|
||||
size_t in_fragment_size, out_fragment_size, in_fragments, out_fragments, out_fill;
|
||||
|
||||
int fd;
|
||||
|
||||
|
|
@ -161,12 +161,14 @@ static void do_read(struct userdata *u) {
|
|||
in_clear_memblocks(u, u->in_fragments/2);
|
||||
};
|
||||
|
||||
static void io_callback(struct mainloop_source*s, int fd, enum mainloop_io_event event, void *userdata) {
|
||||
static void io_callback(struct pa_mainloop_api *m, void *id, int fd, enum pa_mainloop_api_io_events events, void *userdata) {
|
||||
struct userdata *u = userdata;
|
||||
|
||||
if (event & MAINLOOP_IO_EVENT_IN)
|
||||
assert (u && u->core->mainloop == m && u->mainloop_source == id);
|
||||
|
||||
if (events & PA_MAINLOOP_API_IO_EVENT_INPUT)
|
||||
do_read(u);
|
||||
if (event & MAINLOOP_IO_EVENT_OUT)
|
||||
if (events & PA_MAINLOOP_API_IO_EVENT_OUTPUT)
|
||||
do_write(u);
|
||||
}
|
||||
|
||||
|
|
@ -175,7 +177,7 @@ static uint32_t sink_get_latency_cb(struct sink *s) {
|
|||
assert(s && u);
|
||||
|
||||
do_write(u);
|
||||
return u->out_fill/u->sample_size*u->sample_usec;
|
||||
return pa_samples_usec(u->out_fill, &s->sample_spec);
|
||||
}
|
||||
|
||||
int module_init(struct core *c, struct module*m) {
|
||||
|
|
@ -316,10 +318,7 @@ int module_init(struct core *c, struct module*m) {
|
|||
|
||||
assert(u->source || u->sink);
|
||||
|
||||
u->sample_size = sample_size(&u->sample_spec);
|
||||
u->sample_usec = 1000000/u->sample_spec.rate;
|
||||
|
||||
u->mainloop_source = mainloop_source_new_io(c->mainloop, u->fd, (u->source ? MAINLOOP_IO_EVENT_IN : 0) | (u->sink ? MAINLOOP_IO_EVENT_OUT : 0), io_callback, u);
|
||||
u->mainloop_source = c->mainloop->source_io(c->mainloop, u->fd, (u->source ? PA_MAINLOOP_API_IO_EVENT_INPUT : 0) | (u->sink ? PA_MAINLOOP_API_IO_EVENT_OUTPUT : 0), io_callback, u);
|
||||
assert(u->mainloop_source);
|
||||
|
||||
return 0;
|
||||
|
|
@ -360,7 +359,7 @@ void module_done(struct core *c, struct module*m) {
|
|||
source_free(u->source);
|
||||
|
||||
if (u->mainloop_source)
|
||||
mainloop_source_free(u->mainloop_source);
|
||||
u->core->mainloop->cancel_io(u->core->mainloop, u->mainloop_source);
|
||||
|
||||
if (u->fd >= 0)
|
||||
close(u->fd);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue