Mercurial > repos > blastem
comparison flac.h @ 2298:9d68799f945b
Added basic FLAC seek implementation and added support for FLAC tracks in CUE sheets
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 09 Mar 2023 22:49:42 -0800 |
parents | 789802d99629 |
children |
comparison
equal
deleted
inserted
replaced
2297:e6b2b2341c68 | 2298:9d68799f945b |
---|---|
4 #include <stdint.h> | 4 #include <stdint.h> |
5 #include <stdio.h> | 5 #include <stdio.h> |
6 | 6 |
7 typedef struct flac_file flac_file; | 7 typedef struct flac_file flac_file; |
8 | 8 |
9 typedef uint8_t (*flac_read)(flac_file *f); | 9 typedef uint8_t (*flac_read_fun)(flac_file *f); |
10 typedef void (*flac_seek)(flac_file *f, uint32_t offset, uint8_t relative); | 10 typedef void (*flac_seek_fun)(flac_file *f, uint32_t offset, uint8_t relative); |
11 typedef uint32_t (*flac_tell_fun)(flac_file *f); | |
11 | 12 |
12 typedef struct { | 13 typedef struct { |
13 uint32_t allocated_samples; | 14 uint32_t allocated_samples; |
14 int32_t *decoded; | 15 int32_t *decoded; |
15 } flac_subframe; | 16 } flac_subframe; |
16 | 17 |
18 typedef struct { | |
19 uint64_t sample_number; | |
20 uint64_t offset; | |
21 uint16_t sample_count; | |
22 } flac_seekpoint; | |
23 | |
17 struct flac_file { | 24 struct flac_file { |
18 uint64_t total_samples; | 25 uint64_t total_samples; |
19 uint64_t frame_start_sample; | 26 uint64_t frame_start_sample; |
20 void *read_data; | 27 void *read_data; |
21 flac_read read_byte; | 28 flac_read_fun read_byte; |
22 flac_seek seek; | 29 flac_seek_fun seek; |
23 flac_subframe *subframes; | 30 flac_tell_fun tell; |
24 uint32_t offset; | 31 flac_subframe *subframes; |
25 uint32_t buffer_size; | 32 flac_seekpoint *seekpoints; |
33 uint32_t num_seekpoints; | |
34 uint32_t offset; | |
35 uint32_t buffer_size; | |
36 uint32_t first_frame_offset; | |
26 | 37 |
27 uint32_t frame_sample_pos; | 38 uint32_t frame_sample_pos; |
28 uint32_t remaining_frame_samples; | |
29 | 39 |
30 uint32_t sample_rate; | 40 uint32_t sample_rate; |
31 uint32_t frame_sample_rate; | 41 uint32_t frame_sample_rate; |
32 uint32_t frame_block_size; | 42 uint32_t frame_block_size; |
33 uint8_t bits_per_sample; | 43 uint8_t bits_per_sample; |
34 uint8_t frame_bits_per_sample; | 44 uint8_t frame_bits_per_sample; |
35 uint8_t channels; | 45 uint8_t channels; |
36 uint8_t frame_channels; | 46 uint8_t frame_channels; |
37 uint8_t frame_joint_stereo; | 47 uint8_t frame_joint_stereo; |
38 uint8_t subframe_alloc; | 48 uint8_t subframe_alloc; |
39 | 49 |
40 uint8_t cur_byte; | 50 uint8_t cur_byte; |
41 uint8_t bits; | 51 uint8_t bits; |
42 }; | 52 }; |
43 | 53 |
44 flac_file *flac_file_from_buffer(void *buffer, uint32_t size); | 54 flac_file *flac_file_from_buffer(void *buffer, uint32_t size); |
45 flac_file *flac_file_from_file(FILE *file); | 55 flac_file *flac_file_from_file(FILE *file); |
46 uint8_t flac_get_sample(flac_file *f, int16_t *out, uint8_t desired_channels); | 56 uint8_t flac_get_sample(flac_file *f, int16_t *out, uint8_t desired_channels); |
57 void flac_seek(flac_file *f, uint64_t sample_number); | |
47 | 58 |
48 #endif //FLAC_H_ | 59 #endif //FLAC_H_ |