summaryrefslogtreecommitdiffstats
path: root/polyp/mcalign-test.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2004-11-17 00:05:25 +0000
committerLennart Poettering <lennart@poettering.net>2004-11-17 00:05:25 +0000
commit0a2bbc528b7865b08139155e0316738a717c4e42 (patch)
tree99166840892bb315fe109436093876386adac51d /polyp/mcalign-test.c
parentf5f6605254d17c5bc06b8c1ec98e8ee09009af10 (diff)
* some commenting work
* add new field "read_only" to memory blocks * add new API function pa_context_get_server() * filter capture data through mcalign on client * make module-tunnel use pa_socket_client_new_string() instead of using pa_resolve_server() directly. * remove pa_resolve_server() * remove debug.h and replace it by a macro definition on the gcc command line * some strbuf cleanups * small fixes in pa_stream for cleanup when server dies * new CLI command "load-sample-dir-lazy" * send FQDN as part of server info * rework mcalign, this time with memory block merging * fix iochannel cleanup when connection dies * check getaddrinfo() results git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@286 fefdeb5f-60dc-0310-8127-8f9354f1896f
Diffstat (limited to 'polyp/mcalign-test.c')
-rw-r--r--polyp/mcalign-test.c68
1 files changed, 68 insertions, 0 deletions
diff --git a/polyp/mcalign-test.c b/polyp/mcalign-test.c
new file mode 100644
index 00000000..ab1f9aed
--- /dev/null
+++ b/polyp/mcalign-test.c
@@ -0,0 +1,68 @@
+#include <assert.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <errno.h>
+#include <string.h>
+#include <stdlib.h>
+#include <time.h>
+
+#include "util.h"
+#include "mcalign.h"
+
+int main(int argc, char *argv[]) {
+ struct pa_mcalign *a = pa_mcalign_new(11, NULL);
+ struct pa_memchunk c;
+
+ pa_memchunk_reset(&c);
+
+ srand(time(NULL));
+
+ for (;;) {
+ ssize_t r;
+ size_t l;
+
+ if (!c.memblock) {
+ c.memblock = pa_memblock_new(2048, NULL);
+ c.index = c.length = 0;
+ }
+
+ assert(c.index < c.memblock->length);
+
+ l = c.memblock->length - c.index;
+
+ l = l <= 1 ? l : rand() % (l-1) +1 ;
+
+ if ((r = read(STDIN_FILENO, (uint8_t*) c.memblock->data + c.index, l)) <= 0) {
+ fprintf(stderr, "read() failed: %s\n", r < 0 ? strerror(errno) : "EOF");
+ break;
+ }
+
+ c.length = r;
+ pa_mcalign_push(a, &c);
+ fprintf(stderr, "Read %u bytes\n", r);
+
+ c.index += r;
+
+ if (c.index >= c.memblock->length) {
+ pa_memblock_unref(c.memblock);
+ pa_memchunk_reset(&c);
+ }
+
+ for (;;) {
+ struct pa_memchunk t;
+
+ if (pa_mcalign_pop(a, &t) < 0)
+ break;
+
+ pa_loop_write(STDOUT_FILENO, (uint8_t*) t.memblock->data + t.index, t.length);
+ fprintf(stderr, "Wrote %u bytes.\n", t.length);
+
+ pa_memblock_unref(t.memblock);
+ }
+ }
+
+ pa_mcalign_free(a);
+
+ if (c.memblock)
+ pa_memblock_unref(c.memblock);
+}