| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 | #include "OPUSDecoder.h"#include <stdlib.h>  // for free, malloc#include "CodecType.h"  // for bell#include "opus.h"       // for opus_decoder_destroy, opus_decode, opus_decod...using namespace bell;#define MAX_FRAME_SIZE 6 * 960#define MAX_CHANNELS 2// dummy structure, just to get access to channelsstruct OpusDecoder {  int dummy1;  int dummy2;  int channels;};OPUSDecoder::OPUSDecoder() {  opus = nullptr;  pcmData = (int16_t*)malloc(MAX_FRAME_SIZE * MAX_CHANNELS * sizeof(int16_t));}OPUSDecoder::~OPUSDecoder() {  if (opus)    opus_decoder_destroy(opus);  free(pcmData);}bool OPUSDecoder::setup(uint32_t sampleRate, uint8_t channelCount,                        uint8_t bitDepth) {  if (opus)    opus_decoder_destroy(opus);  opus = opus_decoder_create((int32_t)sampleRate, channelCount, &lastErrno);  return !lastErrno;}uint8_t* OPUSDecoder::decode(uint8_t* inData, uint32_t& inLen,                             uint32_t& outLen) {  if (!inData)    return nullptr;  outLen =      opus_decode(opus, static_cast<unsigned char*>(inData),                  static_cast<int32_t>(inLen), pcmData, MAX_FRAME_SIZE, false);  outLen *= opus->channels * sizeof(int16_t);  inLen = 0;  return (uint8_t*)pcmData;}
 |