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