Commit Graph

68 Commits

Author SHA1 Message Date
Jean-Michel Trivi
5a56109d1f AudioService receives callback for dynamic policy mix state changes
AudioService registers a callback for dynamic policies from
  AudioSystem.
AudioSystem keeps track of a single callback for dynamic policies.

Bug 20226914

Change-Id: I48899d20d1dbb47bb680e733a3bc9fd064b60f07
2015-04-29 17:56:19 -07:00
Rom Lemarchand
b2b2923174 Change audio include path from system/core to system/media/audio
Change-Id: Iefd5933e7ba10fa2a8ca3489bcbee3bc8f1396ad
2015-04-03 15:11:28 -07:00
John Spurlock
6156017c22 Move AudioService to services.
...and a few dependencies. Move remaining shared items to AudioSystem.

Change-Id: Ib9623ff867678d34977337856bb0156e8cdaeeb5
2015-02-09 17:13:38 -05:00
Paul McLean
10804eb281 Add additional info to AudioPort for enum/selection API.
Add "device name" member to AudioPort.
Moved unique device ID from DevicePort to AudioPort.
Straighten out confusion between "name" and "address"
Created string constants for Intent "extra" data keys.
Combine card/address data into "address" at sender.Add additional info to AudioPort for enum/selection API.
Parse out USB Device name in UsbCardsParser.

Change-Id: Ifd76b0298312090a8f39e638339f993b86d47080
2015-02-04 14:37:19 -08:00
Eric Laurent
7f5eb9fe3c AudioSystem JNI: Add audio policy custom mixes registration
Bug: 16009464.

Change-Id: I3763e79f4fa0331acb56d1d6f575c7a36e0bebd5
2014-12-08 09:37:30 -08:00
Mike Lockwood
07cd124b09 Improve toString() methods for audio classes to help with debugging
bug: 18139399

Change-Id: I6076f9f5daa3b485bc80a4ff1b16a583e6c93f67
2014-10-27 14:07:35 -07:00
John Spurlock
2b29bc4c1c Enhance audio service dumpsys.
- Add device name for keys
 - Add max volume for streams
 - Add missing stream name constant

Bug:16964015
Change-Id: I92facbd8ae49ba299c27bcb10bcf6668fed0d302
2014-08-28 12:20:05 -04:00
Eric Laurent
b634e1b6d6 AudioSystem: add API to query audio HW sync source
Add a method to query from the audio HAL the HW sync
source used for a given audio session.
Add an AudioAttributes flag to request an output with
HW sync source.

Bug: 16132368.
Change-Id: Ic31b2924b98f242c3aa0d58688879f05ea02d6f7
2014-08-05 16:56:12 -07:00
Jungshik Jang
12307ca810 Revisit HDMI-CEC system audio mode in AudioService.
From recent feedback on HDMI-CEC system audio mode,
it would be unnecessary to enforce output from AudioService.
Instead, it would follow audio policy according to status
of HDMI-CEC system audio mode.
For that removed two params of setHdmiSystemAudioModeSupported
api of AudioManager.

In terms of speaker mute, it will be handled by removing speaker
from audio ouput instead of changing gain control. For that
added new force usage type, FOR_HDMI_SYSTEM_AUDIO_MODE and
new force config type, FORCE_HDMI_SYSTEM_AUDIO_ENFORCED.
This is used to notify change of system audio mode to
audio policy manager.

Bug: 16305986
Bug: 16002150

Change-Id: I5643ad093a651c951e12b567c6e11b88aa87cea2
2014-07-17 09:27:25 +09:00
Jungshik Jang
6f34f5ab8a Revamp HDMI-CEC system audio mode integration with audio service.
In previous change we use setForceUse(FORCE_MEDIA, XXX) method
in order to set specific audio output type, such as LINE, HDMI_ARC,
and SPDIF. But it turns out that it conflicts with bluetooth
a2dp which uses the same setForceUse(FORCE_MEDIA, yyy).

This change is based on several conditions.

1. When other non-speaker devices are on, prevent system audio
   from turing on.
2. In order to keep track of other devices' connectivity and to
   turn off system audio if other device like bluetooth or
   headphone preempts current output, register OnAudioPortChangeListner
   to audio manager.
3. All possible system audio outputs can be merged with other
   outputs without priority.

Change-Id: Id4e47d99db64b9f77a17c2c28c47787ab8980bf7
2014-07-11 08:07:12 +09:00
Terry Heo
0543b17e84 Merge "AudioSystem: add definition for loopback input device" 2014-07-02 20:35:42 +00:00
Terry Heo
112c19ee8b AudioSystem: add definition for loopback input device
Bug: 15437484
Change-Id: I91d88d476693e9b9a72799f3c52a659a5843e446
2014-07-07 11:34:25 +09:00
Jungshik Jang
41d974631c Add volume callback for Hdmi-Cec system audio mode.
Hdmi-Cec's system audio mode delegates audio control to
audio receiver from tv. It requires to delegate
volume change including mute to audio receiver
instead of consuming by tv.
In order to do this this change introduces three apis.
One is added to IAudioService, the others are added
to IHdmiControlService as hidden apis.

 1. IAudioService#setHdmiSystemAudioSupported;
    This is to notify system audio mode change to audio
    service so that it determines to notify volume or mute
    change to HdmiControlService.

 2. IHdmiControlService#setSystemAudioVolume;
    This is to notify volume change to HdmiControlService.
    It's called only where system audio mode is on.

 3. IHdmiControlService#setSystemAudioMute;
    This is to notify volume change to HdmiControlService .
    It's called only where system audio mode is on.

Change-Id: I3d8534b37ddf1a812e32012059a8778772044bf0
2014-07-03 10:09:32 +09:00
Jungshik Jang
70d34bb485 Define force usage and category for System Audio Control.
This is to be sync with change of system/core/include/system/audio_policy.h

Change-Id: Ibd371197775fb70a96df6e3eef82ec8ae10b0508
2014-07-03 00:42:20 +00:00
Jean-Michel Trivi
a1d80e3b1d AudioTrack Java constructor with AudioAttributes and AudioFormat
Change-Id: I82758a4231b8dc0b8d8e72acf3c896a289c28f60
2014-06-24 17:02:06 -07:00
Wonsik Kim
d7c29189aa TvInputHardware: Integration with audio framework changes
TvInputHardwareManager detects AudioPort specified by tv_input and
connect source to sink via AudioManager.createAudioPatch().

Bug: 15177175
Change-Id: I2252eb0df2d8287889ed28cc7d76dc1a659fd08b
2014-06-19 10:35:33 +09:00
Jean-Michel Trivi
8a21f5dd79 AudioManager: add ability to allocate a new session ID
Expose method to allocate a new session ID.
Make the generic error code public.

Change-Id: Iec93548292845e3a1b1a97be9bbe54e9fcf06f2d
2014-06-10 12:44:04 -07:00
Eric Laurent
3ed851bd07 am f2e19a36: Merge "AudioManager: add audio port gain control" into lmp-preview-dev
* commit 'f2e19a36973331bbc09284993f772bf6981c10da':
  AudioManager: add audio port gain control
2014-05-31 01:56:09 +00:00
Eric Laurent
ec2f4b0aec am 47615317: Merge "AudioSystem: added JNI for routing extensions" into lmp-preview-dev
* commit '476153173b5a1b6b1fb5fc41af8b87d7e1ec36b3':
  AudioSystem: added JNI for routing extensions
2014-05-31 01:55:58 +00:00
Eric Laurent
3a24199a0f AudioManager: add audio port gain control
Implement AudioManager.setAudioPortGain() API.

Bug: 14815883.

Change-Id: Ib54bd1fd1392c474f4767a00228b0a617c51ec5e
2014-05-30 17:13:10 -07:00
Eric Laurent
b69681c894 AudioSystem: added JNI for routing extensions
Bug: 14815883.

