diff options
author | Kevin Rocard <krocard@google.com> | 2018-01-24 04:04:47 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2018-01-24 04:04:47 +0000 |
commit | 904511aaa253435a63e36508131d3ea795a018fb (patch) | |
tree | 145ceab22d332b8a5321f1c0ecda0756481fd2da | |
parent | 8662c46d713143af50e99762b7a6f22e3b3925ee (diff) | |
parent | fc9e212f018ce41430ec8dcebc3cae3c346474bb (diff) | |
download | libhardware-904511aaa253435a63e36508131d3ea795a018fb.tar.gz |
Merge "Audio V4: Split system and vendor Audio.h"
-rw-r--r-- | Android.bp | 2 | ||||
-rw-r--r-- | include/hardware/audio.h | 745 | ||||
-rw-r--r-- | include/hardware/audio_alsaops.h | 103 | ||||
-rw-r--r-- | include/hardware/audio_effect.h | 310 | ||||
-rw-r--r-- | include/hardware/audio_policy.h | 457 | ||||
-rw-r--r-- | modules/audio/Android.bp | 22 | ||||
-rw-r--r-- | modules/audio/audio_policy.c | 350 | ||||
-rw-r--r-- | modules/audio_remote_submix/Android.bp | 9 | ||||
-rw-r--r-- | modules/usbaudio/Android.bp | 4 |
9 files changed, 14 insertions, 1988 deletions
@@ -3,13 +3,11 @@ cc_library_headers { name: "libhardware_headers", header_libs: [ - "libaudio_system_headers", "libsystem_headers", "libcutils_headers", "libbluetooth-types-header", ], export_header_lib_headers: [ - "libaudio_system_headers", "libsystem_headers", "libcutils_headers", "libbluetooth-types-header", diff --git a/include/hardware/audio.h b/include/hardware/audio.h deleted file mode 100644 index 2d6eb309..00000000 --- a/include/hardware/audio.h +++ /dev/null @@ -1,745 +0,0 @@ -/* - * Copyright (C) 2011 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. - */ - - -#ifndef ANDROID_AUDIO_HAL_INTERFACE_H -#define ANDROID_AUDIO_HAL_INTERFACE_H - -#include <stdint.h> -#include <strings.h> -#include <sys/cdefs.h> -#include <sys/types.h> -#include <time.h> - -#include <cutils/bitops.h> - -#include <hardware/hardware.h> -#include <system/audio.h> -#include <hardware/audio_effect.h> - -__BEGIN_DECLS - -/** - * The id of this module - */ -#define AUDIO_HARDWARE_MODULE_ID "audio" - -/** - * Name of the audio devices to open - */ -#define AUDIO_HARDWARE_INTERFACE "audio_hw_if" - - -/* Use version 0.1 to be compatible with first generation of audio hw module with version_major - * hardcoded to 1. No audio module API change. - */ -#define AUDIO_MODULE_API_VERSION_0_1 HARDWARE_MODULE_API_VERSION(0, 1) -#define AUDIO_MODULE_API_VERSION_CURRENT AUDIO_MODULE_API_VERSION_0_1 - -/* First generation of audio devices had version hardcoded to 0. all devices with versions < 1.0 - * will be considered of first generation API. - */ -#define AUDIO_DEVICE_API_VERSION_0_0 HARDWARE_DEVICE_API_VERSION(0, 0) -#define AUDIO_DEVICE_API_VERSION_1_0 HARDWARE_DEVICE_API_VERSION(1, 0) -#define AUDIO_DEVICE_API_VERSION_2_0 HARDWARE_DEVICE_API_VERSION(2, 0) -#define AUDIO_DEVICE_API_VERSION_3_0 HARDWARE_DEVICE_API_VERSION(3, 0) -#define AUDIO_DEVICE_API_VERSION_CURRENT AUDIO_DEVICE_API_VERSION_3_0 -/* Minimal audio HAL version supported by the audio framework */ -#define AUDIO_DEVICE_API_VERSION_MIN AUDIO_DEVICE_API_VERSION_2_0 - -/**************************************/ - -/** - * standard audio parameters that the HAL may need to handle - */ - -/** - * audio device parameters - */ - -/* TTY mode selection */ -#define AUDIO_PARAMETER_KEY_TTY_MODE "tty_mode" -#define AUDIO_PARAMETER_VALUE_TTY_OFF "tty_off" -#define AUDIO_PARAMETER_VALUE_TTY_VCO "tty_vco" -#define AUDIO_PARAMETER_VALUE_TTY_HCO "tty_hco" -#define AUDIO_PARAMETER_VALUE_TTY_FULL "tty_full" - -/* Hearing Aid Compatibility - Telecoil (HAC-T) mode on/off */ -#define AUDIO_PARAMETER_KEY_HAC "HACSetting" -#define AUDIO_PARAMETER_VALUE_HAC_ON "ON" -#define AUDIO_PARAMETER_VALUE_HAC_OFF "OFF" - -/* A2DP sink address set by framework */ -#define AUDIO_PARAMETER_A2DP_SINK_ADDRESS "a2dp_sink_address" - -/* A2DP source address set by framework */ -#define AUDIO_PARAMETER_A2DP_SOURCE_ADDRESS "a2dp_source_address" - -/* Bluetooth SCO wideband */ -#define AUDIO_PARAMETER_KEY_BT_SCO_WB "bt_wbs" - -/** - * audio stream parameters - */ - -/* Enable AANC */ -#define AUDIO_PARAMETER_KEY_AANC "aanc_enabled" - -/**************************************/ - -/* common audio stream parameters and operations */ -struct audio_stream { - - /** - * Return the sampling rate in Hz - eg. 44100. - */ - uint32_t (*get_sample_rate)(const struct audio_stream *stream); - - /* currently unused - use set_parameters with key - * AUDIO_PARAMETER_STREAM_SAMPLING_RATE - */ - int (*set_sample_rate)(struct audio_stream *stream, uint32_t rate); - - /** - * Return size of input/output buffer in bytes for this stream - eg. 4800. - * It should be a multiple of the frame size. See also get_input_buffer_size. - */ - size_t (*get_buffer_size)(const struct audio_stream *stream); - - /** - * Return the channel mask - - * e.g. AUDIO_CHANNEL_OUT_STEREO or AUDIO_CHANNEL_IN_STEREO - */ - audio_channel_mask_t (*get_channels)(const struct audio_stream *stream); - - /** - * Return the audio format - e.g. AUDIO_FORMAT_PCM_16_BIT - */ - audio_format_t (*get_format)(const struct audio_stream *stream); - - /* currently unused - use set_parameters with key - * AUDIO_PARAMETER_STREAM_FORMAT - */ - int (*set_format)(struct audio_stream *stream, audio_format_t format); - - /** - * Put the audio hardware input/output into standby mode. - * Driver should exit from standby mode at the next I/O operation. - * Returns 0 on success and <0 on failure. - */ - int (*standby)(struct audio_stream *stream); - - /** dump the state of the audio input/output device */ - int (*dump)(const struct audio_stream *stream, int fd); - - /** Return the set of device(s) which this stream is connected to */ - audio_devices_t (*get_device)(const struct audio_stream *stream); - - /** - * Currently unused - set_device() corresponds to set_parameters() with key - * AUDIO_PARAMETER_STREAM_ROUTING for both input and output. - * AUDIO_PARAMETER_STREAM_INPUT_SOURCE is an additional information used by - * input streams only. - */ - int (*set_device)(struct audio_stream *stream, audio_devices_t device); - - /** - * set/get audio stream parameters. The function accepts a list of - * parameter key value pairs in the form: key1=value1;key2=value2;... - * - * Some keys are reserved for standard parameters (See AudioParameter class) - * - * If the implementation does not accept a parameter change while - * the output is active but the parameter is acceptable otherwise, it must - * return -ENOSYS. - * - * The audio flinger will put the stream in standby and then change the - * parameter value. - */ - int (*set_parameters)(struct audio_stream *stream, const char *kv_pairs); - - /* - * Returns a pointer to a heap allocated string. The caller is responsible - * for freeing the memory for it using free(). - */ - char * (*get_parameters)(const struct audio_stream *stream, - const char *keys); - int (*add_audio_effect)(const struct audio_stream *stream, - effect_handle_t effect); - int (*remove_audio_effect)(const struct audio_stream *stream, - effect_handle_t effect); -}; -typedef struct audio_stream audio_stream_t; - -/* type of asynchronous write callback events. Mutually exclusive */ -typedef enum { - STREAM_CBK_EVENT_WRITE_READY, /* non blocking write completed */ - STREAM_CBK_EVENT_DRAIN_READY, /* drain completed */ - STREAM_CBK_EVENT_ERROR, /* stream hit some error, let AF take action */ -} stream_callback_event_t; - -typedef int (*stream_callback_t)(stream_callback_event_t event, void *param, void *cookie); - -/* type of drain requested to audio_stream_out->drain(). Mutually exclusive */ -typedef enum { - AUDIO_DRAIN_ALL, /* drain() returns when all data has been played */ - AUDIO_DRAIN_EARLY_NOTIFY /* drain() returns a short time before all data - from the current track has been played to - give time for gapless track switch */ -} audio_drain_type_t; - -/** - * audio_stream_out is the abstraction interface for the audio output hardware. - * - * It provides information about various properties of the audio output - * hardware driver. - */ - -struct audio_stream_out { - /** - * Common methods of the audio stream out. This *must* be the first member of audio_stream_out - * as users of this structure will cast a audio_stream to audio_stream_out pointer in contexts - * where it's known the audio_stream references an audio_stream_out. - */ - struct audio_stream common; - - /** - * Return the audio hardware driver estimated latency in milliseconds. - */ - uint32_t (*get_latency)(const struct audio_stream_out *stream); - - /** - * Use this method in situations where audio mixing is done in the - * hardware. This method serves as a direct interface with hardware, - * allowing you to directly set the volume as apposed to via the framework. - * This method might produce multiple PCM outputs or hardware accelerated - * codecs, such as MP3 or AAC. - */ - int (*set_volume)(struct audio_stream_out *stream, float left, float right); - - /** - * Write audio buffer to driver. Returns number of bytes written, or a - * negative status_t. If at least one frame was written successfully prior to the error, - * it is suggested that the driver return that successful (short) byte count - * and then return an error in the subsequent call. - * - * If set_callback() has previously been called to enable non-blocking mode - * the write() is not allowed to block. It must write only the number of - * bytes that currently fit in the driver/hardware buffer and then return - * this byte count. If this is less than the requested write size the - * callback function must be called when more space is available in the - * driver/hardware buffer. - */ - ssize_t (*write)(struct audio_stream_out *stream, const void* buffer, - size_t bytes); - - /* return the number of audio frames written by the audio dsp to DAC since - * the output has exited standby - */ - int (*get_render_position)(const struct audio_stream_out *stream, - uint32_t *dsp_frames); - - /** - * get the local time at which the next write to the audio driver will be presented. - * The units are microseconds, where the epoch is decided by the local audio HAL. - */ - int (*get_next_write_timestamp)(const struct audio_stream_out *stream, - int64_t *timestamp); - - /** - * set the callback function for notifying completion of non-blocking - * write and drain. - * Calling this function implies that all future write() and drain() - * must be non-blocking and use the callback to signal completion. - */ - int (*set_callback)(struct audio_stream_out *stream, - stream_callback_t callback, void *cookie); - - /** - * Notifies to the audio driver to stop playback however the queued buffers are - * retained by the hardware. Useful for implementing pause/resume. Empty implementation - * if not supported however should be implemented for hardware with non-trivial - * latency. In the pause state audio hardware could still be using power. User may - * consider calling suspend after a timeout. - * - * Implementation of this function is mandatory for offloaded playback. - */ - int (*pause)(struct audio_stream_out* stream); - - /** - * Notifies to the audio driver to resume playback following a pause. - * Returns error if called without matching pause. - * - * Implementation of this function is mandatory for offloaded playback. - */ - int (*resume)(struct audio_stream_out* stream); - - /** - * Requests notification when data buffered by the driver/hardware has - * been played. If set_callback() has previously been called to enable - * non-blocking mode, the drain() must not block, instead it should return - * quickly and completion of the drain is notified through the callback. - * If set_callback() has not been called, the drain() must block until - * completion. - * If type==AUDIO_DRAIN_ALL, the drain completes when all previously written - * data has been played. - * If type==AUDIO_DRAIN_EARLY_NOTIFY, the drain completes shortly before all - * data for the current track has played to allow time for the framework - * to perform a gapless track switch. - * - * Drain must return immediately on stop() and flush() call - * - * Implementation of this function is mandatory for offloaded playback. - */ - int (*drain)(struct audio_stream_out* stream, audio_drain_type_t type ); - - /** - * Notifies to the audio driver to flush the queued data. Stream must already - * be paused before calling flush(). - * - * Implementation of this function is mandatory for offloaded playback. - */ - int (*flush)(struct audio_stream_out* stream); - - /** - * Return a recent count of the number of audio frames presented to an external observer. - * This excludes frames which have been written but are still in the pipeline. - * The count is not reset to zero when output enters standby. - * Also returns the value of CLOCK_MONOTONIC as of this presentation count. - * The returned count is expected to be 'recent', - * but does not need to be the most recent possible value. - * However, the associated time should correspond to whatever count is returned. - * Example: assume that N+M frames have been presented, where M is a 'small' number. - * Then it is permissible to return N instead of N+M, - * and the timestamp should correspond to N rather than N+M. - * The terms 'recent' and 'small' are not defined. - * They reflect the quality of the implementation. - * - * 3.0 and higher only. - */ - int (*get_presentation_position)(const struct audio_stream_out *stream, - uint64_t *frames, struct timespec *timestamp); - - /** - * Called by the framework to start a stream operating in mmap mode. - * create_mmap_buffer must be called before calling start() - * - * \note Function only implemented by streams operating in mmap mode. - * - * \param[in] stream the stream object. - * \return 0 in case of success. - * -ENOSYS if called out of sequence or on non mmap stream - */ - int (*start)(const struct audio_stream_out* stream); - - /** - * Called by the framework to stop a stream operating in mmap mode. - * Must be called after start() - * - * \note Function only implemented by streams operating in mmap mode. - * - * \param[in] stream the stream object. - * \return 0 in case of success. - * -ENOSYS if called out of sequence or on non mmap stream - */ - int (*stop)(const struct audio_stream_out* stream); - - /** - * Called by the framework to retrieve information on the mmap buffer used for audio - * samples transfer. - * - * \note Function only implemented by streams operating in mmap mode. - * - * \param[in] stream the stream object. - * \param[in] min_size_frames minimum buffer size requested. The actual buffer - * size returned in struct audio_mmap_buffer_info can be larger. - * \param[out] info address at which the mmap buffer information should be returned. - * - * \return 0 if the buffer was allocated. - * -ENODEV in case of initialization error - * -EINVAL if the requested buffer size is too large - * -ENOSYS if called out of sequence (e.g. buffer already allocated) - */ - int (*create_mmap_buffer)(const struct audio_stream_out *stream, - int32_t min_size_frames, - struct audio_mmap_buffer_info *info); - - /** - * Called by the framework to read current read/write position in the mmap buffer - * with associated time stamp. - * - * \note Function only implemented by streams operating in mmap mode. - * - * \param[in] stream the stream object. - * \param[out] position address at which the mmap read/write position should be returned. - * - * \return 0 if the position is successfully returned. - * -ENODATA if the position cannot be retrieved - * -ENOSYS if called before create_mmap_buffer() - */ - int (*get_mmap_position)(const struct audio_stream_out *stream, - struct audio_mmap_position *position); -}; -typedef struct audio_stream_out audio_stream_out_t; - -struct audio_stream_in { - /** - * Common methods of the audio stream in. This *must* be the first member of audio_stream_in - * as users of this structure will cast a audio_stream to audio_stream_in pointer in contexts - * where it's known the audio_stream references an audio_stream_in. - */ - struct audio_stream common; - - /** set the input gain for the audio driver. This method is for - * for future use */ - int (*set_gain)(struct audio_stream_in *stream, float gain); - - /** Read audio buffer in from audio driver. Returns number of bytes read, or a - * negative status_t. If at least one frame was read prior to the error, - * read should return that byte count and then return an error in the subsequent call. - */ - ssize_t (*read)(struct audio_stream_in *stream, void* buffer, - size_t bytes); - - /** - * Return the amount of input frames lost in the audio driver since the - * last call of this function. - * Audio driver is expected to reset the value to 0 and restart counting - * upon returning the current value by this function call. - * Such loss typically occurs when the user space process is blocked - * longer than the capacity of audio driver buffers. - * - * Unit: the number of input audio frames - */ - uint32_t (*get_input_frames_lost)(struct audio_stream_in *stream); - - /** - * Return a recent count of the number of audio frames received and - * the clock time associated with that frame count. - * - * frames is the total frame count received. This should be as early in - * the capture pipeline as possible. In general, - * frames should be non-negative and should not go "backwards". - * - * time is the clock MONOTONIC time when frames was measured. In general, - * time should be a positive quantity and should not go "backwards". - * - * The status returned is 0 on success, -ENOSYS if the device is not - * ready/available, or -EINVAL if the arguments are null or otherwise invalid. - */ - int (*get_capture_position)(const struct audio_stream_in *stream, - int64_t *frames, int64_t *time); - - /** - * Called by the framework to start a stream operating in mmap mode. - * create_mmap_buffer must be called before calling start() - * - * \note Function only implemented by streams operating in mmap mode. - * - * \param[in] stream the stream object. - * \return 0 in case off success. - * -ENOSYS if called out of sequence or on non mmap stream - */ - int (*start)(const struct audio_stream_in* stream); - - /** - * Called by the framework to stop a stream operating in mmap mode. - * - * \note Function only implemented by streams operating in mmap mode. - * - * \param[in] stream the stream object. - * \return 0 in case of success. - * -ENOSYS if called out of sequence or on non mmap stream - */ - int (*stop)(const struct audio_stream_in* stream); - - /** - * Called by the framework to retrieve information on the mmap buffer used for audio - * samples transfer. - * - * \note Function only implemented by streams operating in mmap mode. - * - * \param[in] stream the stream object. - * \param[in] min_size_frames minimum buffer size requested. The actual buffer - * size returned in struct audio_mmap_buffer_info can be larger. - * \param[out] info address at which the mmap buffer information should be returned. - * - * \return 0 if the buffer was allocated. - * -ENODEV in case of initialization error - * -EINVAL if the requested buffer size is too large - * -ENOSYS if called out of sequence (e.g. buffer already allocated) - */ - int (*create_mmap_buffer)(const struct audio_stream_in *stream, - int32_t min_size_frames, - struct audio_mmap_buffer_info *info); - - /** - * Called by the framework to read current read/write position in the mmap buffer - * with associated time stamp. - * - * \note Function only implemented by streams operating in mmap mode. - * - * \param[in] stream the stream object. - * \param[out] position address at which the mmap read/write position should be returned. - * - * \return 0 if the position is successfully returned. - * -ENODATA if the position cannot be retreived - * -ENOSYS if called before mmap_read_position() - */ - int (*get_mmap_position)(const struct audio_stream_in *stream, - struct audio_mmap_position *position); -}; -typedef struct audio_stream_in audio_stream_in_t; - -/** - * return the frame size (number of bytes per sample). - * - * Deprecated: use audio_stream_out_frame_size() or audio_stream_in_frame_size() instead. - */ -__attribute__((__deprecated__)) -static inline size_t audio_stream_frame_size(const struct audio_stream *s) -{ - size_t chan_samp_sz; - audio_format_t format = s->get_format(s); - - if (audio_has_proportional_frames(format)) { - chan_samp_sz = audio_bytes_per_sample(format); - return popcount(s->get_channels(s)) * chan_samp_sz; - } - - return sizeof(int8_t); -} - -/** - * return the frame size (number of bytes per sample) of an output stream. - */ -static inline size_t audio_stream_out_frame_size(const struct audio_stream_out *s) -{ - size_t chan_samp_sz; - audio_format_t format = s->common.get_format(&s->common); - - if (audio_has_proportional_frames(format)) { - chan_samp_sz = audio_bytes_per_sample(format); - return audio_channel_count_from_out_mask(s->common.get_channels(&s->common)) * chan_samp_sz; - } - - return sizeof(int8_t); -} - -/** - * return the frame size (number of bytes per sample) of an input stream. - */ -static inline size_t audio_stream_in_frame_size(const struct audio_stream_in *s) -{ - size_t chan_samp_sz; - audio_format_t format = s->common.get_format(&s->common); - - if (audio_has_proportional_frames(format)) { - chan_samp_sz = audio_bytes_per_sample(format); - return audio_channel_count_from_in_mask(s->common.get_channels(&s->common)) * chan_samp_sz; - } - - return sizeof(int8_t); -} - -/**********************************************************************/ - -/** - * Every hardware module must have a data structure named HAL_MODULE_INFO_SYM - * and the fields of this data structure must begin with hw_module_t - * followed by module specific information. - */ -struct audio_module { - struct hw_module_t common; -}; - -struct audio_hw_device { - /** - * Common methods of the audio device. This *must* be the first member of audio_hw_device - * as users of this structure will cast a hw_device_t to audio_hw_device pointer in contexts - * where it's known the hw_device_t references an audio_hw_device. - */ - struct hw_device_t common; - - /** - * used by audio flinger to enumerate what devices are supported by - * each audio_hw_device implementation. - * - * Return value is a bitmask of 1 or more values of audio_devices_t - * - * NOTE: audio HAL implementations starting with - * AUDIO_DEVICE_API_VERSION_2_0 do not implement this function. - * All supported devices should be listed in audio_policy.conf - * file and the audio policy manager must choose the appropriate - * audio module based on information in this file. - */ - uint32_t (*get_supported_devices)(const struct audio_hw_device *dev); - - /** - * check to see if the audio hardware interface has been initialized. - * returns 0 on success, -ENODEV on failure. - */ - int (*init_check)(const struct audio_hw_device *dev); - - /** set the audio volume of a voice call. Range is between 0.0 and 1.0 */ - int (*set_voice_volume)(struct audio_hw_device *dev, float volume); - - /** - * set the audio volume for all audio activities other than voice call. - * Range between 0.0 and 1.0. If any value other than 0 is returned, - * the software mixer will emulate this capability. - */ - int (*set_master_volume)(struct audio_hw_device *dev, float volume); - - /** - * Get the current master volume value for the HAL, if the HAL supports - * master volume control. AudioFlinger will query this value from the - * primary audio HAL when the service starts and use the value for setting - * the initial master volume across all HALs. HALs which do not support - * this method may leave it set to NULL. - */ - int (*get_master_volume)(struct audio_hw_device *dev, float *volume); - - /** - * set_mode is called when the audio mode changes. AUDIO_MODE_NORMAL mode - * is for standard audio playback, AUDIO_MODE_RINGTONE when a ringtone is - * playing, and AUDIO_MODE_IN_CALL when a call is in progress. - */ - int (*set_mode)(struct audio_hw_device *dev, audio_mode_t mode); - - /* mic mute */ - int (*set_mic_mute)(struct audio_hw_device *dev, bool state); - int (*get_mic_mute)(const struct audio_hw_device *dev, bool *state); - - /* set/get global audio parameters */ - int (*set_parameters)(struct audio_hw_device *dev, const char *kv_pairs); - - /* - * Returns a pointer to a heap allocated string. The caller is responsible - * for freeing the memory for it using free(). - */ - char * (*get_parameters)(const struct audio_hw_device *dev, - const char *keys); - - /* Returns audio input buffer size according to parameters passed or - * 0 if one of the parameters is not supported. - * See also get_buffer_size which is for a particular stream. - */ - size_t (*get_input_buffer_size)(const struct audio_hw_device *dev, - const struct audio_config *config); - - /** This method creates and opens the audio hardware output stream. - * The "address" parameter qualifies the "devices" audio device type if needed. - * The format format depends on the device type: - * - Bluetooth devices use the MAC address of the device in the form "00:11:22:AA:BB:CC" - * - USB devices use the ALSA card and device numbers in the form "card=X;device=Y" - * - Other devices may use a number or any other string. - */ - - int (*open_output_stream)(struct audio_hw_device *dev, - audio_io_handle_t handle, - audio_devices_t devices, - audio_output_flags_t flags, - struct audio_config *config, - struct audio_stream_out **stream_out, - const char *address); - - void (*close_output_stream)(struct audio_hw_device *dev, - struct audio_stream_out* stream_out); - - /** This method creates and opens the audio hardware input stream */ - int (*open_input_stream)(struct audio_hw_device *dev, - audio_io_handle_t handle, - audio_devices_t devices, - struct audio_config *config, - struct audio_stream_in **stream_in, - audio_input_flags_t flags, - const char *address, - audio_source_t source); - - void (*close_input_stream)(struct audio_hw_device *dev, - struct audio_stream_in *stream_in); - - /** This method dumps the state of the audio hardware */ - int (*dump)(const struct audio_hw_device *dev, int fd); - - /** - * set the audio mute status for all audio activities. If any value other - * than 0 is returned, the software mixer will emulate this capability. - */ - int (*set_master_mute)(struct audio_hw_device *dev, bool mute); - - /** - * Get the current master mute status for the HAL, if the HAL supports - * master mute control. AudioFlinger will query this value from the primary - * audio HAL when the service starts and use the value for setting the - * initial master mute across all HALs. HALs which do not support this - * method may leave it set to NULL. - */ - int (*get_master_mute)(struct audio_hw_device *dev, bool *mute); - - /** - * Routing control - */ - - /* Creates an audio patch between several source and sink ports. - * The handle is allocated by the HAL and should be unique for this - * audio HAL module. */ - int (*create_audio_patch)(struct audio_hw_device *dev, - unsigned int num_sources, - const struct audio_port_config *sources, - unsigned int num_sinks, - const struct audio_port_config *sinks, - audio_patch_handle_t *handle); - - /* Release an audio patch */ - int (*release_audio_patch)(struct audio_hw_device *dev, - audio_patch_handle_t handle); - - /* Fills the list of supported attributes for a given audio port. - * As input, "port" contains the information (type, role, address etc...) - * needed by the HAL to identify the port. - * As output, "port" contains possible attributes (sampling rates, formats, - * channel masks, gain controllers...) for this port. - */ - int (*get_audio_port)(struct audio_hw_device *dev, - struct audio_port *port); - - /* Set audio port configuration */ - int (*set_audio_port_config)(struct audio_hw_device *dev, - const struct audio_port_config *config); - -}; -typedef struct audio_hw_device audio_hw_device_t; - -/** convenience API for opening and closing a supported device */ - -static inline int audio_hw_device_open(const struct hw_module_t* module, - struct audio_hw_device** device) -{ - return module->methods->open(module, AUDIO_HARDWARE_INTERFACE, - TO_HW_DEVICE_T_OPEN(device)); -} - -static inline int audio_hw_device_close(struct audio_hw_device* device) -{ - return device->common.close(&device->common); -} - - -__END_DECLS - -#endif // ANDROID_AUDIO_INTERFACE_H diff --git a/include/hardware/audio_alsaops.h b/include/hardware/audio_alsaops.h deleted file mode 100644 index 6a17a351..00000000 --- a/include/hardware/audio_alsaops.h +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright (C) 2014 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. - */ - -/* This file contains shared utility functions to handle the tinyalsa - * implementation for Android internal audio, generally in the hardware layer. - * Some routines may log a fatal error on failure, as noted. - */ - -#ifndef ANDROID_AUDIO_ALSAOPS_H -#define ANDROID_AUDIO_ALSAOPS_H - -#include <log/log.h> - -#include <system/audio.h> -#include <tinyalsa/asoundlib.h> - -__BEGIN_DECLS - -/* Converts audio_format to pcm_format. - * Parameters: - * format the audio_format_t to convert - * - * Logs a fatal error if format is not a valid convertible audio_format_t. - */ -static inline enum pcm_format pcm_format_from_audio_format(audio_format_t format) -{ - switch (format) { -#if HAVE_BIG_ENDIAN - case AUDIO_FORMAT_PCM_16_BIT: - return PCM_FORMAT_S16_BE; - case AUDIO_FORMAT_PCM_24_BIT_PACKED: - return PCM_FORMAT_S24_3BE; - case AUDIO_FORMAT_PCM_32_BIT: - return PCM_FORMAT_S32_BE; - case AUDIO_FORMAT_PCM_8_24_BIT: - return PCM_FORMAT_S24_BE; -#else - case AUDIO_FORMAT_PCM_16_BIT: - return PCM_FORMAT_S16_LE; - case AUDIO_FORMAT_PCM_24_BIT_PACKED: - return PCM_FORMAT_S24_3LE; - case AUDIO_FORMAT_PCM_32_BIT: - return PCM_FORMAT_S32_LE; - case AUDIO_FORMAT_PCM_8_24_BIT: - return PCM_FORMAT_S24_LE; -#endif - case AUDIO_FORMAT_PCM_FLOAT: /* there is no equivalent for float */ - default: - LOG_ALWAYS_FATAL("pcm_format_from_audio_format: invalid audio format %#x", format); - return 0; - } -} - -/* Converts pcm_format to audio_format. - * Parameters: - * format the pcm_format to convert - * - * Logs a fatal error if format is not a valid convertible pcm_format. - */ -static inline audio_format_t audio_format_from_pcm_format(enum pcm_format format) -{ - switch (format) { -#if HAVE_BIG_ENDIAN - case PCM_FORMAT_S16_BE: - return AUDIO_FORMAT_PCM_16_BIT; - case PCM_FORMAT_S24_3BE: - return AUDIO_FORMAT_PCM_24_BIT_PACKED; - case PCM_FORMAT_S24_BE: - return AUDIO_FORMAT_PCM_8_24_BIT; - case PCM_FORMAT_S32_BE: - return AUDIO_FORMAT_PCM_32_BIT; -#else - case PCM_FORMAT_S16_LE: - return AUDIO_FORMAT_PCM_16_BIT; - case PCM_FORMAT_S24_3LE: - return AUDIO_FORMAT_PCM_24_BIT_PACKED; - case PCM_FORMAT_S24_LE: - return AUDIO_FORMAT_PCM_8_24_BIT; - case PCM_FORMAT_S32_LE: - return AUDIO_FORMAT_PCM_32_BIT; -#endif - default: - LOG_ALWAYS_FATAL("audio_format_from_pcm_format: invalid pcm format %#x", format); - return 0; - } -} - -__END_DECLS - -#endif /* ANDROID_AUDIO_ALSAOPS_H */ diff --git a/include/hardware/audio_effect.h b/include/hardware/audio_effect.h deleted file mode 100644 index 3366e178..00000000 --- a/include/hardware/audio_effect.h +++ /dev/null @@ -1,310 +0,0 @@ -/* - * Copyright (C) 2011 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. - */ - - -#ifndef ANDROID_AUDIO_EFFECT_H -#define ANDROID_AUDIO_EFFECT_H - -#include <errno.h> -#include <stdint.h> -#include <strings.h> -#include <sys/cdefs.h> -#include <sys/types.h> - -#include <cutils/bitops.h> - -#include <system/audio_effect.h> - - -__BEGIN_DECLS - - -///////////////////////////////////////////////// -// Common Definitions -///////////////////////////////////////////////// - -#define EFFECT_MAKE_API_VERSION(M, m) (((M)<<16) | ((m) & 0xFFFF)) -#define EFFECT_API_VERSION_MAJOR(v) ((v)>>16) -#define EFFECT_API_VERSION_MINOR(v) ((m) & 0xFFFF) - - -///////////////////////////////////////////////// -// Effect control interface -///////////////////////////////////////////////// - -// Effect control interface version 2.0 -#define EFFECT_CONTROL_API_VERSION EFFECT_MAKE_API_VERSION(2,0) - -// Effect control interface structure: effect_interface_s -// The effect control interface is exposed by each effect engine implementation. It consists of -// a set of functions controlling the configuration, activation and process of the engine. -// The functions are grouped in a structure of type effect_interface_s. -// -// Effect control interface handle: effect_handle_t -// The effect_handle_t serves two purposes regarding the implementation of the effect engine: -// - 1 it is the address of a pointer to an effect_interface_s structure where the functions -// of the effect control API for a particular effect are located. -// - 2 it is the address of the context of a particular effect instance. -// A typical implementation in the effect library would define a structure as follows: -// struct effect_module_s { -// const struct effect_interface_s *itfe; -// effect_config_t config; -// effect_context_t context; -// } -// The implementation of EffectCreate() function would then allocate a structure of this -// type and return its address as effect_handle_t -typedef struct effect_interface_s **effect_handle_t; - -// Effect control interface definition -struct effect_interface_s { - //////////////////////////////////////////////////////////////////////////////// - // - // Function: process - // - // Description: Effect process function. Takes input samples as specified - // (count and location) in input buffer descriptor and output processed - // samples as specified in output buffer descriptor. If the buffer descriptor - // is not specified the function must use either the buffer or the - // buffer provider function installed by the EFFECT_CMD_SET_CONFIG command. - // The effect framework will call the process() function after the EFFECT_CMD_ENABLE - // command is received and until the EFFECT_CMD_DISABLE is received. When the engine - // receives the EFFECT_CMD_DISABLE command it should turn off the effect gracefully - // and when done indicate that it is OK to stop calling the process() function by - // returning the -ENODATA status. - // - // NOTE: the process() function implementation should be "real-time safe" that is - // it should not perform blocking calls: malloc/free, sleep, read/write/open/close, - // pthread_cond_wait/pthread_mutex_lock... - // - // Input: - // self: handle to the effect interface this function - // is called on. - // inBuffer: buffer descriptor indicating where to read samples to process. - // If NULL, use the configuration passed by EFFECT_CMD_SET_CONFIG command. - // - // outBuffer: buffer descriptor indicating where to write processed samples. - // If NULL, use the configuration passed by EFFECT_CMD_SET_CONFIG command. - // - // Output: - // returned value: 0 successful operation - // -ENODATA the engine has finished the disable phase and the framework - // can stop calling process() - // -EINVAL invalid interface handle or - // invalid input/output buffer description - //////////////////////////////////////////////////////////////////////////////// - int32_t (*process)(effect_handle_t self, - audio_buffer_t *inBuffer, - audio_buffer_t *outBuffer); - //////////////////////////////////////////////////////////////////////////////// - // - // Function: command - // - // Description: Send a command and receive a response to/from effect engine. - // - // Input: - // self: handle to the effect interface this function - // is called on. - // cmdCode: command code: the command can be a standardized command defined in - // effect_command_e (see below) or a proprietary command. - // cmdSize: size of command in bytes - // pCmdData: pointer to command data - // pReplyData: pointer to reply data - // - // Input/Output: - // replySize: maximum size of reply data as input - // actual size of reply data as output - // - // Output: - // returned value: 0 successful operation - // -EINVAL invalid interface handle or - // invalid command/reply size or format according to - // command code - // The return code should be restricted to indicate problems related to this API - // specification. Status related to the execution of a particular command should be - // indicated as part of the reply field. - // - // *pReplyData updated with command response - // - //////////////////////////////////////////////////////////////////////////////// - int32_t (*command)(effect_handle_t self, - uint32_t cmdCode, - uint32_t cmdSize, - void *pCmdData, - uint32_t *replySize, - void *pReplyData); - //////////////////////////////////////////////////////////////////////////////// - // - // Function: get_descriptor - // - // Description: Returns the effect descriptor - // - // Input: - // self: handle to the effect interface this function - // is called on. - // - // Input/Output: - // pDescriptor: address where to return the effect descriptor. - // - // Output: - // returned value: 0 successful operation. - // -EINVAL invalid interface handle or invalid pDescriptor - // *pDescriptor: updated with the effect descriptor. - // - //////////////////////////////////////////////////////////////////////////////// - int32_t (*get_descriptor)(effect_handle_t self, - effect_descriptor_t *pDescriptor); - //////////////////////////////////////////////////////////////////////////////// - // - // Function: process_reverse - // - // Description: Process reverse stream function. This function is used to pass - // a reference stream to the effect engine. If the engine does not need a reference - // stream, this function pointer can be set to NULL. - // This function would typically implemented by an Echo Canceler. - // - // Input: - // self: handle to the effect interface this function - // is called on. - // inBuffer: buffer descriptor indicating where to read samples to process. - // If NULL, use the configuration passed by EFFECT_CMD_SET_CONFIG_REVERSE command. - // - // outBuffer: buffer descriptor indicating where to write processed samples. - // If NULL, use the configuration passed by EFFECT_CMD_SET_CONFIG_REVERSE command. - // If the buffer and buffer provider in the configuration received by - // EFFECT_CMD_SET_CONFIG_REVERSE are also NULL, do not return modified reverse - // stream data - // - // Output: - // returned value: 0 successful operation - // -ENODATA the engine has finished the disable phase and the framework - // can stop calling process_reverse() - // -EINVAL invalid interface handle or - // invalid input/output buffer description - //////////////////////////////////////////////////////////////////////////////// - int32_t (*process_reverse)(effect_handle_t self, - audio_buffer_t *inBuffer, - audio_buffer_t *outBuffer); -}; - -///////////////////////////////////////////////// -// Effect library interface -///////////////////////////////////////////////// - -// Effect library interface version 3.0 -// Note that EffectsFactory.c only checks the major version component, so changes to the minor -// number can only be used for fully backwards compatible changes -#define EFFECT_LIBRARY_API_VERSION EFFECT_MAKE_API_VERSION(3,0) - -#define AUDIO_EFFECT_LIBRARY_TAG ((('A') << 24) | (('E') << 16) | (('L') << 8) | ('T')) - -// Every effect library must have a data structure named AUDIO_EFFECT_LIBRARY_INFO_SYM -// and the fields of this data structure must begin with audio_effect_library_t - -typedef struct audio_effect_library_s { - // tag must be initialized to AUDIO_EFFECT_LIBRARY_TAG - uint32_t tag; - // Version of the effect library API : 0xMMMMmmmm MMMM: Major, mmmm: minor - uint32_t version; - // Name of this library - const char *name; - // Author/owner/implementor of the library - const char *implementor; - - //////////////////////////////////////////////////////////////////////////////// - // - // Function: create_effect - // - // Description: Creates an effect engine of the specified implementation uuid and - // returns an effect control interface on this engine. The function will allocate the - // resources for an instance of the requested effect engine and return - // a handle on the effect control interface. - // - // Input: - // uuid: pointer to the effect uuid. - // sessionId: audio session to which this effect instance will be attached. - // All effects created with the same session ID are connected in series and process - // the same signal stream. Knowing that two effects are part of the same effect - // chain can help the library implement some kind of optimizations. - // ioId: identifies the output or input stream this effect is directed to in - // audio HAL. - // For future use especially with tunneled HW accelerated effects - // - // Input/Output: - // pHandle: address where to return the effect interface handle. - // - // Output: - // returned value: 0 successful operation. - // -ENODEV library failed to initialize - // -EINVAL invalid pEffectUuid or pHandle - // -ENOENT no effect with this uuid found - // *pHandle: updated with the effect interface handle. - // - //////////////////////////////////////////////////////////////////////////////// - int32_t (*create_effect)(const effect_uuid_t *uuid, - int32_t sessionId, - int32_t ioId, - effect_handle_t *pHandle); - - //////////////////////////////////////////////////////////////////////////////// - // - // Function: release_effect - // - // Description: Releases the effect engine whose handle is given as argument. - // All resources allocated to this particular instance of the effect are - // released. - // - // Input: - // handle: handle on the effect interface to be released. - // - // Output: - // returned value: 0 successful operation. - // -ENODEV library failed to initialize - // -EINVAL invalid interface handle - // - //////////////////////////////////////////////////////////////////////////////// - int32_t (*release_effect)(effect_handle_t handle); - - //////////////////////////////////////////////////////////////////////////////// - // - // Function: get_descriptor - // - // Description: Returns the descriptor of the effect engine which implementation UUID is - // given as argument. - // - // Input/Output: - // uuid: pointer to the effect uuid. - // pDescriptor: address where to return the effect descriptor. - // - // Output: - // returned value: 0 successful operation. - // -ENODEV library failed to initialize - // -EINVAL invalid pDescriptor or uuid - // *pDescriptor: updated with the effect descriptor. - // - //////////////////////////////////////////////////////////////////////////////// - int32_t (*get_descriptor)(const effect_uuid_t *uuid, - effect_descriptor_t *pDescriptor); -} audio_effect_library_t; - -// Name of the hal_module_info -#define AUDIO_EFFECT_LIBRARY_INFO_SYM AELI - -// Name of the hal_module_info as a string -#define AUDIO_EFFECT_LIBRARY_INFO_SYM_AS_STR "AELI" - -__END_DECLS - -#endif // ANDROID_AUDIO_EFFECT_H diff --git a/include/hardware/audio_policy.h b/include/hardware/audio_policy.h deleted file mode 100644 index bacb1e55..00000000 --- a/include/hardware/audio_policy.h +++ /dev/null @@ -1,457 +0,0 @@ -/* - * Copyright (C) 2011 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. - */ - - -#ifndef ANDROID_AUDIO_POLICY_INTERFACE_H -#define ANDROID_AUDIO_POLICY_INTERFACE_H - -#include <stdint.h> -#include <sys/cdefs.h> -#include <sys/types.h> - -#include <hardware/hardware.h> - -#include <system/audio.h> -#include <system/audio_policy.h> - -__BEGIN_DECLS - -/** - * The id of this module - */ -#define AUDIO_POLICY_HARDWARE_MODULE_ID "audio_policy" - -/** - * Name of the audio devices to open - */ -#define AUDIO_POLICY_INTERFACE "policy" - -/* ---------------------------------------------------------------------------- */ - -/* - * The audio_policy and audio_policy_service_ops structs define the - * communication interfaces between the platform specific audio policy manager - * and Android generic audio policy manager. - * The platform specific audio policy manager must implement methods of the - * audio_policy struct. - * This implementation makes use of the audio_policy_service_ops to control - * the activity and configuration of audio input and output streams. - * - * The platform specific audio policy manager is in charge of the audio - * routing and volume control policies for a given platform. - * The main roles of this module are: - * - keep track of current system state (removable device connections, phone - * state, user requests...). - * System state changes and user actions are notified to audio policy - * manager with methods of the audio_policy. - * - * - process get_output() queries received when AudioTrack objects are - * created: Those queries return a handler on an output that has been - * selected, configured and opened by the audio policy manager and that - * must be used by the AudioTrack when registering to the AudioFlinger - * with the createTrack() method. - * When the AudioTrack object is released, a release_output() query - * is received and the audio policy manager can decide to close or - * reconfigure the output depending on other streams using this output and - * current system state. - * - * - similarly process get_input() and release_input() queries received from - * AudioRecord objects and configure audio inputs. - * - process volume control requests: the stream volume is converted from - * an index value (received from UI) to a float value applicable to each - * output as a function of platform specific settings and current output - * route (destination device). It also make sure that streams are not - * muted if not allowed (e.g. camera shutter sound in some countries). - */ - -/* XXX: this should be defined OUTSIDE of frameworks/base */ -struct effect_descriptor_s; - -struct audio_policy { - /* - * configuration functions - */ - - /* indicate a change in device connection status */ - int (*set_device_connection_state)(struct audio_policy *pol, - audio_devices_t device, - audio_policy_dev_state_t state, - const char *device_address); - - /* retrieve a device connection status */ - audio_policy_dev_state_t (*get_device_connection_state)( - const struct audio_policy *pol, - audio_devices_t device, - const char *device_address); - - /* indicate a change in phone state. Valid phones states are defined - * by audio_mode_t */ - void (*set_phone_state)(struct audio_policy *pol, audio_mode_t state); - - /* deprecated, never called (was "indicate a change in ringer mode") */ - void (*set_ringer_mode)(struct audio_policy *pol, uint32_t mode, - uint32_t mask); - - /* force using a specific device category for the specified usage */ - void (*set_force_use)(struct audio_policy *pol, - audio_policy_force_use_t usage, - audio_policy_forced_cfg_t config); - - /* retrieve current device category forced for a given usage */ - audio_policy_forced_cfg_t (*get_force_use)(const struct audio_policy *pol, - audio_policy_force_use_t usage); - - /* if can_mute is true, then audio streams that are marked ENFORCED_AUDIBLE - * can still be muted. */ - void (*set_can_mute_enforced_audible)(struct audio_policy *pol, - bool can_mute); - - /* check proper initialization */ - int (*init_check)(const struct audio_policy *pol); - - /* - * Audio routing query functions - */ - - /* request an output appropriate for playback of the supplied stream type and - * parameters */ - audio_io_handle_t (*get_output)(struct audio_policy *pol, - audio_stream_type_t stream, - uint32_t samplingRate, - audio_format_t format, - audio_channel_mask_t channelMask, - audio_output_flags_t flags, - const audio_offload_info_t *offloadInfo); - - /* indicates to the audio policy manager that the output starts being used - * by corresponding stream. */ - int (*start_output)(struct audio_policy *pol, - audio_io_handle_t output, - audio_stream_type_t stream, - audio_session_t session); - - /* indicates to the audio policy manager that the output stops being used - * by corresponding stream. */ - int (*stop_output)(struct audio_policy *pol, - audio_io_handle_t output, - audio_stream_type_t stream, - audio_session_t session); - - /* releases the output. */ - void (*release_output)(struct audio_policy *pol, audio_io_handle_t output); - - /* request an input appropriate for record from the supplied device with - * supplied parameters. */ - audio_io_handle_t (*get_input)(struct audio_policy *pol, audio_source_t inputSource, - uint32_t samplingRate, - audio_format_t format, - audio_channel_mask_t channelMask, - audio_in_acoustics_t acoustics); - - /* indicates to the audio policy manager that the input starts being used */ - int (*start_input)(struct audio_policy *pol, audio_io_handle_t input); - - /* indicates to the audio policy manager that the input stops being used. */ - int (*stop_input)(struct audio_policy *pol, audio_io_handle_t input); - - /* releases the input. */ - void (*release_input)(struct audio_policy *pol, audio_io_handle_t input); - - /* - * volume control functions - */ - - /* initialises stream volume conversion parameters by specifying volume - * index range. The index range for each stream is defined by AudioService. */ - void (*init_stream_volume)(struct audio_policy *pol, - audio_stream_type_t stream, - int index_min, - int index_max); - - /* sets the new stream volume at a level corresponding to the supplied - * index. The index is within the range specified by init_stream_volume() */ - int (*set_stream_volume_index)(struct audio_policy *pol, - audio_stream_type_t stream, - int index); - - /* retrieve current volume index for the specified stream */ - int (*get_stream_volume_index)(const struct audio_policy *pol, - audio_stream_type_t stream, - int *index); - - /* sets the new stream volume at a level corresponding to the supplied - * index for the specified device. - * The index is within the range specified by init_stream_volume() */ - int (*set_stream_volume_index_for_device)(struct audio_policy *pol, - audio_stream_type_t stream, - int index, - audio_devices_t device); - - /* retrieve current volume index for the specified stream for the specified device */ - int (*get_stream_volume_index_for_device)(const struct audio_policy *pol, - audio_stream_type_t stream, - int *index, - audio_devices_t device); - - /* return the strategy corresponding to a given stream type */ - uint32_t (*get_strategy_for_stream)(const struct audio_policy *pol, - audio_stream_type_t stream); - - /* return the enabled output devices for the given stream type */ - audio_devices_t (*get_devices_for_stream)(const struct audio_policy *pol, - audio_stream_type_t stream); - - /* Audio effect management */ - audio_io_handle_t (*get_output_for_effect)(struct audio_policy *pol, - const struct effect_descriptor_s *desc); - - int (*register_effect)(struct audio_policy *pol, - const struct effect_descriptor_s *desc, - audio_io_handle_t output, - uint32_t strategy, - audio_session_t session, - int id); - - int (*unregister_effect)(struct audio_policy *pol, int id); - - int (*set_effect_enabled)(struct audio_policy *pol, int id, bool enabled); - - bool (*is_stream_active)(const struct audio_policy *pol, - audio_stream_type_t stream, - uint32_t in_past_ms); - - bool (*is_stream_active_remotely)(const struct audio_policy *pol, - audio_stream_type_t stream, - uint32_t in_past_ms); - - bool (*is_source_active)(const struct audio_policy *pol, - audio_source_t source); - - /* dump state */ - int (*dump)(const struct audio_policy *pol, int fd); - - /* check if offload is possible for given sample rate, bitrate, duration, ... */ - bool (*is_offload_supported)(const struct audio_policy *pol, - const audio_offload_info_t *info); -}; - - -struct audio_policy_service_ops { - /* - * Audio output Control functions - */ - - /* Opens an audio output with the requested parameters. - * - * The parameter values can indicate to use the default values in case the - * audio policy manager has no specific requirements for the output being - * opened. - * - * When the function returns, the parameter values reflect the actual - * values used by the audio hardware output stream. - * - * The audio policy manager can check if the proposed parameters are - * suitable or not and act accordingly. - */ - audio_io_handle_t (*open_output)(void *service, - audio_devices_t *pDevices, - uint32_t *pSamplingRate, - audio_format_t *pFormat, - audio_channel_mask_t *pChannelMask, - uint32_t *pLatencyMs, - audio_output_flags_t flags); - - /* creates a special output that is duplicated to the two outputs passed as - * arguments. The duplication is performed by - * a special mixer thread in the AudioFlinger. - */ - audio_io_handle_t (*open_duplicate_output)(void *service, - audio_io_handle_t output1, - audio_io_handle_t output2); - - /* closes the output stream */ - int (*close_output)(void *service, audio_io_handle_t output); - - /* suspends the output. - * - * When an output is suspended, the corresponding audio hardware output - * stream is placed in standby and the AudioTracks attached to the mixer - * thread are still processed but the output mix is discarded. - */ - int (*suspend_output)(void *service, audio_io_handle_t output); - - /* restores a suspended output. */ - int (*restore_output)(void *service, audio_io_handle_t output); - - /* */ - /* Audio input Control functions */ - /* */ - - /* opens an audio input - * deprecated - new implementations should use open_input_on_module, - * and the acoustics parameter is ignored - */ - audio_io_handle_t (*open_input)(void *service, - audio_devices_t *pDevices, - uint32_t *pSamplingRate, - audio_format_t *pFormat, - audio_channel_mask_t *pChannelMask, - audio_in_acoustics_t acoustics); - - /* closes an audio input */ - int (*close_input)(void *service, audio_io_handle_t input); - - /* */ - /* misc control functions */ - /* */ - - /* set a stream volume for a particular output. - * - * For the same user setting, a given stream type can have different - * volumes for each output (destination device) it is attached to. - */ - int (*set_stream_volume)(void *service, - audio_stream_type_t stream, - float volume, - audio_io_handle_t output, - int delay_ms); - - /* invalidate a stream type, causing a reroute to an unspecified new output */ - int (*invalidate_stream)(void *service, - audio_stream_type_t stream); - - /* function enabling to send proprietary informations directly from audio - * policy manager to audio hardware interface. */ - void (*set_parameters)(void *service, - audio_io_handle_t io_handle, - const char *kv_pairs, - int delay_ms); - - /* function enabling to receive proprietary informations directly from - * audio hardware interface to audio policy manager. - * - * Returns a pointer to a heap allocated string. The caller is responsible - * for freeing the memory for it using free(). - */ - - char * (*get_parameters)(void *service, audio_io_handle_t io_handle, - const char *keys); - - /* request the playback of a tone on the specified stream. - * used for instance to replace notification sounds when playing over a - * telephony device during a phone call. - */ - int (*start_tone)(void *service, - audio_policy_tone_t tone, - audio_stream_type_t stream); - - int (*stop_tone)(void *service); - - /* set down link audio volume. */ - int (*set_voice_volume)(void *service, - float volume, - int delay_ms); - - /* move effect to the specified output */ - int (*move_effects)(void *service, - audio_session_t session, - audio_io_handle_t src_output, - audio_io_handle_t dst_output); - - /* loads an audio hw module. - * - * The module name passed is the base name of the HW module library, e.g "primary" or "a2dp". - * The function returns a handle on the module that will be used to specify a particular - * module when calling open_output_on_module() or open_input_on_module() - */ - audio_module_handle_t (*load_hw_module)(void *service, - const char *name); - - /* Opens an audio output on a particular HW module. - * - * Same as open_output() but specifying a specific HW module on which the output must be opened. - */ - audio_io_handle_t (*open_output_on_module)(void *service, - audio_module_handle_t module, - audio_devices_t *pDevices, - uint32_t *pSamplingRate, - audio_format_t *pFormat, - audio_channel_mask_t *pChannelMask, - uint32_t *pLatencyMs, - audio_output_flags_t flags, - const audio_offload_info_t *offloadInfo); - - /* Opens an audio input on a particular HW module. - * - * Same as open_input() but specifying a specific HW module on which the input must be opened. - * Also removed deprecated acoustics parameter - */ - audio_io_handle_t (*open_input_on_module)(void *service, - audio_module_handle_t module, - audio_devices_t *pDevices, - uint32_t *pSamplingRate, - audio_format_t *pFormat, - audio_channel_mask_t *pChannelMask); - -}; - -/**********************************************************************/ - -/** - * Every hardware module must have a data structure named HAL_MODULE_INFO_SYM - * and the fields of this data structure must begin with hw_module_t - * followed by module specific information. - */ -typedef struct audio_policy_module { - struct hw_module_t common; -} audio_policy_module_t; - -struct audio_policy_device { - /** - * Common methods of the audio policy device. This *must* be the first member of - * audio_policy_device as users of this structure will cast a hw_device_t to - * audio_policy_device pointer in contexts where it's known the hw_device_t references an - * audio_policy_device. - */ - struct hw_device_t common; - - int (*create_audio_policy)(const struct audio_policy_device *device, - struct audio_policy_service_ops *aps_ops, - void *service, - struct audio_policy **ap); - - int (*destroy_audio_policy)(const struct audio_policy_device *device, - struct audio_policy *ap); -}; - -/** convenience API for opening and closing a supported device */ - -static inline int audio_policy_dev_open(const hw_module_t* module, - struct audio_policy_device** device) -{ - return module->methods->open(module, AUDIO_POLICY_INTERFACE, - (hw_device_t**)device); -} - -static inline int audio_policy_dev_close(struct audio_policy_device* device) -{ - return device->common.close(&device->common); -} - - -__END_DECLS - -#endif // ANDROID_AUDIO_POLICY_INTERFACE_H diff --git a/modules/audio/Android.bp b/modules/audio/Android.bp index a7467c29..7929c66c 100644 --- a/modules/audio/Android.bp +++ b/modules/audio/Android.bp @@ -23,7 +23,10 @@ cc_library_shared { relative_install_path: "hw", proprietary: true, srcs: ["audio_hw.c"], - header_libs: ["libhardware_headers"], + header_libs: [ + "libhardware_headers", + "android.hardware.audio.common.legacy@2.0", + ], shared_libs: [ "liblog", ], @@ -41,21 +44,10 @@ cc_library_shared { relative_install_path: "hw", proprietary: true, srcs: ["audio_hw.c"], - header_libs: ["libhardware_headers"], - shared_libs: [ - "liblog", + header_libs: [ + "libhardware_headers", + "android.hardware.audio.common.legacy@2.0", ], - cflags: ["-Wall", "-Werror", "-Wno-unused-parameter"], -} - -// The stub audio policy HAL module that can be used as a skeleton for -// new implementations. -cc_library_shared { - name: "audio_policy.stub", - relative_install_path: "hw", - proprietary: true, - srcs: ["audio_policy.c"], - header_libs: ["libhardware_headers"], shared_libs: [ "liblog", ], diff --git a/modules/audio/audio_policy.c b/modules/audio/audio_policy.c deleted file mode 100644 index 4f9cd5a5..00000000 --- a/modules/audio/audio_policy.c +++ /dev/null @@ -1,350 +0,0 @@ -/* - * Copyright (C) 2011 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. - */ - -#define LOG_TAG "audio_policy_default" -//#define LOG_NDEBUG 0 - -#include <errno.h> -#include <stdint.h> -#include <stdlib.h> -#include <string.h> - -#include <hardware/hardware.h> -#include <system/audio.h> -#include <system/audio_policy.h> -#include <hardware/audio_policy.h> - -struct default_ap_module { - struct audio_policy_module module; -}; - -struct default_ap_device { - struct audio_policy_device device; -}; - -struct default_audio_policy { - struct audio_policy policy; - - struct audio_policy_service_ops *aps_ops; - void *service; -}; - -static int ap_set_device_connection_state(struct audio_policy *pol, - audio_devices_t device, - audio_policy_dev_state_t state, - const char *device_address) -{ - return -ENOSYS; -} - -static audio_policy_dev_state_t ap_get_device_connection_state( - const struct audio_policy *pol, - audio_devices_t device, - const char *device_address) -{ - return AUDIO_POLICY_DEVICE_STATE_UNAVAILABLE; -} - -static void ap_set_phone_state(struct audio_policy *pol, audio_mode_t state) -{ -} - -// deprecated, never called -static void ap_set_ringer_mode(struct audio_policy *pol, uint32_t mode, - uint32_t mask) -{ -} - -static void ap_set_force_use(struct audio_policy *pol, - audio_policy_force_use_t usage, - audio_policy_forced_cfg_t config) -{ -} - - /* retreive current device category forced for a given usage */ -static audio_policy_forced_cfg_t ap_get_force_use( - const struct audio_policy *pol, - audio_policy_force_use_t usage) -{ - return AUDIO_POLICY_FORCE_NONE; -} - -/* if can_mute is true, then audio streams that are marked ENFORCED_AUDIBLE - * can still be muted. */ -static void ap_set_can_mute_enforced_audible(struct audio_policy *pol, - bool can_mute) -{ -} - -static int ap_init_check(const struct audio_policy *pol) -{ - return 0; -} - -static audio_io_handle_t ap_get_output(struct audio_policy *pol, - audio_stream_type_t stream, - uint32_t sampling_rate, - audio_format_t format, - audio_channel_mask_t channelMask, - audio_output_flags_t flags, - const audio_offload_info_t *info) -{ - return 0; -} - -static int ap_start_output(struct audio_policy *pol, audio_io_handle_t output, - audio_stream_type_t stream, int session) -{ - return -ENOSYS; -} - -static int ap_stop_output(struct audio_policy *pol, audio_io_handle_t output, - audio_stream_type_t stream, int session) -{ - return -ENOSYS; -} - -static void ap_release_output(struct audio_policy *pol, - audio_io_handle_t output) -{ -} - -static audio_io_handle_t ap_get_input(struct audio_policy *pol, audio_source_t inputSource, - uint32_t sampling_rate, - audio_format_t format, - audio_channel_mask_t channelMask, - audio_in_acoustics_t acoustics) -{ - return 0; -} - -static int ap_start_input(struct audio_policy *pol, audio_io_handle_t input) -{ - return -ENOSYS; -} - -static int ap_stop_input(struct audio_policy *pol, audio_io_handle_t input) -{ - return -ENOSYS; -} - -static void ap_release_input(struct audio_policy *pol, audio_io_handle_t input) -{ -} - -static void ap_init_stream_volume(struct audio_policy *pol, - audio_stream_type_t stream, int index_min, - int index_max) -{ -} - -static int ap_set_stream_volume_index(struct audio_policy *pol, - audio_stream_type_t stream, - int index) -{ - return -ENOSYS; -} - -static int ap_get_stream_volume_index(const struct audio_policy *pol, - audio_stream_type_t stream, - int *index) -{ - return -ENOSYS; -} - -static int ap_set_stream_volume_index_for_device(struct audio_policy *pol, - audio_stream_type_t stream, - int index, - audio_devices_t device) -{ - return -ENOSYS; -} - -static int ap_get_stream_volume_index_for_device(const struct audio_policy *pol, - audio_stream_type_t stream, - int *index, - audio_devices_t device) -{ - return -ENOSYS; -} - -static uint32_t ap_get_strategy_for_stream(const struct audio_policy *pol, - audio_stream_type_t stream) -{ - return 0; -} - -static audio_devices_t ap_get_devices_for_stream(const struct audio_policy *pol, - audio_stream_type_t stream) -{ - return 0; -} - -static audio_io_handle_t ap_get_output_for_effect(struct audio_policy *pol, - const struct effect_descriptor_s *desc) -{ - return 0; -} - -static int ap_register_effect(struct audio_policy *pol, - const struct effect_descriptor_s *desc, - audio_io_handle_t output, - uint32_t strategy, - int session, - int id) -{ - return -ENOSYS; -} - -static int ap_unregister_effect(struct audio_policy *pol, int id) -{ - return -ENOSYS; -} - -static int ap_set_effect_enabled(struct audio_policy *pol, int id, bool enabled) -{ - return -ENOSYS; -} - -static bool ap_is_stream_active(const struct audio_policy *pol, audio_stream_type_t stream, - uint32_t in_past_ms) -{ - return false; -} - -static int ap_dump(const struct audio_policy *pol, int fd) -{ - return -ENOSYS; -} - -static bool ap_is_offload_supported(const struct audio_policy *pol, - const audio_offload_info_t *info) -{ - return false; -} - -static int create_default_ap(const struct audio_policy_device *device, - struct audio_policy_service_ops *aps_ops, - void *service, - struct audio_policy **ap) -{ - struct default_audio_policy *dap; - - *ap = NULL; - - if (!service || !aps_ops) - return -EINVAL; - - dap = (struct default_audio_policy *)calloc(1, sizeof(*dap)); - if (!dap) - return -ENOMEM; - - dap->policy.set_device_connection_state = ap_set_device_connection_state; - dap->policy.get_device_connection_state = ap_get_device_connection_state; - dap->policy.set_phone_state = ap_set_phone_state; - dap->policy.set_ringer_mode = ap_set_ringer_mode; - dap->policy.set_force_use = ap_set_force_use; - dap->policy.get_force_use = ap_get_force_use; - dap->policy.set_can_mute_enforced_audible = - ap_set_can_mute_enforced_audible; - dap->policy.init_check = ap_init_check; - dap->policy.get_output = ap_get_output; - dap->policy.start_output = ap_start_output; - dap->policy.stop_output = ap_stop_output; - dap->policy.release_output = ap_release_output; - dap->policy.get_input = ap_get_input; - dap->policy.start_input = ap_start_input; - dap->policy.stop_input = ap_stop_input; - dap->policy.release_input = ap_release_input; - dap->policy.init_stream_volume = ap_init_stream_volume; - dap->policy.set_stream_volume_index = ap_set_stream_volume_index; - dap->policy.get_stream_volume_index = ap_get_stream_volume_index; - dap->policy.set_stream_volume_index_for_device = ap_set_stream_volume_index_for_device; - dap->policy.get_stream_volume_index_for_device = ap_get_stream_volume_index_for_device; - dap->policy.get_strategy_for_stream = ap_get_strategy_for_stream; - dap->policy.get_devices_for_stream = ap_get_devices_for_stream; - dap->policy.get_output_for_effect = ap_get_output_for_effect; - dap->policy.register_effect = ap_register_effect; - dap->policy.unregister_effect = ap_unregister_effect; - dap->policy.set_effect_enabled = ap_set_effect_enabled; - dap->policy.is_stream_active = ap_is_stream_active; - dap->policy.dump = ap_dump; - - dap->policy.is_offload_supported = ap_is_offload_supported; - - dap->service = service; - dap->aps_ops = aps_ops; - - *ap = &dap->policy; - return 0; -} - -static int destroy_default_ap(const struct audio_policy_device *ap_dev, - struct audio_policy *ap) -{ - free(ap); - return 0; -} - -static int default_ap_dev_close(hw_device_t* device) -{ - free(device); - return 0; -} - -static int default_ap_dev_open(const hw_module_t* module, const char* name, - hw_device_t** device) -{ - struct default_ap_device *dev; - - *device = NULL; - - if (strcmp(name, AUDIO_POLICY_INTERFACE) != 0) - return -EINVAL; - - dev = (struct default_ap_device *)calloc(1, sizeof(*dev)); - if (!dev) - return -ENOMEM; - - dev->device.common.tag = HARDWARE_DEVICE_TAG; - dev->device.common.version = 0; - dev->device.common.module = (hw_module_t *)module; - dev->device.common.close = default_ap_dev_close; - dev->device.create_audio_policy = create_default_ap; - dev->device.destroy_audio_policy = destroy_default_ap; - - *device = &dev->device.common; - - return 0; -} - -static struct hw_module_methods_t default_ap_module_methods = { - .open = default_ap_dev_open, -}; - -struct default_ap_module HAL_MODULE_INFO_SYM = { - .module = { - .common = { - .tag = HARDWARE_MODULE_TAG, - .version_major = 1, - .version_minor = 0, - .id = AUDIO_POLICY_HARDWARE_MODULE_ID, - .name = "Default audio policy HAL", - .author = "The Android Open Source Project", - .methods = &default_ap_module_methods, - }, - }, -}; diff --git a/modules/audio_remote_submix/Android.bp b/modules/audio_remote_submix/Android.bp index c7d018c0..578949ed 100644 --- a/modules/audio_remote_submix/Android.bp +++ b/modules/audio_remote_submix/Android.bp @@ -17,16 +17,15 @@ cc_library_shared { relative_install_path: "hw", vendor: true, srcs: ["audio_hw.cpp"], - include_dirs: [ - "system/media/audio_utils/include", - ], + shared_libs: [ "liblog", "libcutils", "libutils", - "libnbaio_mono", + "libnbaio_mono@2.0", + "libaudioutils", ], - static_libs: ["libmedia_helper"], + static_libs: ["libmedia_helper@2.0"], cflags: ["-Wno-unused-parameter"], diff --git a/modules/usbaudio/Android.bp b/modules/usbaudio/Android.bp index c7d403f5..ecc74fbd 100644 --- a/modules/usbaudio/Android.bp +++ b/modules/usbaudio/Android.bp @@ -25,5 +25,7 @@ cc_library_shared { "libalsautils", ], cflags: ["-Wno-unused-parameter"], - header_libs: ["libhardware_headers"], + header_libs: [ + "android.hardware.audio.common.legacy@2.0", + ], } |