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