FastLED 3.9.15
Loading...
Searching...
No Matches

◆ decode()

template<typename Fn>
int fl::third_party::Mp3HelixDecoder::decode ( const fl::u8 * data,
fl::size len,
Fn on_frame )
inline

Definition at line 64 of file mp3.h.

64 {
65 if (!mDecoder) {
66 return 0;
67 }
68
69 const fl::u8* inptr = data;
70 fl::size bytes_left = len;
71 int frames_decoded = 0;
72
73 while (bytes_left > 0) {
74 // Find sync word
75 int offset = findSyncWord(inptr, bytes_left);
76 if (offset < 0) {
77 break; // No sync word found
78 }
79
80 inptr += offset;
81 bytes_left -= offset;
82
83 // Decode one frame
84 int result = decodeFrame(&inptr, &bytes_left);
85 if (result == 0) {
86 // Successfully decoded a frame
87 Mp3Frame frame;
88 frame.pcm = mPcmBuffer.get();
89 frame.samples = mFrameInfo.outputSamps / mFrameInfo.nChans;
90 frame.channels = mFrameInfo.nChans;
91 frame.sample_rate = mFrameInfo.samprate;
92 frame.bitrate = mFrameInfo.bitrate;
93 frame.version = mFrameInfo.version;
94 frame.layer = mFrameInfo.layer;
95
96 on_frame(frame);
97 frames_decoded++;
98 } else if (result < 0) {
99 // Decode error - skip a bit and try again
100 if (bytes_left > 0) {
101 inptr++;
102 bytes_left--;
103 }
104 }
105 }
106
107 return frames_decoded;
108 }
int decodeFrame(const fl::u8 **inbuf, fl::size *bytes_left)
Definition mp3.cpp.hpp:65
int findSyncWord(const fl::u8 *buf, fl::size len)
Definition mp3.cpp.hpp:60
fl::unique_ptr< fl::i16[]> mPcmBuffer
Definition mp3.h:117
fl::UISlider offset("Offset", 0.0f, 0.0f, 1.0f, 0.01f)
unsigned char u8
Definition coder.h:132
expected< T, E > result
Alias for expected (Rust-style naming)
Definition result.h:31

References fl::third_party::Mp3Frame::bitrate, fl::third_party::Mp3Frame::channels, decodeFrame(), findSyncWord(), fl::third_party::Mp3Frame::layer, mDecoder, mFrameInfo, mPcmBuffer, offset(), fl::third_party::Mp3Frame::pcm, fl::third_party::Mp3Frame::sample_rate, fl::third_party::Mp3Frame::samples, and fl::third_party::Mp3Frame::version.

Referenced by decodeToAudioSamples().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: