// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "Endpoint.hpp" #include // assert using namespace audio; Endpoint::Endpoint(const Capabilities &caps) : _caps(caps) {} const Endpoint::Capabilities &Endpoint::getCapabilities() const noexcept { return _caps; } void Endpoint::connectStream(Stream &stream) { assert(_stream == nullptr); _stream = &stream; } void Endpoint::disconnectStream() { assert(_stream != nullptr); _stream = nullptr; } bool Endpoint::isConnected() const noexcept { return _stream != nullptr; } Sink::Sink(const Capabilities &caps) : Endpoint(caps) {} Source::Source(const Capabilities &caps) : Endpoint(caps) {} IOProxy::IOProxy(const Capabilities &sourceCaps, const Capabilities &sinkCaps) : Source(sourceCaps), Sink(sinkCaps) {} StreamConnection::StreamConnection(Source *source, Sink *sink, Stream *stream) : _sink(sink), _source(source), _stream(stream) { assert(_sink != nullptr); assert(_source != nullptr); assert(_stream != nullptr); _sink->connectStream(*_stream); _source->connectStream(*_stream); } StreamConnection::~StreamConnection() { destroy(); } void StreamConnection::destroy() { disable(); _sink->disconnectStream(); _source->disconnectStream(); } void StreamConnection::enable() { if (enabled) { return; } _stream->reset(); _sink->enableOutput(); _source->enableInput(); enabled = true; } void StreamConnection::disable() { if (!enabled) { return; } _source->disableInput(); _sink->disableOutput(); _stream->reset(); enabled = false; } bool StreamConnection::isEnabled() const noexcept { return enabled; } Source *StreamConnection::getSource() const noexcept { return _source; } Sink *StreamConnection::getSink() const noexcept { return _sink; } Stream *StreamConnection::getStream() const noexcept { return _stream; }