]>
Commit | Line | Data |
---|---|---|
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 |