]>
code.delx.au - pulseaudio/blob - src/tests/memblockq-test.c
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_chunk(const pa_memchunk
*chunk
) {
41 q
= pa_memblock_acquire(chunk
->memblock
);
42 for (e
= (char*) q
+ chunk
->index
, n
= 0; n
< chunk
->length
; n
++, e
++)
44 pa_memblock_release(chunk
->memblock
);
49 static void dump(pa_memblockq
*bq
) {
54 /* First let's dump this as fixed block */
56 pa_memblockq_peek_fixed_size(bq
, 64, &out
);
58 pa_memblock_unref(out
.memblock
);
61 /* Then let's dump the queue manually */
65 if (pa_memblockq_peek(bq
, &out
) < 0)
69 pa_memblock_unref(out
.memblock
);
70 pa_memblockq_drop(bq
, out
.length
);
76 int main(int argc
, char *argv
[]) {
81 pa_memchunk chunk1
, chunk2
, chunk3
, chunk4
;
84 pa_log_set_level(PA_LOG_DEBUG
);
86 p
= pa_mempool_new(FALSE
, 0);
88 silence
.memblock
= pa_memblock_new_fixed(p
, (char*) "__", 2, 1);
89 assert(silence
.memblock
);
91 silence
.length
= pa_memblock_get_length(silence
.memblock
);
93 bq
= pa_memblockq_new(0, 200, 10, 2, 4, 4, 40, &silence
);
96 chunk1
.memblock
= pa_memblock_new_fixed(p
, (char*) "11", 2, 1);
99 assert(chunk1
.memblock
);
101 chunk2
.memblock
= pa_memblock_new_fixed(p
, (char*) "XX22", 4, 1);
104 assert(chunk2
.memblock
);
106 chunk3
.memblock
= pa_memblock_new_fixed(p
, (char*) "3333", 4, 1);
109 assert(chunk3
.memblock
);
111 chunk4
.memblock
= pa_memblock_new_fixed(p
, (char*) "44444444", 8, 1);
114 assert(chunk4
.memblock
);
116 ret
= pa_memblockq_push(bq
, &chunk1
);
119 ret
= pa_memblockq_push(bq
, &chunk2
);
122 ret
= pa_memblockq_push(bq
, &chunk3
);
125 ret
= pa_memblockq_push(bq
, &chunk4
);
128 pa_memblockq_seek(bq
, -6, 0, TRUE
);
129 ret
= pa_memblockq_push(bq
, &chunk3
);
132 pa_memblockq_seek(bq
, -2, 0, TRUE
);
133 ret
= pa_memblockq_push(bq
, &chunk1
);
136 pa_memblockq_seek(bq
, -10, 0, TRUE
);
137 ret
= pa_memblockq_push(bq
, &chunk4
);
140 pa_memblockq_seek(bq
, 10, 0, TRUE
);
142 ret
= pa_memblockq_push(bq
, &chunk1
);
145 pa_memblockq_seek(bq
, -6, 0, TRUE
);
146 ret
= pa_memblockq_push(bq
, &chunk2
);
150 pa_memblockq_seek(bq
, -12, 0, TRUE
);
151 ret
= pa_memblockq_push(bq
, &chunk1
);
154 pa_memblockq_seek(bq
, 20, 0, TRUE
);
157 ret
= pa_memblockq_push(bq
, &chunk3
);
159 pa_memblockq_seek(bq
, -2, 0, TRUE
);
163 ret
= pa_memblockq_push(bq
, &chunk3
);
166 pa_memblockq_seek(bq
, 30, PA_SEEK_RELATIVE
, TRUE
);
170 pa_memblockq_rewind(bq
, 52);
174 pa_memblockq_free(bq
);
175 pa_memblock_unref(silence
.memblock
);
176 pa_memblock_unref(chunk1
.memblock
);
177 pa_memblock_unref(chunk2
.memblock
);
178 pa_memblock_unref(chunk3
.memblock
);
179 pa_memblock_unref(chunk4
.memblock
);