aboutsummaryrefslogtreecommitdiff
path: root/ringbuf.h
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2025-09-13 11:46:38 +0800
committerMistivia <i@mistivia.com>2025-09-13 11:46:38 +0800
commit4864500034260f43261a1cc86b7d9bce0d541e07 (patch)
tree499a54bae8e90d8d80047bc26d0d34f1246a6dc0 /ringbuf.h
parent603df4bdbeee6ae09e61f05eed0c05ed430eee1b (diff)
add transmuxer
Diffstat (limited to 'ringbuf.h')
-rw-r--r--ringbuf.h44
1 files changed, 44 insertions, 0 deletions
diff --git a/ringbuf.h b/ringbuf.h
new file mode 100644
index 0000000..09e0306
--- /dev/null
+++ b/ringbuf.h
@@ -0,0 +1,44 @@
+#ifndef RINGBUF_H_
+#define RINGBUF_H_
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <pthread.h>
+
+typedef struct {
+ uint8_t *buffer;
+ size_t head;
+ size_t tail;
+ size_t max;
+ bool full_flag;
+ bool finished_flag;
+
+ pthread_mutex_t mutex;
+ pthread_cond_t not_empty_cond;
+ pthread_cond_t not_full_cond;
+} RingBuffer;
+
+void RingBuffer_init(RingBuffer *self, size_t size);
+
+void RingBuffer_destroy(RingBuffer *self);
+
+size_t RingBuffer_size(RingBuffer *self);
+
+size_t RingBuffer_space(RingBuffer *self);
+
+size_t RingBuffer_write(RingBuffer *self, const uint8_t *data, size_t len);
+
+bool RingBuffer_write_word16le(RingBuffer *self, uint16_t x);
+bool RingBuffer_write_word24le(RingBuffer *self, uint32_t x);
+bool RingBuffer_write_word32le(RingBuffer *self, uint32_t x);
+bool RingBuffer_write_word16be(RingBuffer *self, uint16_t x);
+bool RingBuffer_write_word24be(RingBuffer *self, uint32_t x);
+bool RingBuffer_write_word32be(RingBuffer *self, uint32_t x);
+bool RingBuffer_write_char(RingBuffer *self, uint8_t x);
+
+size_t RingBuffer_read(RingBuffer *self, uint8_t *data, size_t len);
+
+void RingBuffer_end(RingBuffer *self);
+
+#endif \ No newline at end of file