blob: 02e4fc727e9d21283a7a394ba7faa246737bebae [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/usage_gain_reporter_impl.h"
namespace media::audio {
fidl::InterfaceRequestHandler<fuchsia::media::UsageGainReporter>
UsageGainReporterImpl::GetFidlRequestHandler() {
return bindings_.GetHandler(this);
}
void UsageGainReporterImpl::RegisterListener(
std::string device_unique_id, fuchsia::media::Usage usage,
fidl::InterfaceHandle<fuchsia::media::UsageGainListener> usage_gain_listener_handler) {
auto usage_gain_listener = usage_gain_listener_handler.Bind();
// TODO(50077): Verify the device exists and grab its output device
// profile.
const auto loudness_transform = process_config_.default_loudness_transform();
auto listener = std::make_unique<Listener>(loudness_transform, std::move(usage),
std::move(usage_gain_listener));
stream_volume_manager_.AddStream(listener.get());
listeners_.insert(std::move(listener));
}
void UsageGainReporterImpl::Listener::RealizeVolume(VolumeCommand volume_command) {
const auto gain_db = loudness_transform_->Evaluate<2>(
{VolumeValue{volume_command.volume}, GainDbFsValue{volume_command.gain_db_adjustment}});
unacked_messages_++;
usage_gain_listener_->OnGainMuteChanged(/*muted=*/false, gain_db,
[this]() { unacked_messages_--; });
}
} // namespace media::audio