Mercurial > hg > svcore
diff data/fileio/MP3FileReader.h @ 1288:5ef9b4d4bbdb 3.0-integration
Filter out Xing/LAME info frames, rather than letting them go to the mp3 decoder as if they were audio frames. Fixes the 1152-sample zero pad at start of some decoded mp3 files (distinct from decoder delay). The logic here is based on the madplay code.
author | Chris Cannam |
---|---|
date | Thu, 24 Nov 2016 13:32:04 +0000 |
parents | 16a8e97179d7 |
children | fa574c909c3d |
line wrap: on
line diff
--- a/data/fileio/MP3FileReader.h Wed Nov 23 14:51:03 2016 +0000 +++ b/data/fileio/MP3FileReader.h Thu Nov 24 13:32:04 2016 +0000 @@ -71,6 +71,7 @@ sv_frame_t m_fileSize; double m_bitrateNum; int m_bitrateDenom; + int m_mp3FrameCount; int m_completion; bool m_done; @@ -86,16 +87,21 @@ struct DecoderData { unsigned char const *start; - unsigned long length; + sv_frame_t length; MP3FileReader *reader; }; bool decode(void *mm, sv_frame_t sz); + enum mad_flow filter(struct mad_stream const *, struct mad_frame *); enum mad_flow accept(struct mad_header const *, struct mad_pcm *); - static enum mad_flow input(void *, struct mad_stream *); - static enum mad_flow output(void *, struct mad_header const *, struct mad_pcm *); - static enum mad_flow error(void *, struct mad_stream *, struct mad_frame *); + static enum mad_flow input_callback(void *, struct mad_stream *); + static enum mad_flow output_callback(void *, struct mad_header const *, + struct mad_pcm *); + static enum mad_flow filter_callback(void *, struct mad_stream const *, + struct mad_frame *); + static enum mad_flow error_callback(void *, struct mad_stream *, + struct mad_frame *); class DecodeThread : public Thread {