Change-Id: Ia0c0d14a8e3051a4bc0ce502b6e979135b170c97
2014-05-30 17:12:48 -07:00
Mike Lockwood
0a40ec2192 Add Audio Manager support for Bluetooth A2DP Sink profile
Change-Id: Iff6035e85faf52647cc41a59f98ba2924300eb8d
2014-05-28 13:32:08 -07:00
Eric Laurent
948d32748c AudioSystem: add new audio device definitions
Change-Id: Ib7675bc33771365b2dbb7694c522469317b11457
2014-05-19 18:43:49 -07:00
Eric Laurent
bc11a696f6 AudioSystem: native to JAVA status translation
Regroup status code translation from native to JAVA in AudioSystem.
The same codes will be used by AudioTrack, AudioRecord, AudioManager
and defined in a single place in AudioSystem.

Change-Id: I7d3f39f30e3bb8e53f33f4408bcb0672df8af42b
2014-05-16 15:50:42 -07:00
Paul McLean
c837a45194 Revert "Revert "Initial implementation of USB Audio output.""
This reverts commit f2f80c09b6.
2014-04-09 09:04:43 -07:00
Eric Laurent
f2f80c09b6 Revert "Initial implementation of USB Audio output."
This reverts commit 3af0fe0c9d
while investigating issues 13751080 and 13883978.

Bug: 13751080.
2014-04-07 18:01:29 -07:00
Paul McLean
3af0fe0c9d Initial implementation of USB Audio output.
Change-Id: I7fbbe421285d628fa49591c6469ac50efec77ccf
2014-03-31 16:41:33 -07:00
Glenn Kasten
4896cb59a4 Merge "Use AUDIO_SESSION_ALLOCATE instead of hard-coded 0" 2014-01-15 01:27:59 +00:00
Eric Laurent
dfb881f96a AudioSystem: new audioflinger restart detection
Add a specific method to AudioSystem for AudioService to poll
for AudioFlinger service restart instead of relying on current
callback mechanism which is flaky.

Bug: 9693068.
Change-Id: Id21d142a22b257205700201978cce1cb8b15180d
2013-08-19 18:26:21 -07:00
Glenn Kasten
fd116ad1ab Inform AudioFlinger of device's low RAM attribute
to help it configure it's memory

Bug: 9798886
Change-Id: Ia2df59cfcb76f5ff48cca92b107915e2adde899c
2013-07-18 10:03:27 -07:00
Glenn Kasten
60bd67f7b1 Use AUDIO_SESSION_ALLOCATE instead of hard-coded 0
Change-Id: Ic56e4a51895297516552e190d508e2257484fb53
2013-06-26 09:07:53 -07:00
Oliver Woodman
61dcdf3764 Expose latency methods through AudioManager and AudioTrack.
There's a longer term plan to fix audio/video sync, but
this gets the Java level to parity with the native level,
and allows applications in Java to achieve sync in the
same way as the native media player. APIs are left as hidden
for now.

Change-Id: Iaf70baac1ffb50ef48e03355163158568fbd0fe9
2013-06-26 16:33:54 +01:00
Jean-Michel Trivi
679d5046f2 Add support for querying whether the music stream is active remotely
Bug 7485803

Change-Id: I554b44bd35b017fa4030a0d89779066c96594f2b
2013-02-11 10:15:47 -08:00
Jean-Michel Trivi
c203ecfd9f Use device availability to start WFD audio routing
Don't use the force_use mechanism to start WFD audio routing,
 but rather only the availability of the remote submix audio
 device. This is matched by a change in the audio policy
 manager.

Bug 7318180

Change-Id: I756f032d8ca0375c3dbeddb7c321261c497539bc
2012-10-11 18:30:11 -07:00
Jean-Michel Trivi
d677054ca6 Don't play notifications during speech recognition
Add support for querying AudioManager to know whether speech
 recognition is currently underway.

Don't play a notification if speech recognition is underway.

Bug 7314859

Change-Id: I1bd013a3168cfe1a6b6dcfd28565e1c3c512eb6a
2012-10-10 12:03:41 -07:00
Eric Laurent
dd45d01128 enforce camera sound according to country code
Use mcc config overlay mechanism to enforce camera shutter sounds
in countries where it is mandatory.
Property ro.camera.sound.forced is not needed anymore.
When camera sound is forced, STREAM_SYSTEM_ENFORCED is removed from
streams affected by ringer mode and its volume is
maxed out. AudioSystem.FORCE_SYSTEM_ENFORCED is sent to audio
policy manager to alter the routing policy for STREAM_SYSTEM_ENFORCED.

