1 // license:BSD-3-Clause
2 // copyright-holders:Aaron Giles
3 /***************************************************************************
4 
5     flac.h
6 
7     FLAC compression wrappers
8 
9 ***************************************************************************/
10 
11 #pragma once
12 
13 #ifndef __FLAC_H__
14 #define __FLAC_H__
15 
16 #include <stdint.h>
17 #include "FLAC/all.h"
18 
19 //**************************************************************************
20 //  TYPE DEFINITIONS
21 //**************************************************************************
22 
23 typedef struct _flac_decoder flac_decoder;
24 struct _flac_decoder {
25 		// output state
26 	FLAC__StreamDecoder*	decoder;				// actual encoder
27 	uint32_t                sample_rate;			// decoded sample rate
28 	uint8_t                 channels;				// decoded number of channels
29 	uint8_t                 bits_per_sample;		// decoded bits per sample
30 	uint32_t                compressed_offset;		// current offset in compressed data
31 	const FLAC__byte *      compressed_start;		// start of compressed data
32 	uint32_t                compressed_length;		// length of compressed data
33 	const FLAC__byte *      compressed2_start;		// start of compressed data
34 	uint32_t                compressed2_length;		// length of compressed data
35 	int16_t *               uncompressed_start[8];	// pointer to start of uncompressed data (up to 8 streams)
36 	uint32_t                uncompressed_offset;	// current position in uncompressed data
37 	uint32_t                uncompressed_length;	// length of uncompressed data
38 	int                    	uncompressed_swap;		// swap uncompressed sample data
39 	uint8_t                 custom_header[0x2a];	// custom header
40 };
41 
42 // ======================> flac_decoder
43 
44 void 		flac_decoder_init(flac_decoder* decoder);
45 void 		flac_decoder_free(flac_decoder* decoder);
46 int 		flac_decoder_reset(flac_decoder* decoder, uint32_t sample_rate, uint8_t num_channels, uint32_t block_size, const void *buffer, uint32_t length);
47 int 		flac_decoder_decode_interleaved(flac_decoder* decoder, int16_t *samples, uint32_t num_samples, int swap_endian);
48 uint32_t 	flac_decoder_finish(flac_decoder* decoder);
49 
50 #endif // __FLAC_H__
51