blob: 8028aefd8a48fff9726dac291a1a5b03edc2262f [file] [log] [blame]
// Copyright 2016 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 <lib/sys/cpp/component_context.h>
#ifndef NTRACE
#include <trace-provider/provider.h>
#endif
#include "src/media/audio/audio_core/audio_core_impl.h"
#include "src/media/audio/audio_core/process_config_loader.h"
#include "src/media/audio/audio_core/reporter.h"
#include "src/media/audio/audio_core/threading_model.h"
#include "src/media/audio/lib/logging/logging.h"
using namespace media::audio;
constexpr char kProcessConfigPath[] = "/config/data/audio_core_config.json";
int main(int argc, const char** argv) {
auto threading_model = ThreadingModel::CreateWithMixStrategy(MixStrategy::kThreadPerMix);
#ifndef NTRACE
trace::TraceProviderWithFdio trace_provider(threading_model->FidlDomain().dispatcher());
#endif
#ifdef NDEBUG
Logging::Init(FX_LOG_WARNING, {"audio_core"});
#else
// For verbose logging, set to -media::audio::TRACE or -media::audio::SPEW
Logging::Init(FX_LOG_INFO, {"audio_core"});
#endif
FX_LOGS(INFO) << "AudioCore starting up";
// Initialize our telemetry reporter (which optimizes to nothing if ENABLE_REPORTER is set to 0).
auto component_context = sys::ComponentContext::Create();
REP(Init(component_context.get()));
auto process_config = ProcessConfigLoader::LoadProcessConfig(kProcessConfigPath);
if (!process_config) {
FX_LOGS(INFO) << "No audio_core_config.json; using default configuration";
auto default_config = ProcessConfig::Builder()
.SetDefaultVolumeCurve(VolumeCurve::DefaultForMinGain(
VolumeCurve::kDefaultGainForMinVolume))
.Build();
process_config = {std::move(default_config)};
}
FX_CHECK(process_config);
auto config_handle = ProcessConfig::set_instance(std::move(*process_config));
AudioCoreImpl impl(threading_model.get(), std::move(component_context));
threading_model->RunAndJoinAllThreads();
return 0;
}