1515#include < audioapi/libs/ffmpeg/FFmpegDecoding.h>
1616#endif
1717
18- #include < memory>
19- #include < string>
20- #include < vector>
21-
2218namespace audioapi {
2319
2420// Decoding audio in fixed-size chunks because total frame count can't be
2521// determined in advance. Note: ma_decoder_get_length_in_pcm_frames() always
2622// returns 0 for Vorbis decoders.
27- std::vector<float > AudioDecoder::readAllPcmFrames (ma_decoder &decoder, int outputChannels) {
23+ std::vector<float > AudioDecoder::readAllPcmFrames (
24+ ma_decoder &decoder,
25+ int outputChannels) {
2826 std::vector<float > buffer;
2927 std::vector<float > temp (CHUNK_SIZE * outputChannels);
3028 ma_uint64 outFramesRead = 0 ;
3129
3230#ifndef AUDIO_API_TEST_SUITE
3331 while (true ) {
3432 ma_uint64 tempFramesDecoded = 0 ;
35- ma_decoder_read_pcm_frames (&decoder, temp.data (), CHUNK_SIZE, &tempFramesDecoded);
33+ ma_decoder_read_pcm_frames (
34+ &decoder, temp.data (), CHUNK_SIZE, &tempFramesDecoded);
3635 if (tempFramesDecoded == 0 ) {
3736 break ;
3837 }
3938
40- buffer.insert (buffer.end (), temp.data (), temp.data () + tempFramesDecoded * outputChannels);
39+ buffer.insert (
40+ buffer.end (),
41+ temp.data (),
42+ temp.data () + tempFramesDecoded * outputChannels);
4143 outFramesRead += tempFramesDecoded;
4244 }
4345
@@ -57,7 +59,8 @@ std::shared_ptr<AudioBuffer> AudioDecoder::makeAudioBufferFromFloatBuffer(
5759 }
5860
5961 auto outputFrames = buffer.size () / outputChannels;
60- auto audioBus = std::make_shared<AudioBus>(outputFrames, outputChannels, outputSampleRate);
62+ auto audioBus = std::make_shared<AudioBus>(
63+ outputFrames, outputChannels, outputSampleRate);
6164
6265 for (int ch = 0 ; ch < outputChannels; ++ch) {
6366 auto channelData = audioBus->getChannel (ch)->getData ();
@@ -73,21 +76,27 @@ std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithFilePath(
7376 float sampleRate) {
7477#ifndef AUDIO_API_TEST_SUITE
7578 if (AudioDecoder::pathHasExtension (path, {" .mp4" , " .m4a" , " .aac" })) {
76- auto buffer = ffmpegdecoder::decodeWithFilePath (path, static_cast <int >(sampleRate));
79+ auto buffer =
80+ ffmpegdecoder::decodeWithFilePath (path, static_cast <int >(sampleRate));
7781 if (buffer == nullptr ) {
7882 __android_log_print (
79- ANDROID_LOG_ERROR, " AudioDecoder" , " Failed to decode with FFmpeg: %s" , path.c_str ());
83+ ANDROID_LOG_ERROR,
84+ " AudioDecoder" ,
85+ " Failed to decode with FFmpeg: %s" ,
86+ path.c_str ());
8087 return nullptr ;
8188 }
8289 return buffer;
8390 }
8491 ma_decoder decoder;
85- ma_decoder_config config = ma_decoder_config_init (ma_format_f32, 0 , static_cast <int >(sampleRate));
92+ ma_decoder_config config =
93+ ma_decoder_config_init (ma_format_f32, 0 , static_cast <int >(sampleRate));
8694 ma_decoding_backend_vtable *customBackends[] = {
8795 ma_decoding_backend_libvorbis, ma_decoding_backend_libopus};
8896
8997 config.ppCustomBackendVTables = customBackends;
90- config.customBackendCount = sizeof (customBackends) / sizeof (customBackends[0 ]);
98+ config.customBackendCount =
99+ sizeof (customBackends) / sizeof (customBackends[0 ]);
91100
92101 if (ma_decoder_init_file (path.c_str (), &config, &decoder) != MA_SUCCESS) {
93102 __android_log_print (
@@ -104,36 +113,46 @@ std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithFilePath(
104113
105114 std::vector<float > buffer = readAllPcmFrames (decoder, outputChannels);
106115 ma_decoder_uninit (&decoder);
107- return makeAudioBufferFromFloatBuffer (buffer, outputSampleRate, outputChannels);
116+ return makeAudioBufferFromFloatBuffer (
117+ buffer, outputSampleRate, outputChannels);
108118#else
109119 return nullptr ;
110120#endif
111121}
112122
113- std::shared_ptr<AudioBuffer>
114- AudioDecoder::decodeWithMemoryBlock (const void *data, size_t size, float sampleRate) {
123+ std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithMemoryBlock (
124+ const void *data,
125+ size_t size,
126+ float sampleRate) {
115127#ifndef AUDIO_API_TEST_SUITE
116128 const AudioFormat format = AudioDecoder::detectAudioFormat (data, size);
117- if (format == AudioFormat::MP4 || format == AudioFormat::M4A || format == AudioFormat::AAC) {
118- auto buffer = ffmpegdecoder::decodeWithMemoryBlock (data, size, static_cast <int >(sampleRate));
129+ if (format == AudioFormat::MP4 || format == AudioFormat::M4A ||
130+ format == AudioFormat::AAC) {
131+ auto buffer = ffmpegdecoder::decodeWithMemoryBlock (
132+ data, size, static_cast <int >(sampleRate));
119133 if (buffer == nullptr ) {
120- __android_log_print (ANDROID_LOG_ERROR, " AudioDecoder" , " Failed to decode with FFmpeg" );
134+ __android_log_print (
135+ ANDROID_LOG_ERROR, " AudioDecoder" , " Failed to decode with FFmpeg" );
121136 return nullptr ;
122137 }
123138 return buffer;
124139 }
125140 ma_decoder decoder;
126- ma_decoder_config config = ma_decoder_config_init (ma_format_f32, 0 , static_cast <int >(sampleRate));
141+ ma_decoder_config config =
142+ ma_decoder_config_init (ma_format_f32, 0 , static_cast <int >(sampleRate));
127143
128144 ma_decoding_backend_vtable *customBackends[] = {
129145 ma_decoding_backend_libvorbis, ma_decoding_backend_libopus};
130146
131147 config.ppCustomBackendVTables = customBackends;
132- config.customBackendCount = sizeof (customBackends) / sizeof (customBackends[0 ]);
148+ config.customBackendCount =
149+ sizeof (customBackends) / sizeof (customBackends[0 ]);
133150
134151 if (ma_decoder_init_memory (data, size, &config, &decoder) != MA_SUCCESS) {
135152 __android_log_print (
136- ANDROID_LOG_ERROR, " AudioDecoder" , " Failed to initialize decoder for memory block" );
153+ ANDROID_LOG_ERROR,
154+ " AudioDecoder" ,
155+ " Failed to initialize decoder for memory block" );
137156 ma_decoder_uninit (&decoder);
138157 return nullptr ;
139158 }
@@ -143,7 +162,8 @@ AudioDecoder::decodeWithMemoryBlock(const void *data, size_t size, float sampleR
143162
144163 std::vector<float > buffer = readAllPcmFrames (decoder, outputChannels);
145164 ma_decoder_uninit (&decoder);
146- return makeAudioBufferFromFloatBuffer (buffer, outputSampleRate, outputChannels);
165+ return makeAudioBufferFromFloatBuffer (
166+ buffer, outputSampleRate, outputChannels);
147167#else
148168 return nullptr ;
149169#endif
@@ -156,9 +176,11 @@ std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithPCMInBase64(
156176 bool interleaved) {
157177 auto decodedData = base64_decode (data, false );
158178 const auto uint8Data = reinterpret_cast <uint8_t *>(decodedData.data ());
159- size_t numFramesDecoded = decodedData.size () / (inputChannelCount * sizeof (int16_t ));
179+ size_t numFramesDecoded =
180+ decodedData.size () / (inputChannelCount * sizeof (int16_t ));
160181
161- auto audioBus = std::make_shared<AudioBus>(numFramesDecoded, inputChannelCount, inputSampleRate);
182+ auto audioBus = std::make_shared<AudioBus>(
183+ numFramesDecoded, inputChannelCount, inputSampleRate);
162184
163185 for (int ch = 0 ; ch < inputChannelCount; ++ch) {
164186 auto channelData = audioBus->getChannel (ch)->getData ();
0 commit comments