add abstraction layer for pcm reading
[fdkaac.git] / src / pcm_reader.h
CommitLineData
2d744bd5 1#ifndef PCM_READER_H
2#define PCM_READER_H
3
4typedef struct pcm_reader_t pcm_reader_t;
5
6typedef 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
14struct pcm_reader_t {
15 pcm_reader_vtbl_t *vtbl;
16};
17
18static inline
19const pcm_sample_description_t *pcm_get_format(pcm_reader_t *r)
20{
21 return r->vtbl->get_format(r);
22}
23
24static inline
25int64_t pcm_get_length(pcm_reader_t *r)
26{
27 return r->vtbl->get_length(r);
28}
29
30static inline
31int64_t pcm_get_position(pcm_reader_t *r)
32{
33 return r->vtbl->get_position(r);
34}
35
36static inline
37int64_t pcm_read_frames(pcm_reader_t *r, void *data, unsigned nframes)
38{
39 return r->vtbl->read_frames(r, data, nframes);
40}
41
42static inline
43void pcm_teardown(pcm_reader_t **r)
44{
45 (*r)->vtbl->teardown(r);
46}
47
48#endif
This page took 0.010429 seconds and 4 git commands to generate.