| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 | #include "AudioCodecs.h"#include <map>          // for map, operator!=, map<>::iterator, map<>:...#include <type_traits>  // for remove_extent_t#include "AudioContainer.h"  // for AudioContainernamespace bell {class BaseCodec;}  // namespace bellusing namespace bell;#ifdef BELL_CODEC_AAC#include "AACDecoder.h"  // for AACDecoderstatic std::shared_ptr<AACDecoder> codecAac;#endif#ifdef BELL_CODEC_MP3#include "MP3Decoder.h"  // for MP3Decoderstatic std::shared_ptr<MP3Decoder> codecMp3;#endif#ifdef BELL_CODEC_VORBIS#include "VorbisDecoder.h"  // for VorbisDecoderstatic std::shared_ptr<VorbisDecoder> codecVorbis;#endif#ifdef BELL_CODEC_OPUS#include "OPUSDecoder.h"  // for OPUSDecoderstatic std::shared_ptr<OPUSDecoder> codecOpus;#endifstd::map<AudioCodec, std::shared_ptr<BaseCodec>> customCodecs;std::shared_ptr<BaseCodec> AudioCodecs::getCodec(AudioCodec type) {  if (customCodecs.find(type) != customCodecs.end())    return customCodecs[type];  switch (type) {#ifdef BELL_CODEC_AAC    case AudioCodec::AAC:      if (codecAac)        return codecAac;      codecAac = std::make_shared<AACDecoder>();      return codecAac;#endif#ifdef BELL_CODEC_MP3    case AudioCodec::MP3:      if (codecMp3)        return codecMp3;      codecMp3 = std::make_shared<MP3Decoder>();      return codecMp3;#endif#ifdef BELL_CODEC_VORBIS    case AudioCodec::VORBIS:      if (codecVorbis)        return codecVorbis;      codecVorbis = std::make_shared<VorbisDecoder>();      return codecVorbis;#endif#ifdef BELL_CODEC_OPUS    case AudioCodec::OPUS:      if (codecOpus)        return codecOpus;      codecOpus = std::make_shared<OPUSDecoder>();      return codecOpus;#endif    default:      return nullptr;  }}std::shared_ptr<BaseCodec> AudioCodecs::getCodec(AudioContainer* container) {  auto codec = getCodec(container->getCodec());  if (codec != nullptr) {    codec->setup(container);  }  return codec;}void AudioCodecs::addCodec(AudioCodec type,                           const std::shared_ptr<BaseCodec>& codec) {  customCodecs[type] = codec;}
 |