@@ -10,7 +10,7 @@ namespace audio_tools {
10
10
#define FOXEN_OUT_BUFFER_SIZE 1024 * 4
11
11
12
12
/* *
13
- * @brief Foxen FLAC Decoder.
13
+ * @brief Foxen FLAC Decoder using https://github.com/astoeckel/libfoxenflac
14
14
* @ingroup codecs
15
15
* @ingroup decoder
16
16
* @author Phil Schatzmann
@@ -49,10 +49,9 @@ class FLACDecoderFoxen : public AudioDecoder {
49
49
LOGE (" not enough memory" );
50
50
if (is_stop_on_error) stop ();
51
51
}
52
- if (buffer.size () == 0 ) {
53
- buffer.resize (in_buffer_size);
54
- out.resize (FOXEN_OUT_BUFFER_SIZE);
55
- }
52
+
53
+ write_buffer.resize (in_buffer_size);
54
+ out.resize (out_buffer_size);
56
55
57
56
return is_active;
58
57
}
@@ -64,7 +63,7 @@ class FLACDecoderFoxen : public AudioDecoder {
64
63
foxen_data.resize (0 );
65
64
flac = nullptr ;
66
65
}
67
- buffer .resize (0 );
66
+ write_buffer .resize (0 );
68
67
out.resize (0 );
69
68
is_active = false ;
70
69
}
@@ -74,15 +73,15 @@ class FLACDecoderFoxen : public AudioDecoder {
74
73
// no processing if not active
75
74
if (!is_active) return 0 ;
76
75
77
- size_t result = buffer .writeArray (data, len);
78
- LOGD (" buffer availabe: %d" , buffer .available ());
76
+ size_t result = write_buffer .writeArray (data, len);
77
+ LOGD (" write_buffer availabe: %d" , write_buffer .available ());
79
78
80
- while (buffer .available () > 0 ) {
79
+ while (write_buffer .available () > 0 ) {
81
80
if (!decode ()) break ;
82
81
}
83
82
84
83
// if the buffer is full we could not decode anything
85
- if (buffer .available () == buffer .size ()) {
84
+ if (write_buffer .available () == write_buffer .size ()) {
86
85
LOGE (" Decoder did not consume any data" );
87
86
if (is_stop_on_error) stop ();
88
87
}
@@ -96,33 +95,24 @@ class FLACDecoderFoxen : public AudioDecoder {
96
95
operator bool () override { return is_active; }
97
96
98
97
// / Defines the input buffer size (default is 2k)
99
- void setInBufferSize (int size){
100
- in_buffer_size = size;
101
- }
98
+ void setInBufferSize (int size) { in_buffer_size = size; }
102
99
103
- // / Defines the number of 32 bit samples for providing the result (default is 4k)
104
- void setOutBufferSize (int size){
105
- out_buffer_size = size;
106
- }
100
+ // / Defines the number of 32 bit samples for providing the result (default is
101
+ // / 4k)
102
+ void setOutBufferSize (int size) { out_buffer_size = size; }
107
103
108
104
// / Defines the maximum FLAC blocksize: drives the buffer allocation
109
- void setMaxBlockSize (int size){
110
- max_block_size = size;
111
- }
105
+ void setMaxBlockSize (int size) { max_block_size = size; }
112
106
113
107
// / Defines the maximum number of channels: drives the buffer allocation
114
- void setMaxChannels (int ch){
115
- max_channels = ch;
116
- }
108
+ void setMaxChannels (int ch) { max_channels = ch; }
117
109
118
110
// / Select between 16 and 32 bit output: the default is 16 bits
119
- void set32Bit (bool flag) {
120
- is_convert_to_16 = !flag;
121
- }
111
+ void set32Bit (bool flag) { is_convert_to_16 = !flag; }
122
112
123
113
protected:
124
114
fx_flac_t *flac = nullptr ;
125
- SingleBuffer<uint8_t > buffer {0 };
115
+ SingleBuffer<uint8_t > write_buffer {0 };
126
116
Vector<int32_t > out;
127
117
Vector<uint8_t > foxen_data{0 };
128
118
bool is_active = false ;
@@ -138,10 +128,10 @@ class FLACDecoderFoxen : public AudioDecoder {
138
128
TRACED ();
139
129
if (flac == nullptr ) return false ;
140
130
uint32_t out_len = out.size ();
141
- uint32_t buf_len = buffer .available ();
131
+ uint32_t buf_len = write_buffer .available ();
142
132
uint32_t buf_len_result = buf_len;
143
- int rc = fx_flac_process (flac, buffer .data (), &buf_len_result, out. data () ,
144
- &out_len);
133
+ int rc = fx_flac_process (flac, write_buffer .data (), &buf_len_result,
134
+ out. data (), &out_len);
145
135
// assert(out_len <= FOXEN_OUT_BUFFER_SIZE);
146
136
147
137
switch (rc) {
@@ -168,7 +158,7 @@ class FLACDecoderFoxen : public AudioDecoder {
168
158
LOGD (" processed: %d bytes of %d -> %d samples" , buf_len_result, buf_len,
169
159
out_len);
170
160
// removed processed bytes from buffer
171
- buffer .clearArray (buf_len_result);
161
+ write_buffer .clearArray (buf_len_result);
172
162
return buf_len_result > 0 || out_len > 0 ;
173
163
}
174
164
0 commit comments