Also fix streams being unmuted when settings are reloaded
upon user switch while in silent mode.

Add ringer mode to audio service dump.

Bug 7032634.

Change-Id: Iceea5bba3b8d3aabf8e42b222deb33a893dc8f38
2012-10-08 17:00:02 -07:00
Glenn Kasten
c6c4365ddb Implement android.media.AudioManager.getProperty()
Bug: 6635041
Change-Id: I0e7d53b99559cdc89f2f107f23048e4b1a8dd383
2012-09-25 17:01:40 -07:00
Jean-Michel Trivi
2ac2afeac9 Add support for controlling remote submix audio routing
Add method in AudioManager to control remote submix through
  AudioService.
AudioService controls remote submxi: enabling/disabling
 remote submix will:
 - make the sink audio device available/unavailable
 - make the audio source available/unavailable
 - force/unforce media streams to be routed to WFD

Change-Id: I05d9cc7c3e8a720318ec1385737cbd46a21a3207
2012-09-10 12:29:09 -07:00
Eric Laurent
53082eced9 AudioSystem: new audio device enums
Update audio device enums to match new definitions in
native framework.

Change-Id: Ie257ab0423e3567f4af5a02b03e128af6c714da6
2012-09-07 10:41:03 -07:00
Eric Laurent
7847211fb4 AudioManager: restore setBluetoothA2dpOn() method
Remove deprecation on setBluetoothA2dpOn() method so that applications
can override the default audio policy which is to use A2DP
for media whenever connected.

The request is not persistent and the default policy is restored when a
new A2DP i ro wired headset connection occurs.

Bug 6485897.

Change-Id: I2a4b6b6bdba55f7b133e64f86d27c03eb86acfa4
2012-05-22 16:06:21 -07:00
Eric Laurent
bffc3d1bd3 Silent and Vibrate mode clean up
Clean up related to new Vibration policy.
The vibrate behavior is now only derived from:
 - presence of a vibrator on the device
 - current ringer mode selected: NORMAL, VIBRATE or SILENT
If no vibrator is present the ringer mode can only be NORMAL or SILENT.

The control of ringer mode via volume keys when volume keys control the "master"
stream type (RING on phones, MUSIC on tablets) is as follows:
If a vibrator is present:
 VOL- and volume equals 1: NORMAL => VIBRATE
 VOL- and volume equals 0 and not continuous press: VIBRATE => SILENT
 VOL+ and in SILENT mode: SILENT => VIBRATE
 VOL+ and in VIBRATE mode: VIBRATE => NORMAL, volume = 1
If no vibrator is present:
 VOL- and volume equals 0 and not continuous press: NORMAL => SILENT
 VOL+ and in SILENT mode: SILENT => NORMAL, volume = 0

VIBRATE_ON and VIBRATE_IN_SILENT settings are not stored/retreived any more.

AudioService checks and corrects ringer mode and stream volumes if necessary when reading from
DB at boot time.

Also:
 Added dump for stream volumes in AudioService.
 Added device names missing in AudioSystem for USB accessory and USB device.

Issue: 6036529
Issue: 6414950
Issue: 6448163

Change-Id: I77fb821ec63e4e566320cac2701b4ac466e86aef
2012-05-08 15:10:37 -07:00
Eric Laurent
59f482764e Added support for USB audio devices
Two types of USB audio devices are defined:
- USB audio device: the audio device in USB device mode while
the Android device is in USB host mode.
- USB audio accessory: the audio device in USB host mode while
the Android device is in USB device mode.

Renamed intents for analog and digital docks to avoid confusion:
 - ACTION_USB_ANLG_HEADSET_PLUG to ACTION_ANALOG_AUDIO_DOCK_PLUG
 - ACTION_USB_DGTL_HEADSET_PLUG to ACTION_DIGITAL_AUDIO_DOCK_PLUG

Factorized code in AudioService broadcast receiver.

