// Copyright (c) 2012-2017 VideoStitch SAS // Copyright (c) 2018 stitchEm #ifndef AUDIODECODER_H #define AUDIODECODER_H #include "iopacket.hpp" #include "rtmpStructures.hpp" #include "libvideostitch/config.hpp" #include "libvideostitch/circularBuffer.hpp" #include "librtmpIncludes.hpp" #include #include #include namespace VideoStitch { namespace Input { struct AudioStream { CircularBuffer stream; cntime_t cnts; std::mutex audioBufferMutex; AudioStream() : stream(2048), cnts(0) {} }; class AudioDecoder { public: AudioDecoder(AudioStream* asToFill, const uint64_t samplingRate, const uint8_t samplingDepth, const uint8_t nbChannels); virtual ~AudioDecoder() = default; virtual void demux(VideoStitch::IO::DataPacket&, VideoStitch::IO::Packet&) {} virtual bool decode(VideoStitch::IO::DataPacket* pkt) = 0; virtual std::string name() = 0; static std::unique_ptr createAudioDecoder(AMFDataType encoderType, AMFObjectProperty* amfOProperty, AudioStream* audioStream, const long samplingRate, const int samplingDepth, const int nbChannels); protected: uint64_t samplingRate; uint8_t samplingDepth; uint8_t numberOfChannels; AudioStream* audioStream; }; } // namespace Input } // namespace VideoStitch #endif // AUDIODECODER_H