| // 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); |
| } |