mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-06 13:29:56 -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
|
|
@ -43,6 +43,7 @@ pa_mcalign *pa_mcalign_new(size_t base, pa_memblock_stat *s) {
|
|||
assert(base);
|
||||
|
||||
m = pa_xnew(pa_mcalign, 1);
|
||||
|
||||
m->base = base;
|
||||
pa_memchunk_reset(&m->leftover);
|
||||
pa_memchunk_reset(&m->current);
|
||||
|
|
@ -64,11 +65,16 @@ void pa_mcalign_free(pa_mcalign *m) {
|
|||
}
|
||||
|
||||
void pa_mcalign_push(pa_mcalign *m, const pa_memchunk *c) {
|
||||
assert(m && c && c->memblock && c->length);
|
||||
assert(m);
|
||||
assert(c);
|
||||
|
||||
assert(c->memblock);
|
||||
assert(c->length > 0);
|
||||
|
||||
assert(!m->current.memblock);
|
||||
|
||||
/* Append to the leftover memory block */
|
||||
if (m->leftover.memblock) {
|
||||
assert(!m->current.memblock);
|
||||
|
||||
/* Try to merge */
|
||||
if (m->leftover.memblock == c->memblock &&
|
||||
|
|
@ -110,8 +116,6 @@ void pa_mcalign_push(pa_mcalign *m, const pa_memchunk *c) {
|
|||
}
|
||||
}
|
||||
} else {
|
||||
assert(!m->leftover.memblock && !m->current.memblock);
|
||||
|
||||
/* Nothing to merge or copy, just store it */
|
||||
|
||||
if (c->length >= m->base)
|
||||
|
|
@ -124,7 +128,8 @@ void pa_mcalign_push(pa_mcalign *m, const pa_memchunk *c) {
|
|||
}
|
||||
|
||||
int pa_mcalign_pop(pa_mcalign *m, pa_memchunk *c) {
|
||||
assert(m && c);
|
||||
assert(m);
|
||||
assert(c);
|
||||
|
||||
/* First test if there's a leftover memory block available */
|
||||
if (m->leftover.memblock) {
|
||||
|
|
@ -187,3 +192,15 @@ int pa_mcalign_pop(pa_mcalign *m, pa_memchunk *c) {
|
|||
return -1;
|
||||
|
||||
}
|
||||
|
||||
size_t pa_mcalign_csize(pa_mcalign *m, size_t l) {
|
||||
assert(m);
|
||||
assert(l > 0);
|
||||
|
||||
assert(!m->current.memblock);
|
||||
|
||||
if (m->leftover.memblock)
|
||||
l += m->leftover.length;
|
||||
|
||||
return (l/m->base)*m->base;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue