You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
258 lines
9.4 KiB
258 lines
9.4 KiB
// Copyright 2016 The Android Open Source Project |
|
// |
|
// Licensed under the Apache License, Version 2.0 (the "License"); |
|
// you may not use this file except in compliance with the License. |
|
// You may obtain a copy of the License at |
|
// |
|
// http://www.apache.org/licenses/LICENSE-2.0 |
|
// |
|
// Unless required by applicable law or agreed to in writing, software |
|
// distributed under the License is distributed on an "AS IS" BASIS, |
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
// See the License for the specific language governing permissions and |
|
// limitations under the License. |
|
// |
|
|
|
// Class to manage audio devices in Brillo. |
|
|
|
#ifndef BRILLO_AUDIO_AUDIOSERVICE_BRILLO_AUDIO_MANAGER_H_ |
|
#define BRILLO_AUDIO_AUDIOSERVICE_BRILLO_AUDIO_MANAGER_H_ |
|
|
|
#include <sys/cdefs.h> |
|
|
|
#include "brillo_audio_device_info.h" |
|
|
|
__BEGIN_DECLS |
|
|
|
struct BAudioManager; |
|
|
|
typedef struct BAudioManager BAudioManager; |
|
|
|
// Get a pointer to a BAudioManager. This object will refer to the same |
|
// underlying client object no matter how many times it is called. |
|
// |
|
// Returns a pointer to a BAudioManager. Returns NULL on failure. |
|
BAudioManager* BAudioManager_new(); |
|
|
|
// Flag to get input devices. |
|
static const int GET_DEVICES_INPUTS = 1; |
|
// Flag to get output devices. |
|
static const int GET_DEVICES_OUTPUTS = 2; |
|
|
|
// Returns the list of input/output devices connected to the system. |
|
// |
|
// Arg: |
|
// brillo_audio_manager: A pointer to a BAudioManager. |
|
// flag: Either GET_DEVICES_INPUTS or GET_DEVICES_OUTPUTS. |
|
// device_array: An array of BAudioDeviceInfo pointers. The caller has to |
|
// allocate this array. |
|
// size: The size of device_array. |
|
// num_devices: A pointer to an unsigned int which will represent the number |
|
// of audio devices connected to the device. |
|
// |
|
// Returns 0 on success and errno on failure. |
|
int BAudioManager_getDevices( |
|
const BAudioManager* brillo_audio_manager, int flag, |
|
BAudioDeviceInfo* device_array[], unsigned int size, |
|
unsigned int* num_devices); |
|
|
|
// Select the input device to be used for recording. |
|
// |
|
// Arg: |
|
// brillo_audio_manager: A pointer to a BAudioManager. |
|
// device: Device to set as the input device. Note that the device has to be |
|
// an input device. |
|
// |
|
// Returns 0 on success and errno on failure. |
|
int BAudioManager_setInputDevice(const BAudioManager* brillo_audio_manager, |
|
const BAudioDeviceInfo* device); |
|
|
|
// Usage types. |
|
enum BAudioUsage { |
|
kUsageAlarm, |
|
kUsageMedia, |
|
kUsageNotifications, |
|
kUsageSystem, |
|
kUsageInvalid |
|
}; |
|
|
|
// Select the output device to be used for playback. |
|
// |
|
// Arg: |
|
// brillo_audio_manager: A pointer to a BAudioManager. |
|
// device: Device to set as the output device. Note that the device has to |
|
// be an output device. |
|
// usage: A BAudioUsage type representing a usage to route to |device|. |
|
// |
|
// Returns 0 on success and errno on failure. |
|
int BAudioManager_setOutputDevice( |
|
const BAudioManager* brillo_audio_manager, const BAudioDeviceInfo* device, |
|
BAudioUsage usage); |
|
|
|
// Get the number of steps for a given stream type. |
|
// |
|
// Args: |
|
// brillo_audio_manager: A pointer to a BAudioManager object. |
|
// usage: A BAudioUsage representing the audio stream. |
|
// max_steps: A pointer to an int representing the number of steps for a given |
|
// usage. |
|
// |
|
// Returns 0 on success and errno on failure. |
|
int BAudioManager_getMaxVolumeSteps(const BAudioManager* brillo_audio_manager, |
|
BAudioUsage usage, |
|
int* max_steps); |
|
|
|
// Set the number of steps for a given stream type. |
|
// |
|
// Args: |
|
// brillo_audio_manager: A pointer to a BAudioManager object. |
|
// usage: A BAudioUsage representing the audio stream. |
|
// max_steps: An int representing the number of steps to use for a given |
|
// usage. |
|
// |
|
// Returns 0 on success and errno on failure. |
|
int BAudioManager_setMaxVolumeSteps(const BAudioManager* brillo_audio_manager, |
|
BAudioUsage usage, |
|
int max_steps); |
|
|
|
// Set the volume for a given stream type. |
|
// |
|
// Args: |
|
// brillo_audio_manager: A pointer to a BAudioManager object. |
|
// usage: A BAudioUsage representing the audio stream. |
|
// device: A pointer to a BAudioDeviceInfo object. |
|
// value: An int representing the index to set the volume to. The index must |
|
// be less than max_steps if BAudioManager_setMaxVolumeSteps was |
|
// called or 100 otherwise. |
|
// |
|
// Returns 0 on success and errno on failure. |
|
int BAudioManager_setVolumeIndex(const BAudioManager* brillo_audio_manager, |
|
BAudioUsage usage, |
|
const BAudioDeviceInfo* device, |
|
int index); |
|
|
|
// Get the volume for a given stream type. |
|
// |
|
// Args: |
|
// brillo_audio_manager: A pointer to a BAudioManager object. |
|
// usage: A BAudioUsage representing the audio stream. |
|
// device: A pointer to a BAudioDeviceInfo object. |
|
// value: A pointer to int. This will be set to an int representing the volume |
|
// index for |usage|. |
|
// |
|
// Returns 0 on success and errno on failure. |
|
int BAudioManager_getVolumeIndex(const BAudioManager* brillo_audio_manager, |
|
BAudioUsage usage, |
|
const BAudioDeviceInfo* device, |
|
int* index); |
|
|
|
// Get the default stream for volume buttons. If |
|
// BAudioManager_setVolumeControlUsage has not been called, this will return |
|
// kInvalidUsage. |
|
// |
|
// Args: |
|
// brillo_audio_manager: A pointer to a BAudioManager object. |
|
// usage: A pointer to a BAudioUsage representing the audio stream. |
|
// |
|
// Returns 0 on success and errno on failure. |
|
int BAudioManager_getVolumeControlUsage( |
|
const BAudioManager* brillo_audio_manager, BAudioUsage* usage); |
|
|
|
// Set the default stream to use for volume buttons. By default, streams will be |
|
// ordered by priority: |
|
// 1. kUsageAlarm |
|
// 2. kUsageNotifications |
|
// 3. kUsageSystem |
|
// 4. kUsageMedia |
|
// |
|
// Calling BAudioMananager_setVolumeControlUsage with kInvalidUsage will reset |
|
// the volume control stream to its default priorities and undo the effects of |
|
// previous calls to BAudioManager_setVolumeControlUsage. |
|
// |
|
// Args: |
|
// brillo_audio_manager: A pointer to a BAudioManager object. |
|
// usage: A BAudioUsage representing the audio stream. |
|
// |
|
// Returns 0 on success and errno on failure. |
|
int BAudioManager_setVolumeControlUsage( |
|
const BAudioManager* brillo_audio_manager, BAudioUsage usage); |
|
|
|
// Increment the volume of active streams or stream selected using |
|
// BAudioManager_setVolumeControlUsage. |
|
// |
|
// Args: |
|
// brillo_audio_manager: A pointer to a BAudioManager object. |
|
// |
|
// Returns 0 on success and errno on failure. |
|
int BAudioManager_incrementVolume(const BAudioManager* brillo_audio_manager); |
|
|
|
// Decrement the volume of active streams or stream selected using |
|
// BAudioManager_setVolumeControlUsage. |
|
// |
|
// Args: |
|
// brillo_audio_manager: A pointer to a BAudioManager object. |
|
// |
|
// Returns 0 on success and errno on failure. |
|
int BAudioManager_decrementVolume(const BAudioManager* brillo_audio_manager); |
|
|
|
// Object used for callbacks. |
|
struct BAudioCallback { |
|
// Function to be called when an audio device is added. If multiple audio |
|
// devices are added, then this function will be called multiple times. The |
|
// user is not responsible for freeing added_device. |
|
void (*OnAudioDeviceAdded)(const BAudioDeviceInfo* added_device, |
|
void* user_data); |
|
|
|
// Function to be called when an audio device is removed. If multiple audio |
|
// devices are removed, then this function will be called multiple times. The |
|
// user is not responsible for freeing removed_device. |
|
void (*OnAudioDeviceRemoved)(const BAudioDeviceInfo* removed_device, |
|
void* user_data); |
|
|
|
// Function to be called when the volume button is pressed. |
|
void (*OnVolumeChanged)(BAudioUsage usage, |
|
int old_volume_index, |
|
int new_volume_index, |
|
void* user_data); |
|
}; |
|
|
|
typedef struct BAudioCallback BAudioCallback; |
|
|
|
// Registers a callback object that lets clients know when audio devices have |
|
// been added/removed from the system. |
|
// |
|
// Arg: |
|
// brillo_audio_manager: A pointer to a BAudioManager. |
|
// callback: An object of type BAudioCallback. The BAudioManager |
|
// maintains ownership of this object. |
|
// user_data : A pointer to user data. This is not used by BAudioManager and |
|
// is passed as an arg to callbacks. |
|
// callback_id: A pointer to an int. The int represents a token that can be |
|
// used to de-register this callback. Contains 0 on failure. |
|
// |
|
// Returns 0 on success and errno on failure. |
|
int BAudioManager_registerAudioCallback( |
|
const BAudioManager* brillo_audio_manager, const BAudioCallback* callback, |
|
void* user_data, int* callback_id); |
|
|
|
// Unregisters a callback object. |
|
// |
|
// Arg: |
|
// brillo_audio_manager: A pointer to a BAudioManager. |
|
// callback_id: A token correspoding to the callback object. |
|
// |
|
// Returns 0 on success and errno on failure. |
|
int BAudioManager_unregisterAudioCallback( |
|
const BAudioManager* brillo_audio_manager, int callback_id); |
|
|
|
// Free a Brillo audio manager object. |
|
// |
|
// Arg: |
|
// brillo_audio_manager: A pointer to a BAudioManager to be freed. |
|
// |
|
// Returns 0 on success and errno on failure. |
|
int BAudioManager_delete(BAudioManager* brillo_audio_manager); |
|
|
|
__END_DECLS |
|
|
|
#endif // BRILLO_AUDIO_AUDIOSERVICE_BRILLO_AUDIO_MANAGER_H_
|
|
|