blob: ea83a3c10aa545238d03fa3b6c28bad960e0af52 [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.
#include "src/media/audio/audio_core/ultrasound_factory.h"
#include "src/media/audio/audio_core/route_graph.h"
#include "src/media/audio/audio_core/ultrasound_capturer.h"
#include "src/media/audio/audio_core/ultrasound_renderer.h"
namespace media::audio {
std::unique_ptr<UltrasoundFactory> UltrasoundFactory::CreateAndServe(Context* context) {
return std::make_unique<UltrasoundFactory>(context);
}
UltrasoundFactory::UltrasoundFactory(Context* context) : context_(*context) {
FX_DCHECK(context);
context_.component_context().outgoing()->AddPublicService(bindings_.GetHandler(this));
}
void UltrasoundFactory::CreateCapturer(
fidl::InterfaceRequest<fuchsia::media::AudioCapturer> request,
CreateCapturerCallback callback) {
auto capturer = UltrasoundCapturer::Create(std::move(request), &context_, std::move(callback));
// Ultrasound capturers are immediately routable.
context_.route_graph().AddCapturer(capturer);
context_.route_graph().SetCapturerRoutingProfile(
*capturer, RoutingProfile{.routable = true,
.usage = StreamUsage::WithCaptureUsage(CaptureUsage::ULTRASOUND)});
}
void UltrasoundFactory::CreateRenderer(
fidl::InterfaceRequest<fuchsia::media::AudioRenderer> request,
CreateRendererCallback callback) {
auto renderer = UltrasoundRenderer::Create(std::move(request), &context_, std::move(callback));
// Ultrasound renderers are immediately routable.
context_.route_graph().AddRenderer(renderer);
context_.route_graph().SetRendererRoutingProfile(
*renderer, RoutingProfile{
.routable = true,
.usage = StreamUsage::WithRenderUsage(RenderUsage::ULTRASOUND),
});
}
} // namespace media::audio