Files
MuditaOS/module-audio/Audio/StreamFactory.hpp
Marcin Smoczyński e993a0b928 [EGD-6857] Fix HSP audio quality
Fixed HSP sound quality issues:
 - fixed HF caused by invalid output block size during interpolation of
   the bluetooth input,
 - increased block size to increase time send interval to 8ms

Fixed issue with error handling when writing to overflowed stream.

Signed-off-by: Marcin Smoczyński <smoczynski.marcin@gmail.com>
2021-11-15 20:20:45 +01:00

51 lines
1.8 KiB
C++

// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#pragma once
#include "Endpoint.hpp"
#include "Stream.hpp"
#include "transcode/Transform.hpp"
#include "transcode/InputTranscodeProxy.hpp"
#include <initializer_list>
#include <optional>
#include <memory>
namespace audio
{
class StreamFactory
{
public:
StreamFactory() = default;
explicit StreamFactory(std::chrono::milliseconds operationPeriodRequirement);
auto makeStream(Source &source, Sink &sink) -> std::unique_ptr<AbstractStream>;
auto makeStream(Source &source, Sink &sink, AudioFormat streamFormat) -> std::unique_ptr<Stream>;
auto makeInputTranscodingStream(Source &source,
Sink &sink,
AudioFormat streamFormat,
std::shared_ptr<transcode::Transform> transform)
-> std::unique_ptr<transcode::InputTranscodeProxy>;
private:
using Traits = audio::Endpoint::Traits;
static constexpr auto defaultBuffering = 32U;
auto makeStream(Traits sourceTraits, Traits sinkTraits, AudioFormat streamFormat) -> std::unique_ptr<Stream>;
auto getBlockSizeConstraint(std::initializer_list<Traits> traitsList) const -> std::optional<std::size_t>;
auto getTimingConstraints(std::initializer_list<std::optional<std::chrono::milliseconds>> timingConstraints)
const -> std::chrono::milliseconds;
auto negotiateAllocator(std::initializer_list<Traits> traitsList) noexcept -> Stream::Allocator &;
std::optional<std::chrono::milliseconds> periodRequirement = std::nullopt;
StandardStreamAllocator stdAlloc;
NonCacheableStreamAllocator nonCacheableAlloc;
};
} // namespace audio