2 This file is part of PulseAudio.
4 PulseAudio is free software; you can redistribute it and/or modify
5 it under the terms of the GNU Lesser General Public License as published
6 by the Free Software Foundation; either version 2.1 of the License,
7 or (at your option) any later version.
9 PulseAudio is distributed in the hope that it will be useful, but
10 WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 General Public License for more details.
14 You should have received a copy of the GNU Lesser General Public License
15 along with PulseAudio; if not, write to the Free Software
16 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
29 #include <pulsecore/memblockq.h>
30 #include <pulsecore/log.h>
32 static void dump(pa_memblockq
*bq
) {
41 if (pa_memblockq_peek(bq
, &out
) < 0)
44 q
= pa_memblock_acquire(out
.memblock
);
45 for (e
= (char*) q
+ out
.index
, n
= 0; n
< out
.length
; n
++)
47 pa_memblock_release(out
.memblock
);
49 pa_memblock_unref(out
.memblock
);
50 pa_memblockq_drop(bq
, out
.length
);
56 int main(int argc
, char *argv
[]) {
61 pa_memchunk chunk1
, chunk2
, chunk3
, chunk4
;
64 pa_log_set_level(PA_LOG_DEBUG
);
66 p
= pa_mempool_new(FALSE
, 0);
68 silence
.memblock
= pa_memblock_new_fixed(p
, (char*) "__", 2, 1);
69 assert(silence
.memblock
);
71 silence
.length
= pa_memblock_get_length(silence
.memblock
);
73 bq
= pa_memblockq_new(0, 40, 10, 2, 4, 4, 40, &silence
);
76 chunk1
.memblock
= pa_memblock_new_fixed(p
, (char*) "11", 2, 1);
79 assert(chunk1
.memblock
);
81 chunk2
.memblock
= pa_memblock_new_fixed(p
, (char*) "XX22", 4, 1);
84 assert(chunk2
.memblock
);
86 chunk3
.memblock
= pa_memblock_new_fixed(p
, (char*) "3333", 4, 1);
89 assert(chunk3
.memblock
);
91 chunk4
.memblock
= pa_memblock_new_fixed(p
, (char*) "44444444", 8, 1);
94 assert(chunk4
.memblock
);
96 ret
= pa_memblockq_push(bq
, &chunk1
);
99 ret
= pa_memblockq_push(bq
, &chunk2
);
102 ret
= pa_memblockq_push(bq
, &chunk3
);
105 ret
= pa_memblockq_push(bq
, &chunk4
);
108 pa_memblockq_seek(bq
, -6, 0, TRUE
);
109 ret
= pa_memblockq_push(bq
, &chunk3
);
112 pa_memblockq_seek(bq
, -2, 0, TRUE
);
113 ret
= pa_memblockq_push(bq
, &chunk1
);
116 pa_memblockq_seek(bq
, -10, 0, TRUE
);
117 ret
= pa_memblockq_push(bq
, &chunk4
);
120 pa_memblockq_seek(bq
, 10, 0, TRUE
);
122 ret
= pa_memblockq_push(bq
, &chunk1
);
125 pa_memblockq_seek(bq
, -6, 0, TRUE
);
126 ret
= pa_memblockq_push(bq
, &chunk2
);
130 pa_memblockq_seek(bq
, -12, 0, TRUE
);
131 ret
= pa_memblockq_push(bq
, &chunk1
);
134 pa_memblockq_seek(bq
, 20, 0, TRUE
);
137 ret
= pa_memblockq_push(bq
, &chunk3
);
139 pa_memblockq_seek(bq
, -2, 0, TRUE
);
143 ret
= pa_memblockq_push(bq
, &chunk3
);
146 pa_memblockq_seek(bq
, 30, PA_SEEK_RELATIVE
, TRUE
);
150 pa_memblockq_rewind(bq
, 52);
154 pa_memblockq_free(bq
);
155 pa_memblock_unref(silence
.memblock
);
156 pa_memblock_unref(chunk1
.memblock
);
157 pa_memblock_unref(chunk2
.memblock
);
158 pa_memblock_unref(chunk3
.memblock
);
159 pa_memblock_unref(chunk4
.memblock
);