]>
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
) {
39 q
= pa_memblock_acquire(chunk
->memblock
);
40 for (e
= (char*) q
+ chunk
->index
, n
= 0; n
< chunk
->length
; n
++, e
++)
42 pa_memblock_release(chunk
->memblock
);
45 static void dump(pa_memblockq
*bq
) {
50 /* First let's dump this as fixed block */
52 pa_memblockq_peek_fixed_size(bq
, 64, &out
);
54 pa_memblock_unref(out
.memblock
);
57 /* Then let's dump the queue manually */
61 if (pa_memblockq_peek(bq
, &out
) < 0)
65 pa_memblock_unref(out
.memblock
);
66 pa_memblockq_drop(bq
, out
.length
);
72 int main(int argc
, char *argv
[]) {
77 pa_memchunk chunk1
, chunk2
, chunk3
, chunk4
;
80 pa_log_set_level(PA_LOG_DEBUG
);
82 p
= pa_mempool_new(FALSE
, 0);
84 silence
.memblock
= pa_memblock_new_fixed(p
, (char*) "__", 2, 1);
85 assert(silence
.memblock
);
87 silence
.length
= pa_memblock_get_length(silence
.memblock
);
89 bq
= pa_memblockq_new(0, 200, 10, 2, 4, 4, 40, &silence
);
92 chunk1
.memblock
= pa_memblock_new_fixed(p
, (char*) "11", 2, 1);
95 assert(chunk1
.memblock
);
97 chunk2
.memblock
= pa_memblock_new_fixed(p
, (char*) "XX22", 4, 1);
100 assert(chunk2
.memblock
);
102 chunk3
.memblock
= pa_memblock_new_fixed(p
, (char*) "3333", 4, 1);
105 assert(chunk3
.memblock
);
107 chunk4
.memblock
= pa_memblock_new_fixed(p
, (char*) "44444444", 8, 1);
110 assert(chunk4
.memblock
);
112 ret
= pa_memblockq_push(bq
, &chunk1
);
115 ret
= pa_memblockq_push(bq
, &chunk2
);
118 ret
= pa_memblockq_push(bq
, &chunk3
);
121 ret
= pa_memblockq_push(bq
, &chunk4
);
124 pa_memblockq_seek(bq
, -6, 0, TRUE
);
125 ret
= pa_memblockq_push(bq
, &chunk3
);
128 pa_memblockq_seek(bq
, -2, 0, TRUE
);
129 ret
= pa_memblockq_push(bq
, &chunk1
);
132 pa_memblockq_seek(bq
, -10, 0, TRUE
);
133 ret
= pa_memblockq_push(bq
, &chunk4
);
136 pa_memblockq_seek(bq
, 10, 0, TRUE
);
138 ret
= pa_memblockq_push(bq
, &chunk1
);
141 pa_memblockq_seek(bq
, -6, 0, TRUE
);
142 ret
= pa_memblockq_push(bq
, &chunk2
);
146 pa_memblockq_seek(bq
, -12, 0, TRUE
);
147 ret
= pa_memblockq_push(bq
, &chunk1
);
150 pa_memblockq_seek(bq
, 20, 0, TRUE
);
153 ret
= pa_memblockq_push(bq
, &chunk3
);
155 pa_memblockq_seek(bq
, -2, 0, TRUE
);
159 ret
= pa_memblockq_push(bq
, &chunk3
);
162 pa_memblockq_seek(bq
, 30, PA_SEEK_RELATIVE
, TRUE
);
166 pa_memblockq_rewind(bq
, 52);
170 pa_memblockq_free(bq
);
171 pa_memblock_unref(silence
.memblock
);
172 pa_memblock_unref(chunk1
.memblock
);
173 pa_memblock_unref(chunk2
.memblock
);
174 pa_memblock_unref(chunk3
.memblock
);
175 pa_memblock_unref(chunk4
.memblock
);