Change-Id: I1b6d0257a9d68ecb9495c78c98bac8c67fec7891
2012-04-06 18:24:48 -07:00
Eric Laurent
505e5c8859 implemented synchronous audio capture
Added the infrastructure to support the synchronization of playback and
capture actions on specific events.
The first requirement for this feature is to synchronize the audio capture
start with the full rendering of a given audio content.
The applications can further be extended to other use cases
(synchronized playback start...) by adding new synchronization events and
new synchronous control methods on player or recorders.

Also added a method to query the audio session from a ToneGenerator.

Change-Id: I4e47f5108c7cbbd3bd334a7fad9b3b6c5ba55d88
2012-03-29 19:48:40 -07:00
Eric Laurent
9ac8d0c445 AudioService: fix system stream muted by restore
Releases prior ICS (included) would persist the stream volumes in the
database when muted by silent mode. If the DB was backed up while in
silent mode, stream volume was backed up at 0.
When restored on a new device, the volume was restored at 0 which was
a problem for SYSTEM stream because it would never be corrected as
this stream volume is fixed.

Added a check on valid volume values when reading settings from the DB
and correct the DB if this happens.

Change-Id: Ie3b98eb74e10413c22aab7568b83ac3ace5bfc07
2012-03-07 16:00:57 -08:00
Mike Lockwood
cbdb49dc5e Simple master volume support
Still needs integration with Settings (for persistence) and VolumePanel UI.

Change-Id: I9eca92c4b1ef2df2564411006a35753ab9618dce
Signed-off-by: Mike Lockwood <lockwood@android.com>
2012-02-10 09:01:28 -08:00
Glenn Kasten
ee7fea9f2f Remove dead setRingerMode(mode, mask)
Change-Id: Ia4cc8be8424a40b3dcb7ebd0264fdff4e5247f7f
2012-01-18 15:10:31 -08:00
Eric Laurent
9bc8358dda audio framework: manage stream volume per device
Improve volume management by keeping track of volume for each type
of device independently.
Volume for each stream (MUSIC, RINGTONE, VOICE_CALL...) is now maintained
per device.

The main changes are:
- AudioService now keeps tracks of stream volumes per device:
 volume indexes are kept in a HashMap < device , index>.
 active device is queried from policy manager when a volume change request
 is received
 initalization, mute and unmute happen on all device simultaneously
- Settings: suffixes is added to volume keys to store each device
volume independently.
- AudioSystem/AudioPolicyService/AudioPolicyInterface: added a device argument
to setStreamVolumeIndex() and getStreamVolumeIndex() to address each
device independently.
- AudioPolicyManagerBase: keep track of stream volumes for each device
and apply volume according to current device selection.

Change-Id: I61ef1c45caadca04d16363bca4140e0f81901b3f
2012-01-17 15:15:04 -08:00
Glenn Kasten
5c17a820f9 Audio Java doc comment typos and minor changes
Change-Id: Id6ea6dccb8054c9f05db9a9c045387ce813659e6
2012-01-09 12:15:18 -08:00
Glenn Kasten
ed0079dddd Miscellaneous code cleanup in audio framework
Changes:
 - Move declaration of kClassPathName to top of file so it can be used
   in more than one place, instead of "android/media/AudioSystem".
 - Make private methods static.
 - Add comment to stream_type, audio_mode, force_use types that they must match
   values in AudioSystem.java.
 - Add comment about unused types mp3_sub_format and vorbis_sub_format.
 - Fix typos.
 - Use @ in javadoc comments.
 - Delete dead APIs setMode, getMode, setRouting, getRouting in AudioSystem.java
   (they are all hidden, deprecated, and unused by rest of framework)
 - Delete unused private log method.
 - Fix pathname for android_media_AudioSystem.cpp.
 - Improve code formatting for space after == and !=.
 - Add logging of delta for changing audio policy manager ref count.

Change-Id: I18037c7beb8ab76d1fda08c11e589f6e591d36e1
2011-04-06 10:24:18 -07:00
Glenn Kasten
8132a8caf3 Merge "Bug 3352047 Wrong message when adjusting volume" 2011-02-10 15:27:59 -08:00