mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-07 13:30:03 -05:00
1) Add flexible seeking support (including absolute) for memory block queues and playback streams
2) Add support to synchronize multiple playback streams 3) add two tests for 1) and 2) 4) s/PA_ERROR/PA_ERR/ 5) s/PA_ERROR_OK/PA_OK/ 6) update simple API to deal properly with new peek/drop recording API 7) add beginnings of proper validity checking on API calls in client libs (needs to be extended) 8) report playback buffer overflows/underflows to the client 9) move client side recording mcalign stuff into the memblockq 10) create typedefs for a bunch of API callback prototypes 11) simplify handling of HUP poll() events Yes, i know, it's usually better to commit a lot of small patches instead of a single big one. In this case however, this would have contradicted the other rule: never commit broken or incomplete stuff. *** This stuff needs a lot of additional testing! *** git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@511 fefdeb5f-60dc-0310-8127-8f9354f1896f
This commit is contained in:
parent
0876b1ba82
commit
304449002c
38 changed files with 1983 additions and 796 deletions
|
|
@ -144,7 +144,7 @@ static void request_memblock(struct userdata *u) {
|
|||
return;
|
||||
|
||||
for (o = u->outputs; o; o = o->next)
|
||||
pa_memblockq_push_align(o->memblockq, &chunk, 0);
|
||||
pa_memblockq_push_align(o->memblockq, &chunk);
|
||||
|
||||
pa_memblock_unref(chunk.memblock);
|
||||
}
|
||||
|
|
@ -212,7 +212,15 @@ static struct output *output_new(struct userdata *u, pa_sink *sink, int resample
|
|||
o->userdata = u;
|
||||
|
||||
o->counter = 0;
|
||||
o->memblockq = pa_memblockq_new(MEMBLOCKQ_MAXLENGTH, MEMBLOCKQ_MAXLENGTH, pa_frame_size(&u->sink->sample_spec), 0, 0, sink->core->memblock_stat);
|
||||
o->memblockq = pa_memblockq_new(
|
||||
0,
|
||||
MEMBLOCKQ_MAXLENGTH,
|
||||
MEMBLOCKQ_MAXLENGTH,
|
||||
pa_frame_size(&u->sink->sample_spec),
|
||||
1,
|
||||
0,
|
||||
NULL,
|
||||
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, 1, resample_method)))
|
||||
|
|
|
|||
|
|
@ -214,7 +214,7 @@ static void send_bytes(struct userdata *u) {
|
|||
return;
|
||||
}
|
||||
|
||||
pa_pstream_send_memblock(u->pstream, u->channel, 0, &chunk);
|
||||
pa_pstream_send_memblock(u->pstream, u->channel, 0, PA_SEEK_RELATIVE, &chunk);
|
||||
pa_memblock_unref(chunk.memblock);
|
||||
|
||||
if (chunk.length > u->requested_bytes)
|
||||
|
|
@ -442,7 +442,7 @@ static void pstream_packet_callback(pa_pstream *p, pa_packet *packet, void *user
|
|||
}
|
||||
|
||||
#ifndef TUNNEL_SINK
|
||||
static void pstream_memblock_callback(pa_pstream *p, uint32_t channel, uint32_t delta, const pa_memchunk *chunk, void *userdata) {
|
||||
static void pstream_memblock_callback(pa_pstream *p, uint32_t channel, int64_t offset, pa_seek_mode_t seek, const pa_memchunk *chunk, void *userdata) {
|
||||
struct userdata *u = userdata;
|
||||
assert(p && chunk && u);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue