| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 | #include "MP3Decoder.h"#include <stdlib.h>  // for free, malloc#include <cstdio>namespace bell {class AudioContainer;}  // namespace bellusing namespace bell;MP3Decoder::MP3Decoder() {  mp3 = MP3InitDecoder();  pcmData =      (int16_t*)malloc(MAX_NSAMP * MAX_NGRAN * MAX_NCHAN * sizeof(int16_t));}MP3Decoder::~MP3Decoder() {  MP3FreeDecoder(mp3);  free(pcmData);}bool MP3Decoder::setup(uint32_t sampleRate, uint8_t channelCount,                       uint8_t bitDepth) {  return true;}bool MP3Decoder::setup(AudioContainer* container) {  return true;}uint8_t* MP3Decoder::decode(uint8_t* inData, uint32_t& inLen,                            uint32_t& outLen) {  if (!inData || inLen == 0)    return nullptr;  int status = MP3Decode(mp3, static_cast<unsigned char**>(&inData),                         reinterpret_cast<int*>(&inLen),                         static_cast<short*>(this->pcmData),                         /* useSize */ 0);  MP3GetLastFrameInfo(mp3, &frame);  if (status != ERR_MP3_NONE) {    lastErrno = status;    inLen -= 2;    outLen = 0;    return nullptr;  }  if (sampleRate != frame.samprate) {    this->sampleRate = frame.samprate;  }  if (channelCount != frame.nChans) {    this->channelCount = frame.nChans;  }  outLen = frame.outputSamps * sizeof(int16_t);  return (uint8_t*)pcmData;}
 |