nativeaudio

audio playback for Go
Log | Files | Refs | README | LICENSE

commit 5864a159ea62ab86b284ab0d255d94213d5b3d01
parent 834c5174b806191e83cf4c7fcf8d72ce8a86c680
Author: Jack Mordaunt <jackmordaunt.dev@gmail.com>
Date:   Thu,  4 Jan 2024 06:22:32 +0800

remove extraneous C code

Signed-off-by: Jack Mordaunt <jackmordaunt.dev@gmail.com>

Diffstat:
Dinternal/test/main.c | 68--------------------------------------------------------------------
Dinternal/test/main_test.c | 70----------------------------------------------------------------------
Dvendor/growable-buf/.gitignore | 1-
Dvendor/growable-buf/Makefile | 15---------------
Dvendor/growable-buf/README.md | 92-------------------------------------------------------------------------------
Dvendor/growable-buf/UNLICENSE | 24------------------------
Dvendor/growable-buf/buf.h | 112-------------------------------------------------------------------------------
Dvendor/growable-buf/tests.c | 209-------------------------------------------------------------------------------
8 files changed, 0 insertions(+), 591 deletions(-)

diff --git a/internal/test/main.c b/internal/test/main.c @@ -1,68 +0,0 @@ -#include "../../audio_windows.h" - -#ifdef _MSC_VER -#define _CRT_SECURE_NO_WARNINGS -#endif - -int main(int argc, char** argv) { - if (argc < 2) { - printf("supply file name"); - goto done; - } - - printf("press return to start media framework...\n"); - getchar(); - - StartMediaFramework(); - - printf("press return to decode...\n"); - getchar(); - - const char* fname = argv[1]; - FILE* f = fopen(fname, "rb"); - - if (f == NULL) { - fprintf(stderr, "cannot open file '%s': %s\n", fname, strerror(errno)); - goto done; - } - - fseek(f, 0, SEEK_END); - const int fsize = ftell(f); - - fseek(f, 0, SEEK_SET); - byte* b = malloc(fsize); - - fread(b, fsize, 1, f); - fclose(f); - - Buffer* buf; - buf = BufferNew(); - - DecodeResult r; - - r = Decode(b, fsize); - - free(b); - - if (r.Err != NULL) { - fprintf(stderr, "decoding: %s\n", r.Err->Str); - goto done; - } - - printf("press return to free memory...\n"); - getchar(); - - BufferFree(r.Uncompressed); - - printf("press return to end media framework...\n"); - getchar(); - - EndMediaFramework(); - - printf("press return to exit...\n"); - getchar(); - -done: - return 0; -} - diff --git a/internal/test/main_test.c b/internal/test/main_test.c @@ -1,70 +0,0 @@ -#include "../../audio_windows.h" - -#ifdef _MSC_VER -#define _CRT_SECURE_NO_WARNINGS -#endif - -#if _WIN32 -# define C_RED(s) s -# define C_GREEN(s) s -#else -# define C_RED(s) "\033[31;1m" s "\033[0m" -# define C_GREEN(s) "\033[32;1m" s "\033[0m" -#endif - -#define TEST(s, x) \ - do { \ - if (x) { \ - printf(C_GREEN("PASS") " %s\n", s); \ - (*count_pass)++; \ - } else { \ - printf(C_RED("FAIL") " %s\n", s); \ - (*count_fail)++; \ - } \ - } while (0) - -void -TestBuffer(int *count_fail, int *count_pass) { - - Buffer *b = NULL; - - b = BufferNew(); - - TEST("BufferNew zero len", b->Len == 0); - TEST("BufferNew not null", b->Data != NULL); - TEST("BufferNew default size", b->Cap == BUFFER_DEFAULT_SIZE); - - BYTE *data = malloc(1024); - BufferWrite(b, 1024, data); - free(data); - - TEST("BufferWrite data pointer no null", b->Data != NULL); - TEST("BufferWrite len matches data written", b->Len == 1024); - TEST("BufferWrite cap unchanged", b->Cap == BUFFER_DEFAULT_SIZE); - - for (int ii = 0; ii < 1024; ii++) { - BYTE *data = malloc(1024); - BufferWrite(b, 1024, data); - free(data); - } - - TEST("BufferWrite data pointer not null", b->Data != NULL); - TEST("BufferWrite len matches data written", b->Len == 1024*1025); - TEST("BufferWrite exceed cap should grow", b->Cap != BUFFER_DEFAULT_SIZE); - - BufferFree(b); -} - -int -main(int argc, char** argv) { - - int count_fail = 0; - int count_pass = 0; - - TestBuffer(&count_fail, &count_pass); - - printf("%d fail, %d pass\n", count_fail, count_pass); - return count_fail != 0; -} - - diff --git a/vendor/growable-buf/.gitignore b/vendor/growable-buf/.gitignore @@ -1 +0,0 @@ -tests diff --git a/vendor/growable-buf/Makefile b/vendor/growable-buf/Makefile @@ -1,15 +0,0 @@ -.POSIX: -CFLAGS = -std=c99 -Wall -Wextra -O3 -g3 - -tests: tests.c buf.h - $(CC) $(LDFLAGS) $(CFLAGS) -o $@ tests.c $(LDLIBS) - -test: check -check: tests - ./tests - -bench: tests - ./tests 558d2750ae0e0887 - -clean: - rm -f tests diff --git a/vendor/growable-buf/README.md b/vendor/growable-buf/README.md @@ -1,92 +0,0 @@ -# Growable Memory Buffers for C99 - -This C99 header library provides a simple, portable interface to -growable buffers of homogeneous values of any type, similar to a -std::vector in C++. The user need not use any particular struct, and the -buffer need only initialize to NULL. - -Each "function" in the interface is actually a macro, and its usage is -reflected by these hypothetical prototypes: - -```c -/* Returns the number of elements in the buffer (for push and pop). -*/ -size_t buf_size(type *v); - -/* Returns the total capacity of the buffer. -*/ -size_t buf_capacity(type *v); - -/* Destroy and free the buffer, effectively resetting it. - * Potentially assigns a new V pointer. -*/ -void buf_free(type *v); - -/* Append an element E to the end of the buffer, growing if necessary. - * Potentially increases the capacity and assigns a new V pointer. -*/ -void buf_push(type *v, type e); - -/* Remove an element E from the end of the buffer. - * Neither the capacity nor the V pointer will change. Popping when the - * size is zero has undefined results. - */ -type buf_pop(type *v); - -/* Increase buffer capactity by N elements. - * Potentially assigns a new V pointer while also returning it. - */ -type *buf_grow(type *v, ptrdiff_t n); - -/* Set buffer capactity to exactly N elements. - * Potentially assigns a new V pointer while also returning it. A - * negative capacity has undefined results. - */ -type *buf_trunc(type *v, ptrdiff_t n); - -/* Set buffer size to zero. - * Only affects push and pop. The capacity and buffer contents are - * unchanged. - */ -void buf_clear(type *v); -``` - -Note: `buf_push()`, `buf_grow()`, `buf_trunc()`, and `buf_free()` may -change the buffer pointer, and any previously-taken pointers should be -considered invalidated. This has important consequences that must be -considered. - -The `BUF_INIT_CAPACITY` determines the initial capacity for buffers -receiving their first push. - -The `BUF_ABORT` macro is evaluated when the system runs out of memory. -It defaults to `abort()`, but you may override it to run your own abort -code instead. - -Example usage: - -```c -float *values = 0; - -/* Append 25 values */ -for (size_t i = 0; i < 25; i++) - buf_push(values, rand() / (float)RAND_MAX); - -/* Access 25 values using the normal [] operator */ -for (size_t i = 0; i < buf_size(values); i++) - printf("values[%zu] = %f\n", i, values[i]); - -/* Destroy/reset the buffer */ -buf_free(values); -``` - -## Purpose - -This library is inspired by [stb `stretchy_buffer.h`][sb]. The -difference is that it's written in C99 so that it doesn't need to rely -on undefined behavior. This does so by using a flexible array member and -the `offsetof()` macro. It also checks for integer overflows before -allocating any memory, making it safer. - - -[sb]: https://github.com/nothings/stb/blob/master/stretchy_buffer.h diff --git a/vendor/growable-buf/UNLICENSE b/vendor/growable-buf/UNLICENSE @@ -1,24 +0,0 @@ -This is free and unencumbered software released into the public domain. - -Anyone is free to copy, modify, publish, use, compile, sell, or -distribute this software, either in source code form or as a compiled -binary, for any purpose, commercial or non-commercial, and by any -means. - -In jurisdictions that recognize copyright laws, the author or authors -of this software dedicate any and all copyright interest in the -software to the public domain. We make this dedication for the benefit -of the public at large and to the detriment of our heirs and -successors. We intend this dedication to be an overt act of -relinquishment in perpetuity of all present and future rights to this -software under copyright law. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - -For more information, please refer to <http://unlicense.org/> diff --git a/vendor/growable-buf/buf.h b/vendor/growable-buf/buf.h @@ -1,112 +0,0 @@ -/* buf.h --- growable memory buffers for C99 - * This is free and unencumbered software released into the public domain. - * - * buf_size(v) : return the number of elements in the buffer (size_t) - * buf_capacity(v) : return the total capacity of the buffer (size_t) - * buf_free(v) : destroy and free the buffer - * buf_push(v, e) : append an element E to the end - * buf_pop(v) : remove and return an element E from the end - * buf_grow(v, n) : increase buffer capactity by (ptrdiff_t) N elements - * buf_trunc(v, n) : set buffer capactity to exactly (ptrdiff_t) N elements - * buf_clear(v, n) : set buffer size to 0 (for push/pop) - * - * Note: buf_push(), buf_grow(), buf_trunc(), and buf_free() may change - * the buffer pointer, and any previously-taken pointers should be - * considered invalidated. - * - * Example usage: - * - * float *values = 0; - * for (size_t i = 0; i < 25; i++) - * buf_push(values, rand() / (float)RAND_MAX); - * for (size_t i = 0; i < buf_size(values); i++) - * printf("values[%zu] = %f\n", i, values[i]); - * buf_free(values); - */ -#include <stddef.h> -#include <stdlib.h> - -#ifndef BUF_INIT_CAPACITY -# define BUF_INIT_CAPACITY 8 -#endif - -#ifndef BUF_ABORT -# define BUF_ABORT abort() -#endif - -struct buf { - size_t capacity; - size_t size; - char buffer[]; -}; - -#define buf_ptr(v) \ - ((struct buf *)((char *)(v) - offsetof(struct buf, buffer))) - -#define buf_free(v) \ - do { \ - if (v) { \ - free(buf_ptr((v))); \ - (v) = 0; \ - } \ - } while (0) - -#define buf_size(v) \ - ((v) ? buf_ptr((v))->size : 0) - -#define buf_capacity(v) \ - ((v) ? buf_ptr((v))->capacity : 0) - -#define buf_push(v, e) \ - do { \ - if (buf_capacity((v)) == buf_size((v))) { \ - (v) = buf_grow1(v, sizeof(*(v)), \ - !buf_capacity((v)) ? \ - BUF_INIT_CAPACITY : \ - buf_capacity((v))); \ - } \ - (v)[buf_ptr((v))->size++] = (e); \ - } while (0) - -#define buf_pop(v) \ - ((v)[--buf_ptr(v)->size]) - -#define buf_grow(v, n) \ - ((v) = buf_grow1((v), sizeof(*(v)), n)) - -#define buf_trunc(v, n) \ - ((v) = buf_grow1((v), sizeof(*(v)), n - buf_capacity(v))) - -#define buf_clear(v) \ - ((v) ? (buf_ptr((v))->size = 0) : 0) - - -static void * -buf_grow1(void *v, size_t esize, ptrdiff_t n) -{ - struct buf *p; - size_t max = (size_t)-1 - sizeof(struct buf); - if (v) { - p = buf_ptr(v); - if (n > 0 && p->capacity + n > max / esize) - goto fail; /* overflow */ - p = realloc(p, sizeof(struct buf) + esize * (p->capacity + n)); - if (!p) - goto fail; - p->capacity += n; - if (p->size > p->capacity) - p->size = p->capacity; - } else { - if ((size_t)n > max / esize) - goto fail; /* overflow */ - p = malloc(sizeof(struct buf) + esize * n); - if (!p) - goto fail; - p->capacity = n; - p->size = 0; - } - return p->buffer; -fail: - BUF_ABORT; - return 0; -} diff --git a/vendor/growable-buf/tests.c b/vendor/growable-buf/tests.c @@ -1,209 +0,0 @@ -#include <stdio.h> -#include <stdint.h> -#include <setjmp.h> - -static jmp_buf escape; - -static void -test_abort(void) -{ - longjmp(escape, 1); -} - -#define BUF_ABORT test_abort() -#include "buf.h" - -#if _WIN32 -# define C_RED(s) s -# define C_GREEN(s) s -#else -# define C_RED(s) "\033[31;1m" s "\033[0m" -# define C_GREEN(s) "\033[32;1m" s "\033[0m" -#endif - -#define TEST(s, x) \ - do { \ - if (x) { \ - printf(C_GREEN("PASS") " %s\n", s); \ - count_pass++; \ - } else { \ - printf(C_RED("FAIL") " %s\n", s); \ - count_fail++; \ - } \ - } while (0) - -static uint32_t -pcg32(uint64_t *s) -{ - uint64_t m = 0x5851f42d4c957f2d; - uint64_t a = 0x8b260b70b8e98891; - uint64_t p = *s; - uint32_t x = ((p >> 18) ^ p) >> 27; - uint32_t r = p >> 59; - *s = p * m + a; - return (x >> r) | (x << (-r & 31u)); -} - -static unsigned long -bench(uint64_t *rng) -{ - unsigned long r = 0; - uint32_t n = 1000000 + pcg32(rng) % 4000000; - float *buf = 0; - - for (uint32_t i = 0; i < n; i++) - buf_push(buf, pcg32(rng) / (double)UINT32_MAX); - - float threshold = pcg32(rng) / (double)UINT32_MAX; - for (uint32_t i = 0; i < n; i++) - r += buf[i] > threshold; - - buf_free(buf); - return r; -} - -#ifdef _WIN32 -#include <windows.h> -uint64_t -uepoch(void) -{ - FILETIME ft; - GetSystemTimeAsFileTime(&ft); - uint64_t tt = ft.dwHighDateTime; - tt <<= 32; - tt |= ft.dwLowDateTime; - tt /=10; - tt -= UINT64_C(11644473600000000); - return tt; -} -#else -#include <sys/time.h> -uint64_t -uepoch(void) -{ - struct timeval tv; - gettimeofday(&tv, NULL); - return 1000000LL * tv.tv_sec + tv.tv_usec; -} -#endif - -int -main(int argc, char **argv) -{ - /* Benchtest? */ - if (argc > 1) { - uint64_t rng = strtoull(argv[1], 0, 16); - unsigned long r = 0; - uint64_t start = uepoch(); - for (int i = 0; i < 300; i++) - r += bench(&rng); - double t = (uepoch() - start) / 1e6; - printf("%.6gs : actual %lu, expect 428859598\n", t, r); - return 0; - } - - /* volatile due to setjmp() / longjmp() */ - volatile int count_pass = 0; - volatile int count_fail = 0; - - if (setjmp(escape)) - abort(); - - /* initialization, buf_free() */ - float *a = 0; - TEST("capacity init", buf_capacity(a) == 0); - TEST("size init", buf_size(a) == 0); - buf_push(a, 1.3f); - TEST("size 1", buf_size(a) == 1); - TEST("value", a[0] == (float)1.3f); - buf_clear(a); - TEST("clear", buf_size(a) == 0); - TEST("clear not-free", a != 0); - buf_free(a); - TEST("free", a == 0); - - /* Clearing an NULL pointer is a no-op */ - buf_clear(a); - TEST("clear empty", buf_size(a) == 0); - TEST("clear no-op", a == 0); - - /* buf_push(), [] operator */ - long *ai = 0; - for (int i = 0; i < 10000; i++) - buf_push(ai, i); - TEST("size 10000", buf_size(ai) == 10000); - int match = 0; - for (int i = 0; i < (int)(buf_size(ai)); i++) - match += ai[i] == i; - TEST("match 10000", match == 10000); - buf_free(ai); - - /* buf_grow(), buf_trunc() */ - buf_grow(ai, 1000); - TEST("grow 1000", buf_capacity(ai) == 1000); - TEST("size 0 (grow)", buf_size(ai) == 0); - buf_trunc(ai, 100); - TEST("trunc 100", buf_capacity(ai) == 100); - buf_free(ai); - - /* buf_pop() */ - buf_push(a, 1.1); - buf_push(a, 1.2); - buf_push(a, 1.3); - buf_push(a, 1.4); - TEST("size 4", buf_size(a) == 4); - TEST("pop 3", buf_pop(a) == (float)1.4f); - buf_trunc(a, 3); - TEST("size 3", buf_size(a) == 3); - TEST("pop 2", buf_pop(a) == (float)1.3f); - TEST("pop 1", buf_pop(a) == (float)1.2f); - TEST("pop 0", buf_pop(a) == (float)1.1f); - TEST("size 0 (pop)", buf_size(a) == 0); - buf_free(a); - - /* Memory allocation failures */ - - volatile int aborted; - - { - int *volatile p = 0; - aborted = 0; - if (!setjmp(escape)) { - size_t max = (PTRDIFF_MAX - sizeof(struct buf)) / sizeof(*p) + 1; - buf_grow(p, max); - buf_grow(p, max); - } else { - aborted = 1; - } - buf_free(p); - TEST("out of memory", aborted); - } - - { - int *volatile p = 0; - aborted = 0; - if (!setjmp(escape)) { - buf_trunc(p, PTRDIFF_MAX); - } else { - aborted = 1; - } - buf_free(p); - TEST("overflow init", aborted); - } - - { - int *volatile p = 0; - aborted = 0; - if (!setjmp(escape)) { - buf_trunc(p, 1); /* force realloc() use next */ - buf_trunc(p, PTRDIFF_MAX); - } else { - aborted = 1; - } - buf_free(p); - TEST("overflow grow", aborted); - } - - printf("%d fail, %d pass\n", count_fail, count_pass); - return count_fail != 0; -}