comparison flac.h @ 2296:789802d99629

Add basic FLAC decoder and add FLAC playback support to the media player
author Michael Pavone <pavone@retrodev.com>
date Sun, 19 Feb 2023 21:12:46 -0800
parents
children 9d68799f945b
comparison
equal deleted inserted replaced
2295:eb45ad9d8a3f 2296:789802d99629
1 #ifndef FLAC_H_
2 #define FLAC_H_
3
4 #include <stdint.h>
5 #include <stdio.h>
6
7 typedef struct flac_file flac_file;
8
9 typedef uint8_t (*flac_read)(flac_file *f);
10 typedef void (*flac_seek)(flac_file *f, uint32_t offset, uint8_t relative);
11
12 typedef struct {
13 uint32_t allocated_samples;
14 int32_t *decoded;
15 } flac_subframe;
16
17 struct flac_file {
18 uint64_t total_samples;
19 uint64_t frame_start_sample;
20 void *read_data;
21 flac_read read_byte;
22 flac_seek seek;
23 flac_subframe *subframes;
24 uint32_t offset;
25 uint32_t buffer_size;
26
27 uint32_t frame_sample_pos;
28 uint32_t remaining_frame_samples;
29
30 uint32_t sample_rate;
31 uint32_t frame_sample_rate;
32 uint32_t frame_block_size;
33 uint8_t bits_per_sample;
34 uint8_t frame_bits_per_sample;
35 uint8_t channels;
36 uint8_t frame_channels;
37 uint8_t frame_joint_stereo;
38 uint8_t subframe_alloc;
39
40 uint8_t cur_byte;
41 uint8_t bits;
42 };
43
44 flac_file *flac_file_from_buffer(void *buffer, uint32_t size);
45 flac_file *flac_file_from_file(FILE *file);
46 uint8_t flac_get_sample(flac_file *f, int16_t *out, uint8_t desired_channels);
47
48 #endif //FLAC_H_