blob: c0a2c499acdeefa04c95121fb0c5fe71b43714ed [file] [log] [blame]
// Copyright 2019 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_AUDIO_CORE_CLIENT_H_
#define SRC_MEDIA_AUDIO_AUDIO_AUDIO_CORE_CLIENT_H_
#include <fuchsia/media/cpp/fidl.h>
#include <lib/fit/function.h>
#include <lib/sys/cpp/component_context.h>
#include "lib/fidl/cpp/binding_set.h"
#include "src/lib/fxl/logging.h"
namespace media::audio {
class AudioCoreClient : public fuchsia::media::Audio {
public:
AudioCoreClient(sys::ComponentContext* startup_context,
fit::closure quit_callback);
// Audio implementation.
void CreateAudioRenderer(fidl::InterfaceRequest<fuchsia::media::AudioRenderer>
audio_renderer_request) final {
audio_core_->CreateAudioRenderer(std::move(audio_renderer_request));
};
void CreateAudioCapturer(fidl::InterfaceRequest<fuchsia::media::AudioCapturer>
audio_capturer_request,
bool loopback) final {
audio_core_->CreateAudioCapturer(loopback,
std::move(audio_capturer_request));
};
void SetSystemGain(float gain_db) final {
audio_core_->SetSystemGain(gain_db);
};
void SetSystemMute(bool muted) final { audio_core_->SetSystemMute(muted); };
void SetRoutingPolicy(fuchsia::media::AudioOutputRoutingPolicy policy) final {
audio_core_->SetRoutingPolicy(policy);
};
private:
void NotifyGainMuteChanged();
float system_gain_db_;
bool system_muted_;
void PublishServices();
fidl::BindingSet<fuchsia::media::Audio> bindings_;
fuchsia::media::AudioCorePtr audio_core_;
fit::closure quit_callback_;
};
} // namespace media::audio
#endif // SRC_MEDIA_AUDIO_AUDIO_AUDIO_CORE_CLIENT_H_