121 for (i = 0; i < nBytes - 1; i++) {
156 const unsigned char *bufPtr = buf;
168 }
else if ( (bufPtr[0] == firstFH[0]) && (bufPtr[1] == firstFH[1]) && ((bufPtr[2] & 0xfc) == (firstFH[2] & 0xfc)) ) {
170 if ((firstFH[2] >> 1) & 0x01)
200 if (!mp3DecInfo || mp3DecInfo->
layer != 3) {
201 mp3FrameInfo->bitrate = 0;
202 mp3FrameInfo->nChans = 0;
203 mp3FrameInfo->samprate = 0;
204 mp3FrameInfo->bitsPerSample = 0;
205 mp3FrameInfo->outputSamps = 0;
206 mp3FrameInfo->layer = 0;
207 mp3FrameInfo->version = 0;
209 mp3FrameInfo->bitrate = mp3DecInfo->
bitrate;
210 mp3FrameInfo->nChans = mp3DecInfo->
nChans;
211 mp3FrameInfo->samprate = mp3DecInfo->
samprate;
212 mp3FrameInfo->bitsPerSample = 16;
214 mp3FrameInfo->layer = mp3DecInfo->
layer;
215 mp3FrameInfo->version = mp3DecInfo->
version;
267 for (i = 0; i < mp3DecInfo->nGrans * mp3DecInfo->nGranSamps * mp3DecInfo->nChans; i++)
294 int offset, bitOffset, mainBits, gr, ch, fhBytes, siBytes, freeFrameBytes;
295 int prevBitOffset, sfBlockBits, huffBlockBits;
296 const unsigned char *mainPtr;
313 time = systime_get();
322 *bytesLeft -= (fhBytes + siBytes);
352 mp3DecInfo->
nSlots = *bytesLeft;
362 *inbuf += mp3DecInfo->
nSlots;
363 *bytesLeft -= (mp3DecInfo->
nSlots);
366 if (mp3DecInfo->
nSlots > (
int)*bytesLeft) {
372 time = systime_get();
381 *inbuf += mp3DecInfo->
nSlots;
382 *bytesLeft -= (mp3DecInfo->
nSlots);
388 *inbuf += mp3DecInfo->
nSlots;
389 *bytesLeft -= (mp3DecInfo->
nSlots);
403 for (gr = 0; gr < mp3DecInfo->
nGrans; gr++) {
404 for (ch = 0; ch < mp3DecInfo->
nChans; ch++) {
407 time = systime_get();
410 prevBitOffset = bitOffset;
417 sfBlockBits = 8*
offset - prevBitOffset + bitOffset;
418 huffBlockBits = mp3DecInfo->
part23Length[gr][ch] - sfBlockBits;
420 mainBits -= sfBlockBits;
422 if (
offset < 0 || mainBits < huffBlockBits) {
428 time = systime_get();
431 prevBitOffset = bitOffset;
443 mainBits -= (8*
offset - prevBitOffset + bitOffset);
447 time = systime_get();
460 for (ch = 0; ch < mp3DecInfo->
nChans; ch++)
463 time = systime_get();
465 if (
IMDCT(mp3DecInfo, gr, ch) < 0) {
476 time = systime_get();
fl::UISlider offset("Offset", 0.0f, 0.0f, 1.0f, 0.01f)
struct _MP3DecInfo MP3DecInfo
int part23Length[MAX_NGRAN][MAX_NCHAN]
unsigned char mainBuf[MAINBUF_SIZE]
@ ERR_MP3_INVALID_SCALEFACT
@ ERR_MP3_INDATA_UNDERFLOW
@ ERR_MP3_MAINDATA_UNDERFLOW
@ ERR_MP3_INVALID_HUFFCODES
@ ERR_MP3_INVALID_FRAMEHEADER
@ ERR_MP3_INVALID_SUBBAND
@ ERR_MP3_INVALID_DEQUANTIZE
@ ERR_MP3_FREE_BITRATE_SYNC
@ ERR_MP3_INVALID_SIDEINFO
struct _MP3FrameInfo MP3FrameInfo
int MP3FindSyncWord(const unsigned char *buf, int nBytes) FL_NOEXCEPT
int Dequantize(MP3DecInfo *mp3DecInfo, int gr) FL_NOEXCEPT
static void MP3ClearBadFrame(MP3DecInfo *mp3DecInfo, short *outbuf) FL_NOEXCEPT
void MP3FreeDecoder(HMP3Decoder hMP3Decoder) FL_NOEXCEPT
HMP3Decoder MP3InitDecoder(void) FL_NOEXCEPT
int UnpackFrameHeader(MP3DecInfo *mp3DecInfo, const unsigned char *buf) FL_NOEXCEPT
int UnpackScaleFactors(MP3DecInfo *mp3DecInfo, const unsigned char *buf, int *bitOffset, int bitsAvail, int gr, int ch) FL_NOEXCEPT
int MP3Decode(HMP3Decoder hMP3Decoder, const unsigned char **inbuf, size_t *bytesLeft, short *outbuf, int useSize) FL_NOEXCEPT
void MP3GetLastFrameInfo(HMP3Decoder hMP3Decoder, MP3FrameInfo *mp3FrameInfo) FL_NOEXCEPT
static int MP3FindFreeSync(const unsigned char *buf, const unsigned char firstFH[4], int nBytes) FL_NOEXCEPT
int UnpackSideInfo(MP3DecInfo *mp3DecInfo, const unsigned char *buf) FL_NOEXCEPT
const short samplesPerFrameTab[3][3]
int DecodeHuffman(MP3DecInfo *mp3DecInfo, const unsigned char *buf, int *bitOffset, int huffBlockBits, int gr, int ch) FL_NOEXCEPT
void FreeBuffers(MP3DecInfo *mp3DecInfo) FL_NOEXCEPT
int IMDCT(MP3DecInfo *mp3DecInfo, int gr, int ch) FL_NOEXCEPT
MP3DecInfo * AllocateBuffers(void) FL_NOEXCEPT
int MP3GetNextFrameInfo(HMP3Decoder hMP3Decoder, MP3FrameInfo *mp3FrameInfo, unsigned char *buf) FL_NOEXCEPT
int Subband(MP3DecInfo *mp3DecInfo, short *pcmBuf) FL_NOEXCEPT
int CheckPadBit(MP3DecInfo *mp3DecInfo) FL_NOEXCEPT
fl::u64 time() FL_NOEXCEPT
Alias for millis64() - returns 64-bit millisecond time.
void printf(const char *format, const Args &... args) FL_NOEXCEPT
Printf-like formatting function that prints directly to the platform output.
void * memcopy(void *dest, const void *src, size_t n) FL_NOEXCEPT
void * memmove(void *dest, const void *src, size_t n) FL_NOEXCEPT
Base definition for an LED controller.