2d744bd5 |
1 | #ifndef PCM_READER_H |
2 | #define PCM_READER_H |
3 | |
4 | typedef struct pcm_reader_t pcm_reader_t; |
5 | |
6 | typedef struct pcm_reader_vtbl_t { |
7 | const pcm_sample_description_t *(*get_format)(pcm_reader_t *); |
8 | int64_t (*get_length)(pcm_reader_t *); |
9 | int64_t (*get_position)(pcm_reader_t *); |
10 | int (*read_frames)(pcm_reader_t *, void *, unsigned); |
11 | void (*teardown)(pcm_reader_t **); |
12 | } pcm_reader_vtbl_t; |
13 | |
14 | struct pcm_reader_t { |
15 | pcm_reader_vtbl_t *vtbl; |
16 | }; |
17 | |
18 | static inline |
19 | const pcm_sample_description_t *pcm_get_format(pcm_reader_t *r) |
20 | { |
21 | return r->vtbl->get_format(r); |
22 | } |
23 | |
24 | static inline |
25 | int64_t pcm_get_length(pcm_reader_t *r) |
26 | { |
27 | return r->vtbl->get_length(r); |
28 | } |
29 | |
30 | static inline |
31 | int64_t pcm_get_position(pcm_reader_t *r) |
32 | { |
33 | return r->vtbl->get_position(r); |
34 | } |
35 | |
36 | static inline |
37 | int64_t pcm_read_frames(pcm_reader_t *r, void *data, unsigned nframes) |
38 | { |
39 | return r->vtbl->read_frames(r, data, nframes); |
40 | } |
41 | |
42 | static inline |
43 | void pcm_teardown(pcm_reader_t **r) |
44 | { |
45 | (*r)->vtbl->teardown(r); |
46 | } |
47 | |
48 | #endif |