reimplement int16 conversion as pcm_reader
[fdkaac.git] / src / pcm_reader.h
1 #ifndef PCM_READER_H
2 #define PCM_READER_H
3
4 #include "lpcm.h"
5
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
50 pcm_reader_t *pcm_open_sint16_converter(pcm_reader_t *reader);
51
52 #endif
This page took 0.022477 seconds and 4 git commands to generate.