#ifndef AC195091_8442_4268_B843_700AB594416A #define AC195091_8442_4268_B843_700AB594416A /* ******************************************************************************* * INCLUDE ******************************************************************************* */ #include "AudioAdaptablePipe.h" #include "AbstractAudioInput.h" #include "util/FactoryManager.h" #include namespace Video { namespace Core { /* ******************************************************************************* * CLASS DECLARE ******************************************************************************* */ class AudioMixerSelector { public: static int select(const std::string&) { return 0; } }; class AudioMixer: public AbstractAudioInput, public ::Util::FactoryManager { public: using Ptr = Poco::AutoPtr; class Channel: public AudioAdaptablePipe { public: using Ptr = Poco::AutoPtr; protected: Channel(AudioMixer::Ptr, uint32_t id); public: ~Channel(); CONFIGURABLE_DECLARE_PARAMETER(Attach, bool) CONFIGURABLE_DECLARE_PARAMETER(Input, AudioComponent::Ptr) uint32_t id() const; protected: virtual void start() override; virtual void stop() override; void onConfigChanged(ParameterNames& names) override; AudioMixer::Ptr mixer(); private: AudioMixer::Ptr _pMixer; uint32_t _id; friend AudioMixer; }; public: AudioMixer(const std::string& name); ~AudioMixer(); Channel::Ptr getChannel(uint32_t id); void syncConfigToChannel(Channel::Ptr pChannel); protected: void start() override; void stop() override; void onConfigChanged(ParameterNames& names) override; Frame::Ptr readFrame() override; void refreshOutputParams(); PROPERTY_DECLARE(FrameDuration, uint32_t, 0, protected, protected) PROPERTY_DECLARE(Channels, uint32_t, 0, protected, protected) PROPERTY_DECLARE(LineSize, uint32_t, 0, protected, protected) private: std::unordered_map _channels; Frame::Ptr _mixFrame; }; inline uint32_t AudioMixer::Channel::id() const { return _id; } inline AudioMixer::Ptr AudioMixer::Channel::mixer() { return _pMixer; } } } #endif