blob: 397a6088f5d5fc3fd18a5355bb8e89709a23fe29 [file] [log] [blame]
// Copyright 2017 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/media/c/audio.h"
#include "garnet/lib/media/client/audio_output_device.h"
#include "garnet/lib/media/client/audio_output_manager.h"
#include "garnet/lib/media/client/audio_output_stream.h"
#include "lib/fxl/logging.h"
struct _fuchsia_audio_output_stream {};
struct _fuchsia_audio_manager {};
// Public API functions
fuchsia_audio_manager* fuchsia_audio_manager_create() {
media_client::AudioOutputManager* manager =
new media_client::AudioOutputManager();
return reinterpret_cast<fuchsia_audio_manager*>(manager);
}
void fuchsia_audio_manager_free(fuchsia_audio_manager* manager) {
FXL_DCHECK(manager);
auto manager_obj =
reinterpret_cast<media_client::AudioOutputManager*>(manager);
delete manager_obj;
}
int fuchsia_audio_manager_get_output_devices(
fuchsia_audio_manager* manager, fuchsia_audio_device_description* buffer,
int num_device_descriptions) {
FXL_DCHECK(manager);
auto manager_obj =
reinterpret_cast<media_client::AudioOutputManager*>(manager);
return manager_obj->GetOutputDevices(buffer, num_device_descriptions);
}
int fuchsia_audio_manager_get_output_device_default_parameters(
fuchsia_audio_manager* manager, char* device_id,
fuchsia_audio_parameters* stream_params) {
FXL_DCHECK(manager);
auto manager_obj =
reinterpret_cast<media_client::AudioOutputManager*>(manager);
return manager_obj->GetOutputDeviceDefaultParameters(device_id,
stream_params);
}
int fuchsia_audio_manager_create_output_stream(
fuchsia_audio_manager* manager, char* device_id,
fuchsia_audio_parameters* stream_params,
fuchsia_audio_output_stream** stream_out) {
FXL_DCHECK(manager);
FXL_DCHECK(stream_out);
auto manager_obj =
reinterpret_cast<media_client::AudioOutputManager*>(manager);
media_client::AudioOutputStream* stream = nullptr;
int status =
manager_obj->CreateOutputStream(device_id, stream_params, &stream);
if (status == ZX_OK) {
*stream_out = reinterpret_cast<fuchsia_audio_output_stream*>(stream);
}
return status;
}
int fuchsia_audio_output_stream_free(fuchsia_audio_output_stream* stream) {
FXL_DCHECK(stream);
auto stream_obj = reinterpret_cast<media_client::AudioOutputStream*>(stream);
return stream_obj->Free();
}
int fuchsia_audio_output_stream_get_min_delay(
fuchsia_audio_output_stream* stream, zx_duration_t* delay_nsec_out) {
FXL_DCHECK(stream);
auto stream_obj = reinterpret_cast<media_client::AudioOutputStream*>(stream);
return stream_obj->GetMinDelay(delay_nsec_out);
}
int fuchsia_audio_output_stream_set_gain(fuchsia_audio_output_stream* stream,
float db_gain) {
FXL_DCHECK(stream);
auto stream_obj = reinterpret_cast<media_client::AudioOutputStream*>(stream);
return stream_obj->SetGain(db_gain);
}
int fuchsia_audio_output_stream_write(fuchsia_audio_output_stream* stream,
float* sample_buffer, int num_samples,
zx_time_t pres_time) {
FXL_DCHECK(stream);
auto stream_obj = reinterpret_cast<media_client::AudioOutputStream*>(stream);
return stream_obj->Write(sample_buffer, num_samples, pres_time);
}