summaryrefslogtreecommitdiffstats
path: root/bufferq.h
blob: da4eac365e707686846d479214be21f0c57999dd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#ifndef foosydneybufferqhfoo
#define foosydneybufferqhfoo

#include <inttypes.h>

#include "macro.h"
#include "llist.h"
#include "sydney.h"

typedef struct bufferq_item {
    int64_t idx;
    size_t size;
    SA_LLIST_ITEM(struct bufferq_item, bufferq);
} bufferq_item_t;

#define BUFFERQ_ITEM_DATA(x) ((void*) (uint8_t*) (x) + ALIGN(sizeof(bufferq_item_t)))

typedef struct bufferq {
    SA_LLIST_HEAD(bufferq_item_t, *items);
    bufferq_item_t **last;
    int64_t read_index, write_index, end_index;
    size_t sample_size;
    unsigned nchannels;
} bufferq_t;

int bufferq_init(bufferq_t *q, unsigned nchannels, size_t sample_size);

void bufferq_done(bufferq_t *q);

int bufferq_push(bufferq_t *q, unsigned channel, const void *data, size_t nbytes, int64_t offset, sa_seek_t whence);

int bufferq_get(bufferq_t *q, void *i[], size_t *bytes);
int bufferq_drop(bufferq_t *q, int64_t bytes);

#endif