Arduino LibHelix
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
libhelix::MP3DecoderHelix Class Reference

A simple Arduino API for the libhelix MP3 decoder. The data is provided with the help of write() calls. The decoded result is available either via a callback method or via an output stream. More...

#include <MP3DecoderHelix.h>

Inheritance diagram for libhelix::MP3DecoderHelix:
libhelix::CommonHelix

Public Member Functions

 MP3DecoderHelix (Print &output, MP3Type mp3Type=MP3Normal)
 
 MP3DecoderHelix (MP3DataCallback dataCallback, MP3Type mp3Type=MP3Normal)
 
 MP3DecoderHelix (MP3Type mp3Type)
 
void setInfoCallback (MP3InfoCallback cb, void *caller=nullptr)
 
void setDataCallback (MP3DataCallback cb)
 
MP3FrameInfo audioInfo ()
 Provides the last available MP3FrameInfo.
 
void end () override
 Releases the reserved memory.
 
size_t maxFrameSize () override
 determines the frame buffer size that will be allocated
 
size_t maxPCMSize () override
 Determines the pcm buffer size that will be allocated.
 
void setOutput (Print &output)
 
virtual bool begin ()
 Starts the processing.
 
virtual size_t write (const void *in_ptr, size_t in_size)
 decodes the next segments from the input. The data can be provided in one short or in small incremental pieces. It is suggested to be called in the Arduino Loop. If the provided data does not fit into the buffer it is split up into small pieces that fit
 
 operator bool ()
 returns true if active
 
virtual void setDelay (int delayMs)
 Defines the delay that is added at each segment.
 
uint64_t timeOfLastWrite ()
 Provides the timestamp in ms of last write.
 
uint64_t timeOfLastResult ()
 Provides the timestamp in ms of last decoded result.
 
void flush ()
 Decode open packets.
 
void setMaxFrameSize (size_t len)
 Define your optimized maximum frame size in bytes.
 
void setMaxPCMSize (size_t len)
 Define your optimized maximum pcm buffer size in bytes.
 
void setRaw (bool)
 Obsolete!
 

Protected Member Functions

virtual bool allocateDecoder () override
 Allocate the decoder.
 
int findSynchWord (int offset=0) override
 
int decode () override
 decods the data and removes the decoded frame from the buffer
 
void provideResult (MP3FrameInfo &info)
 
bool presync ()
 make sure that we start with a valid sync: remove ID3 data
 
bool resynch (int rc)
 
bool removeInvalidData (int pos)
 
virtual size_t writeChunk (const void *in_ptr, size_t in_size)
 
virtual int minFrameBufferSize ()
 

Protected Attributes

HMP3Decoder decoder = nullptr
 
MP3DataCallback pcmCallback = nullptr
 
MP3InfoCallback infoCallback = nullptr
 
MP3Type mp3_type
 
MP3FrameInfo mp3FrameInfo
 
void * p_caller_ref = nullptr
 
void * p_caller_data = nullptr
 
bool active = false
 
bool is_raw = false
 
Vector< uint8_t > pcm_buffer {0}
 
SingleBuffer< uint8_t > frame_buffer {0}
 
size_t max_frame_size = 0
 
size_t max_pcm_size = 0
 
size_t frame_counter = 0
 
int delay_ms = -1
 
uint64_t time_last_write = 0
 
uint64_t time_last_result = 0
 
Print * out = nullptr
 

Detailed Description

A simple Arduino API for the libhelix MP3 decoder. The data is provided with the help of write() calls. The decoded result is available either via a callback method or via an output stream.

Author
Phil Schatzmann

Member Function Documentation

◆ findSynchWord()

int libhelix::MP3DecoderHelix::findSynchWord ( int  offset = 0)
inlineoverrideprotectedvirtual

Finds the synch word in the available buffer data starting from the indicated offset

Implements libhelix::CommonHelix.

◆ removeInvalidData()

bool libhelix::CommonHelix::removeInvalidData ( int  pos)
inlineprotectedinherited

removes invalid data not starting with a synch word.

Returns
Returns true if we still have data to be played

◆ resynch()

bool libhelix::CommonHelix::resynch ( int  rc)
inlineprotectedinherited

advance on invalid data, returns true if we need to continue the processing

◆ writeChunk()

virtual size_t libhelix::CommonHelix::writeChunk ( const void *  in_ptr,
size_t  in_size 
)
inlineprotectedvirtualinherited

Prevent bug in underflow detection for AAC


The documentation for this class was generated from the following file: