aboutsummaryrefslogtreecommitdiffstats
path: root/src/lv2_evbuf.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lv2_evbuf.c')
-rw-r--r--src/lv2_evbuf.c157
1 files changed, 80 insertions, 77 deletions
diff --git a/src/lv2_evbuf.c b/src/lv2_evbuf.c
index 61e5720..0d36dc9 100644
--- a/src/lv2_evbuf.c
+++ b/src/lv2_evbuf.c
@@ -23,103 +23,104 @@
#include <string.h>
struct LV2_Evbuf_Impl {
- uint32_t capacity;
- uint32_t atom_Chunk;
- uint32_t atom_Sequence;
- LV2_Atom_Sequence buf;
+ uint32_t capacity;
+ uint32_t atom_Chunk;
+ uint32_t atom_Sequence;
+ LV2_Atom_Sequence buf;
};
static inline uint32_t
lv2_evbuf_pad_size(uint32_t size)
{
- return (size + 7) & (~7);
+ return (size + 7) & (~7);
}
LV2_Evbuf*
lv2_evbuf_new(uint32_t capacity, uint32_t atom_Chunk, uint32_t atom_Sequence)
{
- // FIXME: memory must be 64-bit aligned
- LV2_Evbuf* evbuf = (LV2_Evbuf*)malloc(
- sizeof(LV2_Evbuf) + sizeof(LV2_Atom_Sequence) + capacity);
- evbuf->capacity = capacity;
- evbuf->atom_Chunk = atom_Chunk;
- evbuf->atom_Sequence = atom_Sequence;
- lv2_evbuf_reset(evbuf, true);
- return evbuf;
+ // FIXME: memory must be 64-bit aligned
+ LV2_Evbuf* evbuf = (LV2_Evbuf*)malloc(sizeof(LV2_Evbuf) +
+ sizeof(LV2_Atom_Sequence) + capacity);
+ evbuf->capacity = capacity;
+ evbuf->atom_Chunk = atom_Chunk;
+ evbuf->atom_Sequence = atom_Sequence;
+ lv2_evbuf_reset(evbuf, true);
+ return evbuf;
}
void
lv2_evbuf_free(LV2_Evbuf* evbuf)
{
- free(evbuf);
+ free(evbuf);
}
void
lv2_evbuf_reset(LV2_Evbuf* evbuf, bool input)
{
- if (input) {
- evbuf->buf.atom.size = sizeof(LV2_Atom_Sequence_Body);
- evbuf->buf.atom.type = evbuf->atom_Sequence;
- } else {
- evbuf->buf.atom.size = evbuf->capacity;
- evbuf->buf.atom.type = evbuf->atom_Chunk;
- }
+ if (input) {
+ evbuf->buf.atom.size = sizeof(LV2_Atom_Sequence_Body);
+ evbuf->buf.atom.type = evbuf->atom_Sequence;
+ } else {
+ evbuf->buf.atom.size = evbuf->capacity;
+ evbuf->buf.atom.type = evbuf->atom_Chunk;
+ }
}
uint32_t
lv2_evbuf_get_size(LV2_Evbuf* evbuf)
{
- assert(evbuf->buf.atom.type != evbuf->atom_Sequence
- || evbuf->buf.atom.size >= sizeof(LV2_Atom_Sequence_Body));
- return evbuf->buf.atom.type == evbuf->atom_Sequence
- ? evbuf->buf.atom.size - sizeof(LV2_Atom_Sequence_Body)
- : 0;
+ assert(evbuf->buf.atom.type != evbuf->atom_Sequence ||
+ evbuf->buf.atom.size >= sizeof(LV2_Atom_Sequence_Body));
+ return evbuf->buf.atom.type == evbuf->atom_Sequence
+ ? evbuf->buf.atom.size - sizeof(LV2_Atom_Sequence_Body)
+ : 0;
}
void*
lv2_evbuf_get_buffer(LV2_Evbuf* evbuf)
{
- return &evbuf->buf;
+ return &evbuf->buf;
}
LV2_Evbuf_Iterator
lv2_evbuf_begin(LV2_Evbuf* evbuf)
{
- LV2_Evbuf_Iterator iter = { evbuf, 0 };
- return iter;
+ LV2_Evbuf_Iterator iter = {evbuf, 0};
+ return iter;
}
LV2_Evbuf_Iterator
lv2_evbuf_end(LV2_Evbuf* evbuf)
{
- const uint32_t size = lv2_evbuf_get_size(evbuf);
- const LV2_Evbuf_Iterator iter = { evbuf, lv2_evbuf_pad_size(size) };
- return iter;
+ const uint32_t size = lv2_evbuf_get_size(evbuf);
+ const LV2_Evbuf_Iterator iter = {evbuf, lv2_evbuf_pad_size(size)};
+ return iter;
}
bool
lv2_evbuf_is_valid(LV2_Evbuf_Iterator iter)
{
- return iter.offset < lv2_evbuf_get_size(iter.evbuf);
+ return iter.offset < lv2_evbuf_get_size(iter.evbuf);
}
LV2_Evbuf_Iterator
lv2_evbuf_next(LV2_Evbuf_Iterator iter)
{
- if (!lv2_evbuf_is_valid(iter)) {
- return iter;
- }
-
- LV2_Evbuf* evbuf = iter.evbuf;
- uint32_t offset = iter.offset;
- uint32_t size = 0;
- size = ((LV2_Atom_Event*)
- ((char*)LV2_ATOM_CONTENTS(LV2_Atom_Sequence, &evbuf->buf.atom)
- + offset))->body.size;
- offset += lv2_evbuf_pad_size(sizeof(LV2_Atom_Event) + size);
-
- LV2_Evbuf_Iterator next = { evbuf, offset };
- return next;
+ if (!lv2_evbuf_is_valid(iter)) {
+ return iter;
+ }
+
+ LV2_Evbuf* evbuf = iter.evbuf;
+ uint32_t offset = iter.offset;
+ uint32_t size = 0;
+ size = ((LV2_Atom_Event*)((char*)LV2_ATOM_CONTENTS(LV2_Atom_Sequence,
+ &evbuf->buf.atom) +
+ offset))
+ ->body.size;
+ offset += lv2_evbuf_pad_size(sizeof(LV2_Atom_Event) + size);
+
+ LV2_Evbuf_Iterator next = {evbuf, offset};
+ return next;
}
bool
@@ -130,24 +131,25 @@ lv2_evbuf_get(LV2_Evbuf_Iterator iter,
uint32_t* size,
uint8_t** data)
{
- *frames = *subframes = *type = *size = 0;
- *data = NULL;
+ *frames = *subframes = *type = *size = 0;
+ *data = NULL;
- if (!lv2_evbuf_is_valid(iter)) {
- return false;
- }
+ if (!lv2_evbuf_is_valid(iter)) {
+ return false;
+ }
- LV2_Atom_Sequence* aseq = &iter.evbuf->buf;
- LV2_Atom_Event* aev = (LV2_Atom_Event*)(
- (char*)LV2_ATOM_CONTENTS(LV2_Atom_Sequence, aseq) + iter.offset);
+ LV2_Atom_Sequence* aseq = &iter.evbuf->buf;
+ LV2_Atom_Event* aev =
+ (LV2_Atom_Event*)((char*)LV2_ATOM_CONTENTS(LV2_Atom_Sequence, aseq) +
+ iter.offset);
- *frames = aev->time.frames;
- *subframes = 0;
- *type = aev->body.type;
- *size = aev->body.size;
- *data = (uint8_t*)LV2_ATOM_BODY(&aev->body);
+ *frames = aev->time.frames;
+ *subframes = 0;
+ *type = aev->body.type;
+ *size = aev->body.size;
+ *data = (uint8_t*)LV2_ATOM_BODY(&aev->body);
- return true;
+ return true;
}
bool
@@ -158,25 +160,26 @@ lv2_evbuf_write(LV2_Evbuf_Iterator* iter,
uint32_t size,
const uint8_t* data)
{
- (void)subframes;
+ (void)subframes;
- LV2_Atom_Sequence* aseq = &iter->evbuf->buf;
- if (iter->evbuf->capacity - sizeof(LV2_Atom) - aseq->atom.size <
- sizeof(LV2_Atom_Event) + size) {
- return false;
- }
+ LV2_Atom_Sequence* aseq = &iter->evbuf->buf;
+ if (iter->evbuf->capacity - sizeof(LV2_Atom) - aseq->atom.size <
+ sizeof(LV2_Atom_Event) + size) {
+ return false;
+ }
- LV2_Atom_Event* aev = (LV2_Atom_Event*)(
- (char*)LV2_ATOM_CONTENTS(LV2_Atom_Sequence, aseq) + iter->offset);
+ LV2_Atom_Event* aev =
+ (LV2_Atom_Event*)((char*)LV2_ATOM_CONTENTS(LV2_Atom_Sequence, aseq) +
+ iter->offset);
- aev->time.frames = frames;
- aev->body.type = type;
- aev->body.size = size;
- memcpy(LV2_ATOM_BODY(&aev->body), data, size);
+ aev->time.frames = frames;
+ aev->body.type = type;
+ aev->body.size = size;
+ memcpy(LV2_ATOM_BODY(&aev->body), data, size);
- size = lv2_evbuf_pad_size(sizeof(LV2_Atom_Event) + size);
- aseq->atom.size += size;
- iter->offset += size;
+ size = lv2_evbuf_pad_size(sizeof(LV2_Atom_Event) + size);
+ aseq->atom.size += size;
+ iter->offset += size;
- return true;
+ return true;
}