blob: 9eda6dbfd62ac8b14655c64b790cf87c03f6710c [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SRC_MEDIA_AUDIO_AUDIO_CORE_ULTRASOUND_RENDERER_H_
#define SRC_MEDIA_AUDIO_AUDIO_CORE_ULTRASOUND_RENDERER_H_
#include <fuchsia/ultrasound/cpp/fidl.h>
#include "src/media/audio/audio_core/base_renderer.h"
#include "src/media/audio/audio_core/stream_usage.h"
#include "src/media/audio/audio_core/stream_volume_manager.h"
namespace media::audio {
class UltrasoundRenderer : public BaseRenderer {
public:
static std::shared_ptr<UltrasoundRenderer> Create(
fidl::InterfaceRequest<fuchsia::media::AudioRenderer> request, Context* context,
fuchsia::ultrasound::Factory::CreateRendererCallback callback) {
return std::make_shared<UltrasoundRenderer>(std::move(request), context, std::move(callback));
}
// Callers should use the |Create| method instead, this is only public to enable std::make_shared.
UltrasoundRenderer(fidl::InterfaceRequest<fuchsia::media::AudioRenderer> request,
Context* context,
fuchsia::ultrasound::Factory::CreateRendererCallback callback);
~UltrasoundRenderer() override = default;
private:
// |media::audio::AudioObject|
std::optional<Format> format() const final { return format_; }
std::optional<StreamUsage> usage() const override {
return {StreamUsage::WithRenderUsage(RenderUsage::ULTRASOUND)};
}
fit::result<std::shared_ptr<ReadableStream>, zx_status_t> InitializeDestLink(
const AudioObject& dest) override;
void CleanupDestLink(const AudioObject& dest) override;
// |fuchsia::media::AudioRenderer|
void SetPcmStreamType(fuchsia::media::AudioStreamType format) final;
void SetUsage(fuchsia::media::AudioRenderUsage usage) final;
void BindGainControl(fidl::InterfaceRequest<fuchsia::media::audio::GainControl> request) final;
void SetReferenceClock(zx::clock ref_clock) final;
std::optional<Format> format_;
fuchsia::ultrasound::Factory::CreateRendererCallback create_callback_;
};
} // namespace media::audio
#endif // SRC_MEDIA_AUDIO_AUDIO_CORE_ULTRASOUND_RENDERER_H_