1
0
mirror of https://github.com/nu774/fdkaac.git synced 2025-06-05 23:29:14 +02:00

add abstraction layer for pcm reading

This commit is contained in:
nu774
2013-10-20 22:47:40 +09:00
parent 2f6fc566cc
commit 2d744bd56c
5 changed files with 152 additions and 74 deletions

48
src/pcm_reader.h Normal file
View File

@@ -0,0 +1,48 @@
#ifndef PCM_READER_H
#define PCM_READER_H
typedef struct pcm_reader_t pcm_reader_t;
typedef struct pcm_reader_vtbl_t {
const pcm_sample_description_t *(*get_format)(pcm_reader_t *);
int64_t (*get_length)(pcm_reader_t *);
int64_t (*get_position)(pcm_reader_t *);
int (*read_frames)(pcm_reader_t *, void *, unsigned);
void (*teardown)(pcm_reader_t **);
} pcm_reader_vtbl_t;
struct pcm_reader_t {
pcm_reader_vtbl_t *vtbl;
};
static inline
const pcm_sample_description_t *pcm_get_format(pcm_reader_t *r)
{
return r->vtbl->get_format(r);
}
static inline
int64_t pcm_get_length(pcm_reader_t *r)
{
return r->vtbl->get_length(r);
}
static inline
int64_t pcm_get_position(pcm_reader_t *r)
{
return r->vtbl->get_position(r);
}
static inline
int64_t pcm_read_frames(pcm_reader_t *r, void *data, unsigned nframes)
{
return r->vtbl->read_frames(r, data, nframes);
}
static inline
void pcm_teardown(pcm_reader_t **r)
{
(*r)->vtbl->teardown(r);
}
#endif