History log of /frameworks/av/services/audioflinger/AudioFlinger.cpp
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
7459b90d769a85a4727a2fc02aa96695454ba652 20-Apr-2017 Eric Laurent <elaurent@google.com> audioflinger: fix mmap stream volume

Fix bad casting from MmapPlaybackThread to VolumeInterface causing
volume commands to be lost by audio flinger for MMAP threads.

Bug: 37518243
Test: Verify volume is received by the audio HAL on MMAP streams
Verify no regression for other stream types.

Change-Id: I584ae868245358b2edefecc46a5249092f8be229
d9534fb35245b8bcd2489e717bdd1ad9269b3000 12-Apr-2017 Phil Burk <philburk@google.com> Merge "AAudioService: integrated with audioserver" into oc-dev
c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fb 09-Feb-2017 Phil Burk <philburk@google.com> AAudioService: integrated with audioserver

Call the MmapStreamInterface from AudioFlinger instead of the FakeHAL.
Fix sending timestamps from the thread.
Add shared mode in service.

Bug: 35260844
Bug: 33398120
Test: CTS test_aaudio.cpp
Change-Id: I44c7e4ecae4ce205611b6b73a72e0ae8a5b243e5
Signed-off-by: Phil Burk <philburk@google.com>
(cherry picked from commit 7f6b40d78b1976c78d1300e8a51fda36eeb50c5d)
ddb332138cc8f3b4efad9b14b038f0a462b1b661 12-Apr-2017 Glenn Kasten <gkasten@google.com> Merge "Improve audio logs and dumpsys media.audio_flinger" into oc-dev
3ac24a14e36085bb26b65652e11747deda0f1e18 10-Apr-2017 Glenn Kasten <gkasten@google.com> Fix log spam for media.log

Bug: 36481537
Test: logcat does not show "Waiting for service media.log"
Change-Id: Ia69b679d3b1f1dd292237c63855ff650566df133
(cherry picked from commit 04b96fc3a6cfa8312c51bbba4e5729c9dd869f78)
6d8018f0b7be9deec6b0acab10a0dca6e91d0fb8 21-Feb-2017 Glenn Kasten <gkasten@google.com> Improve audio logs and dumpsys media.audio_flinger

Include mFrameCount in shared memory corrupt error log.

Fix typo in log for primary audio interface.

Include the new server frame count in logs for fast tracks.

Always log when fast is successful for output tracks, as it helpful
(was already there for input).

Cleanup dumpsys for threads.

Bug: 37153050
Test: builds OK, and logs contain more information
Change-Id: I2b5b4d700e8eb7c261a3125fb03ddc00bf08537e
(cherry picked from commit 1bfe09a0b1755a79abd32b41c0dd433b88fc260c)
886deb506ea2938cfec40fc0dd2bff072850386b 13-Mar-2017 Glenn Kasten <gkasten@google.com> Merge "Re-format to decrease the maximum line length of files to 100 characters"
d3bb645f0b7f567b033b8664499d685f8ec10628 06-Dec-2016 Glenn Kasten <gkasten@google.com> Re-format to decrease the maximum line length of files to 100 characters

Test: compiles OK
Change-Id: Ibe663032cd390ed2bcca6dc921d47732e6e15e21
dcdfaecc1fa630a799e1fdb508a9b92da55abc36 14-Feb-2017 Nicolas Roulet <nicoroulet@google.com> NBLog periodic merging thread

Bug: 35468674
Test: no change in functionality, everything works as before
Change-Id: Id2cea243bc15767ca6803c9505bf23a18411500e
7863c791dba8c4e5e9591b6837d410e580be0a25 10-Feb-2017 Eric Laurent <elaurent@google.com> Merge changes from topic 'mmap_no_irq'

* changes:
Add support for mmap stream
audioflinger: define MMAP HAL Stream control interface
8eacd8090e16c022dcbb11850cff83f984fe2357 03-Feb-2017 Nicolas Roulet <nicoroulet@google.com> Merge "Implemented typed, thread-specific logging system. Currently supported types are: * Strings * Integers * Floats * Timestamps * Process IDs"
fe1e1449cadff4f946c33403aecc73b4b4a11e56 30-Jan-2017 Nicolas Roulet <nicoroulet@google.com> Implemented typed, thread-specific logging system. Currently supported types are:
* Strings
* Integers
* Floats
* Timestamps
* Process IDs

Added printf-like formatted logging using mentioned types.

Test: included in this CL
Bug: 29421410
Change-Id: Ie07b78d8d39c32fcc8a122ffa9b1b7082800b990
32ba98626834cb77e5d14b3e419385f0e32ec0bc 01-Feb-2017 Yunlian Jiang <yunlian@google.com> Fix warning: Dereference of null pointer.

Bug: None
Test: The warning is gone.
Change-Id: I4c08397c0ee18c7714eb9b1029844d427259907b
6acd1d432f526ae9a055ddaece28bf93b474a776 04-Jan-2017 Eric Laurent <elaurent@google.com> Add support for mmap stream

Add support for MMAP streams created by Oboe service.
- A new audio thread class MmapThread deriving from ThreadBase
is added to manage permissions, volume, routing and wakelocks for activity
on MMAP streams.
- Requests received over MmapStreamInterface to open, start and stop
a MMAP stream are forwarded to audio policy manager so that activity
on MMAP capture and playback streams is visible to audio policy and
taken into account in volume and routing management.

Bug: Bug: 33398120
Test: manual test
Change-Id: I957906495fe9277d2972d810b633f50cd1e14ec3
fc23520d9c3f15e28baa81de5f7dfa6c1b0af426 21-Dec-2016 Eric Laurent <elaurent@google.com> audioflinger: define MMAP HAL Stream control interface

Added definition of MmapStreamInterface used by Oboe service
to open, configure and control MMAP streams at the audio HAl.

This interface is implemented by audioflinger and abstracts the details
of interacting with audio policy manager and audio HAL from Oboe service.

A callback interface MmapStreamCallback is also defiend to communicate
volume and routing changes back to Oboe service.

Bug: 33398120
Test: build
Change-Id: If953d44903aaa4eb17ff16f1922ca16e5e0e0a87
068561c8e84569d51df2adbbb53b56fdfd09c06b 04-Jan-2017 Andy Hung <hunga@google.com> AudioFlinger: Split off audio processing library

Test: native AudioResampler test, general playback test
Bug: 31015569
Change-Id: Ifb248f4402a583438d756c014dcd7a4577aef713
535e161e2e404dffb8389dd331be0132704b6d82 05-Dec-2016 Glenn Kasten <gkasten@google.com> media.log: re-implement NBLog using audio_utils_fifo

NBLog previously has its own shared memory circular buffer code.
Now NBLog operates on top of the circular buffer code in audio_utils.

Test: media.log still works
Change-Id: Ib3026d2a96e6c0b433603e8baf19164ad97a1e1f
6a308b02f138e358fb239ee2df5d54dd988f34fd 16-Dec-2016 Eric Laurent <elaurent@google.com> Merge "Add unique audio port IDs to AudioTrack and AudioRecord"
20b9ef0b55c9150ae11057ab997ae61be2d496ef 05-Dec-2016 Eric Laurent <elaurent@google.com> Add unique audio port IDs to AudioTrack and AudioRecord

This will allow to track activity at the track level instead of
at audio session level as only possible with current implementation.

AudioTracks and AudioRecords will receive a unique audio port ID the
first time they register to audio policy with
getOutputForAttr()/getInputForAttr() and keep this ID for their

This CL is the first partial change and just updates the
audio policy and audio flinger APIs used at track creation time.

Test: basic regression test of audio playback and capture use cases

Change-Id: I8d612e67738e120494f61e3f7c60bfd0b2c6a329
b643627a557e44b9ab5879cf71e162af2d514ce3 08-Dec-2016 Eric Laurent <elaurent@google.com> fix client pid for effects applied by audio policy

Test: Hangouts call, Play Music with and w/o effects

Change-Id: Ia9b20f94be667dd92e0497f8ef9c0dc0e95afe28
eac5ddad235d11c64ff34037789466f22be4e005 02-Dec-2016 TreeHugger Robot <treehugger-gerrit@google.com> Merge "improve audio effect framwework thread safety"
0d5a2ed0a05a2bf337c68edb54f24c60e18032c1 02-Dec-2016 Eric Laurent <elaurent@google.com> improve audio effect framwework thread safety

- Reorganize handle effect creation code to make sure the effect engine
is created with both thread and effect chain mutex held.
- Reorganize handle disconnect code to make sure the effect engine
is released with both thread and effect chain mutex held.
- Protect IEffect interface methods in EffectHande with a Mutex.
- Only pin effect if the session was acquired first.
- Do not use strong pointer to EffectModule in EffectHandles:
only the EffectChain has a single strong reference to the EffectModule.

Test: Tested with EffectTest app. Regression tests in main audio use cases.

Bug: 32707507
Change-Id: Ia1098cba2cd32cc2d1c9dfdff4adc2388dfed80e
f558e0218d2677a813c9c600886f673894eec927 15-Nov-2016 Mikhail Naganov <mnaganov@google.com> libaudiohal: Implement simple HIDL client

This client requires both HIDL client and server to be of the same
ABI version (e.g. 32-bit).

EffectHalHidl::process and EffectHalHidl::processReverse are stubs.

Some extra warnings are logged due to unimplemented functions
in the legacy HAL.

Bug: 30222631
Change-Id: Id074131dec6d6c4f1031695abcf3ea066e92a5af
Test: Play Music (play / EQ), YouTube, Loopback RTLT, Ok Google on N5X
913d06c099bd689375483a839e11057ccf284d1c 01-Nov-2016 Mikhail Naganov <mnaganov@google.com> Move TypeConverter into a shared library

This will be needed for the default implementation of the audio HAL
in TREBLE for parsing supported formats etc. provided by HAL in
a form of string literals.

As a bonus, remove some hand-written type conversions in AudioFlinger
used in dumps.

Example changes in the dump output:

HAL format: 0x1 (pcm16) ==> HAL format: 0x1 (AUDIO_FORMAT_PCM_16_BIT)
Processing format: 0x5 (pcmfloat) ==> Processing format: 0x5 (AUDIO_FORMAT_PCM_FLOAT)
Output device: 0x2 (SPEAKER) ==> Output device: 0x2 (AUDIO_DEVICE_OUT_SPEAKER)
Input device: 0 (NONE) ==> Input device: 0 (AUDIO_DEVICE_NONE)
AudioStreamOut: 0x... flags 0x6 (PRIMARY|FAST) ==>

Test: make & run
Change-Id: I9cde640e6827b7aa6d62e9caade9e738227e299f
3bd1c87ac0d767566f5da387e90b8a3cd86ecc97 26-Sep-2016 rago <rago@google.com> Buffer Log functionality for AudioFlinger

Similar to ALOGV, this allows to capture to file audio samples from
within audioservice for debuggin purposes.

Test: manual. Mostly used for debugging
Change-Id: I4d43f573926805a27be910e343476c3f1be51579
9ee0540d3a61bff03d561ca431a371c3d9335d2b 14-Oct-2016 Mikhail Naganov <mnaganov@google.com> Remove last references to hardware/audio.h

DeviceHalInterface transitioned to "capabilities" model
(similar to the one already used by streams, e.g. 'supportsDrain').
No direct checking of the HAL version is needed.

AudioPolicy uses its own version read from the configuration,
and these values never checked against the actual HAL version,
thus it does not need versions and macroses from hardware/*.

Test: make & run on N6P
Change-Id: Ic4a56bfa19a9a61edac2b9f9a163fd8f63a0ff87
9fe94012187a29eeeca2c74e75f121192560fba0 14-Oct-2016 Mikhail Naganov <mnaganov@google.com> Split audio effects headers

There can be different use cases with the code that imports
headers from audio_effects (each subsequent case is a more
specialized version of the previous one):

1. The code only needs access to general structures
like effect_descriptor_t:
==> include system/audio_effect.h
Example: AudioSystem in libmedia

2. The code that needs access to effect UUID and parameter
==> include system/audio_effects/effect_foo.h
Examples: media framework effects interfaces, libwilhelm

3. The code that needs to call into HAL:
==> include hardware/audio_effect.h
Examples: libaudiohal (implementation part) and libeffects

4. The code that implements a particular effect:
==> include audio_effects/effect_foo.h
Examples: cts/.../CTSTestEffect.cpp
stuff in hardware/, vendor/

Note that AudioPolicy still deals with the effects HAL directly,
this needs to be fixed.

Change-Id: I963335ede6a196f9225caf21e1a01d03635e363c
Test: make
00260b5e6996b0a4b12f71c5b84e44adea040534 13-Oct-2016 Mikhail Naganov <mnaganov@google.com> Remove dependencies on hardware/audio_effects.h and EffectsFactoryApi.h

Also remove some outstanding dependencies on hardware/audio.h.

Most of the time, only constants and structs from audio_effects.h
are used, and no actual calls into HAL are made. Move these
definitions into system/audio_effect.h, and generate constants
from TREBLE HAL definition.

For parameters, always use values from AudioParameter class.

There are still some outstanding includes of hardware/audio.h
in code that directly deals with audio modules. Need to extend
libaudiohal interfaces to support required functionality.

Test: make

Change-Id: I0bcdf8ae199485d4d65f3eeb7e7a3b9b5cdb6ab6
cbc8f617c1aebef5d041fa40dcd38a5466690b99 12-Oct-2016 Mikhail Naganov <mnaganov@google.com> Eliminate dependencies on hardware/audio.h (trivial cases)

frameworks/av must not depend on hardware/ (except for the code
from libaudiohal that actually calls into HAL).

This CL deals with simple cases where depending on system/audio.h
is enough.

Change-Id: Ia2cb66cc8c92316ce5ab884a008d5e531263c2e4
Test: make
a0c91339814f37ea78365afb436c9f3d1f0a0090 19-Sep-2016 Mikhail Naganov <mnaganov@google.com> Update NBAIO to use the new audio HAL abstraction layer

Moved the HAL access abstraction layer to a separate library so it
can be used both by audioflinger and libnbaio.

Bug: 30222631
Test: manual with Loopback app, Hangouts, YouTube

Change-Id: Id622c2f1aa8f55a775d34f369a596c2c4d29d5be
1dc98674f701dada94143b4d31b7221c58346c6c 19-Aug-2016 Mikhail Naganov <mnaganov@google.com> Abstract away access to audio streams HAL in AudioFlinger

In this CL all direct access to audio_stream_t, audio_stream_out_t, and
audio_stream_in_t their functions is encapsulated within the new
hierarchy of Stream[In|Out]HalLocal classes. AudioFlinger uses
interface classes Stream[In|Out]HalInterface to access these functions.

Note that NBAIO still receives raw HAL stream handles and needs to be
converted separately.

Bug: 30222631
Test: manual with Loopback app

Change-Id: I6388cfa2006791c9c0aa7bb186719209726a2d48
e4f1f63a2c54ee8687ad8cca18df0f6639ad7c81 31-Aug-2016 Mikhail Naganov <mnaganov@google.com> Abstract away access to audio devices HAL

In this CL all direct access to audio_hw_device_t and its functions is
encapsulated within the new class DeviceHalLocal. Loading of hardware
modules is encapsulated withing DevicesFactoryHalLocal. AudioFlinger
uses interface classes DevicesFactoryHalInterface and DeviceHalInterface
to access these functions.

Bug: 30222631
Change-Id: Ic88b20c55813a24b898f4a832e082c17d81935b7
1724ee3caa5f0b4e73979036073f0b71a115083a 13-Sep-2016 Eric Laurent <elaurent@google.com> audioflinger: fix error reporting in setParameters() am: d21bcd272d am: 2e992bd188
am: 92cd1cd127

Change-Id: I7bccd116e024720dbb50e9b8e9e52144b7a1b54e
92cd1cd127082f85cefad6fffe6671a991a52fe9 13-Sep-2016 Eric Laurent <elaurent@google.com> audioflinger: fix error reporting in setParameters() am: d21bcd272d
am: 2e992bd188

Change-Id: I7669ac1ca3a37d0c11e6c15c72c26666cd14e227
d21bcd272d43285baa32ffd48c909b4a29c614a4 09-Sep-2016 Eric Laurent <elaurent@google.com> audioflinger: fix error reporting in setParameters()

Return NO_ERROR if at least one audio HAL module returns NO_ERROR
as not all HALs are requested to support all parameters.

Bug: 31258387
Change-Id: Ia509c272f150afe7f56c699553f2e8782d69fd9b
598857bdcfc99e8afc597ea815a9b93aa81fe0c4 31-Aug-2016 Andy Hung <hunga@google.com> AudioFlinger: Disable (revert) LockWatch am: deb0335714 am: d8d2728947 am: 5d819b4794
am: 9b7a8f9461

Change-Id: I1840bd725020242337af910ea3f51cd094e3c937
9b7a8f94619b6847db7dc37deb5918b6f3439a43 31-Aug-2016 Andy Hung <hunga@google.com> AudioFlinger: Disable (revert) LockWatch am: deb0335714 am: d8d2728947
am: 5d819b4794

Change-Id: I4754604909ec4658aa3d12e70dbb735e34955901
deb0335714cabc906098fb1d971d992027267fc6 29-Aug-2016 Andy Hung <hunga@google.com> AudioFlinger: Disable (revert) LockWatch

Revert "audioflinger: add watchdog on main mutex"
This reverts commit 17a58b2560c38a8e31a38186f9ab6eb98a38e229.

Revert "LockWatch: Update to Mutex::timeLock specs"
This reverts commit 51a6319111df875710dab25a1a99b10d002c4869.

Bug: 30936184
Change-Id: I0f6df6c98c06e161038b1bf0aae5912619cb4066
4a3d5c23f79189eb7ab9f31c440c7da5b15947a2 15-Aug-2016 Mikhail Naganov <mnaganov@google.com> Abstract away access to audio effects HAL and factory

In this CL all direct calls to functions from EffectsFactoryApi.h
and hardware/audio_effect.h are encapsulated within two new
classes: EffectsFactoryHalLocal and EffectHalLocal. AudioFlinger
uses interface classes EffectsFactoryHalInterface and
EffectHalInterface to access these functions.

Bug: 30222631
Change-Id: Id64b9c5529319077f6f968921489a13f60daa977
82f5b811b2767289ebb8a9e6af1919c3b72b5121 17-Aug-2016 Eric Laurent <elaurent@google.com> DO NOT MERGE ANYWHERE (nyc-dr1-dev) audioflinger: add watchdog on main mutex

Check every 10 seconds if main audioflinger mutex can be acquired and
trigger audioserver process restart if not.
This will allow to capture tombstones of locked up situations and avoid
the disruption of a system_server restart.

Bug: 30737845
Bug: 30388410
Change-Id: I8a78b8cf813982f70ea598a6d42affc0ecaa76c9
(cherry picked from commit 17a58b2560c38a8e31a38186f9ab6eb98a38e229)
85d5dffa0a8f523bd577296c3759479f7db2ddec 18-Aug-2016 Eric Laurent <elaurent@google.com> audioflinger: add watchdog on main mutex am: 17a58b2560
am: ed31582734

Change-Id: I9d5d0573220ba5811d06f2aa2217919a68d8529b
17a58b2560c38a8e31a38186f9ab6eb98a38e229 17-Aug-2016 Eric Laurent <elaurent@google.com> audioflinger: add watchdog on main mutex

Check every 10 seconds if main audioflinger mutex can be acquired and
trigger audioserver process restart if not.
This will allow to capture tombstones of locked up situations and avoid
the disruption of a system_server restart.

Bug: 30737845
Bug: 30388410
Change-Id: I8a78b8cf813982f70ea598a6d42affc0ecaa76c9
5ca8f32280377dd923e72c3c6bd3994217461b8b 11-Aug-2016 Chih-Hung Hsieh <chh@google.com> resolve merge conflicts of fd923e7 to stage-aosp-master am: df5d9246f9
am: 63ef5a38f8

Change-Id: I516a43c5e56323e99ad7a8ca2e4811b77c9704f4
df5d9246f9607b1c2f8b134c46a05af06e206da3 11-Aug-2016 Chih-Hung Hsieh <chh@google.com> resolve merge conflicts of fd923e7 to stage-aosp-master

Change-Id: I75b44b89bae41197a1fd68362d20b8ba2b4dd192
36d0ca16024820df9a12903d2ac443fabcc180bc 09-Aug-2016 Chih-Hung Hsieh <chh@google.com> Fix clang-tidy warnings in audio and playerservice.

* Add explicit keyword to conversion constructors.
Bug: 28341362
* Use const reference type for read-only parameters.
Bug: 30407689
Test: build with WITH_TIDY=1

Change-Id: I265f3b094e08d5705b506b3fbba51439c134af84
Merged-In: I265f3b094e08d5705b506b3fbba51439c134af84
b78d2df84cfc926142ad95ba35e8ec6ab2f74eb3 19-Jul-2016 Glenn Kasten <gkasten@google.com> Merge \"Fix build error in tee sink\" into nyc-mr1-dev
am: 542cb3f429

Change-Id: Ib37734943602043786c9674e9ff5bf802864aa39
fbd87e8b685d1b1511bc40e232f9e7674271d57b 19-Jul-2016 Glenn Kasten <gkasten@google.com> Fix build error in tee sink

Bug: 30203029
Change-Id: I4b595c81f570fd12f7a1c7deb6db7e3139276481
f517d276a8bfe4034106abf8009fcd6cc28a0838 09-Jul-2016 Eric Laurent <elaurent@google.com> Merge \"Add Dolby TrueHD audio format\" into nyc-mr1-dev
am: 5cc2e814ac

Change-Id: Ib3561d806b00c949789f463c4609844399bb7095
e30f20963751c07860bfbc92b5ff8948fc55797f 08-Jul-2016 Eric Laurent <elaurent@google.com> Add Dolby TrueHD audio format

Also add missing formats in AudioFlinger string conversion

Bug: 30024357
Change-Id: I75bdb54daeb786543f545ec3a772121055e01cdb
6a013ba332a00b684d48e77db2fce5802170e580 21-Jun-2016 Glenn Kasten <gkasten@google.com> Merge \"getPrimary APIs now examine all non-duplicating output threads\" into nyc-mr1-dev
am: 3f69461e78

Change-Id: I76898dd3427d8e8b3a9d64bd01b60f137c7cb91f
3f69461e78fb74211847c3bab161bcad7ae81398 21-Jun-2016 Glenn Kasten <gkasten@google.com> Merge "getPrimary APIs now examine all non-duplicating output threads" into nyc-mr1-dev
ad67b138fcec25ba99254e826c559778adf0e7f3 21-Jun-2016 Eric Laurent <elaurent@google.com> audioflinger: add check for effect vs thread compatibility
am: 4c415062ad

Change-Id: Idbdb7591b291c09ced94d4eabae0edc3581e1bcd
4c415062ad1bb53e9af8f644d8215837262b79bb 18-Jun-2016 Eric Laurent <elaurent@google.com> audioflinger: add check for effect vs thread compatibility

Make sure that only HW accelerated effects are added on FAST
playback or record threads and no effect is added on threads with
RAW flag.

Make sure that tracks with RAW and FAST flags are compatible with exiting
effects on a playback or record threads and clear flags accordingly.

Bug: 4999001

Change-Id: I0c060f1ee4dfb9f1e206633536e67f7c3b7b3788
a73356393315ad3ad7cd9196640823d1a9a620dd 10-Jun-2016 Glenn Kasten <gkasten@google.com> getPrimary APIs now examine all non-duplicating output threads

and return the value corresponding to the thread with minimum frame count,
with a preference for a thread with fast mixer if there are multiple
output threads with the same minimum frame count.
This is in keeping with the expectation by apps that the getPrimary APIs
will return a value for the lowest available latency path.

Bug: 29164107
Change-Id: I8ae9bcad2d48185d7717ccf96085834c0ce00e37
b70868bb337f0b12f993494f4d110979a33ddd24 04-Jun-2016 Eric Laurent <elaurent@google.com> Merge "Add AudioTrack and AudioRecord flag checks" into nyc-mr1-dev
am: 2f8e63b5be

* commit '2f8e63b5be5b0160302cffe1f1f18e560d31d3e7':
Add AudioTrack and AudioRecord flag checks

Change-Id: If9043721f4763ce0f4db96c63595f92c5ba22556
050677873c10d4da308ac222f8533c96cca3207e 02-Jun-2016 Eric Laurent <elaurent@google.com> Add AudioTrack and AudioRecord flag checks

Verify that the requested flags are compatible with the input
or output flags when creating and AudioRecord or AudioTrack

Get rid of IAudioFlinger::track_flags_t which was redundant
with audio_input_flags_t and audio_output_flags_t.

Change-Id: I0dd9232f857b2737e99a8c668806e45bce09cdbd
e34a44ff6cb12e65736c09e1baab1823de190e03 24-May-2016 Andy Hung <hunga@google.com> Merge "Add memory heap checks for mediaserver and audioserver" into nyc-dev am: f3d9908a88
am: ce2b51c91f

* commit 'ce2b51c91f431be6a62b2fed746650d18499cb83':
Add memory heap checks for mediaserver and audioserver

Change-Id: If5a9216ef18a9af22154d1510f835e0b3fafa651
5cb96b83e6bff91a5ab006ff542dc32031be9087 24-May-2016 Andy Hung <hunga@google.com> Merge "Add memory heap checks for mediaserver and audioserver" into nyc-dev
am: f3d9908a88

* commit 'f3d9908a888203e7e70b8c2d43ee741a95e154ed':
Add memory heap checks for mediaserver and audioserver

Change-Id: I8b5dda2e29da8651cbd9dbc77fa9ca6211b1a47d
f3d9908a888203e7e70b8c2d43ee741a95e154ed 24-May-2016 Andy Hung <hunga@google.com> Merge "Add memory heap checks for mediaserver and audioserver" into nyc-dev
8b269a1708b95d5f31ea59afb36bb42c26f91961 24-May-2016 Haynes Mathew George <hgeorge@codeaurora.org> Merge "audioflinger: Pass pid of process creating track or opening record" into nyc-dev
am: a0e10ff02b

* commit 'a0e10ff02b156738c0e5441104821b220eea3d68':
audioflinger: Pass pid of process creating track or opening record

Change-Id: I728ffba8938a82f8b8f7b773febafd5e466c8e4d
9ea77cdba8c422940adb57a790b44ac04fe0353f 07-Apr-2016 Haynes Mathew George <hgeorge@codeaurora.org> audioflinger: Pass pid of process creating track or opening record

AudioFlinger allocates a Client heap for each unique pid.
If two applications use mediaplayer APIs, the same Client heap
is reused as the pid used is not the application pid but that
of mediaserver. With this change, the pid of the application
pid is used to decide the heap to be used.

Bug: 23525542
Bug: 28772898
Change-Id: I31a695b0b321eff6e2aca80c3bc4aeb3e1cd9ac7
07b745e166ee62030960ccea37e117caadf71c32 24-May-2016 Andy Hung <hunga@google.com> Add memory heap checks for mediaserver and audioserver

Memory heap check updated and restored to mediaserver,
added as new option to audioserver.

Requires properties to be set (example for audioserver):

$ adb shell setprop libc.debug.malloc.program audioserver
$ adb shell setprop libc.debug.malloc.options backtrace=8
$ adb shell pkill audioserver


and to dump:

$ adb shell dumpsys media.audio_flinger -m

Bug: 28909124
Bug: 27500825
Change-Id: Ifa8c2c02b022daf1a799ee4a1d75282a3c921763
b9987ad06d8298cde7b28bb214ac10777bcf8102 12-May-2016 Eric Laurent <elaurent@google.com> Merge "audioflinger: various offload playback fixes" into nyc-dev
am: 8b43838c48

* commit '8b43838c4872af3e9f47846e2618461af2d8d346':
audioflinger: various offload playback fixes

Change-Id: I1954e445630309c039ade92e545479245de095be
e93cc03da360a1a0d2ad937c745ce8c8e8be81c2 05-May-2016 Eric Laurent <elaurent@google.com> audioflinger: various offload playback fixes

Revert underrun sleep time optimization added for
offload by commit 51716185 which can cause music to pause for a few
seconds in some corner cases.

Allow underruns in STOPPING_1 state to avoid dropping last buffer
received by the AudioTrack callback after stop() is called by the

Allow interruption of thread loop sleep if a command is pending to
speed up track start sequence.

Do not wait for a full AudioTrack buffer before writing to audio HAL
when resuming playback or transitioning to next track.

Also moved log level for underruns in AudioSink from I to D to reduce
spam on user builds.

Bug: 28545177
Bug: 27682362
Bug: 28347796

Change-Id: I05b651b7878a2d2eedcac43cd669e32add171d40
eb7fc0bd619064d334d1a87a4c9cd07c862499b5 06-May-2016 vivek mehta <mvivek@codeaurora.org> Merge "audioflinger: extend max i/p channel to 8 channels" into nyc-dev
am: a605dafc27

* commit 'a605dafc27f69b37eca60579b34e97145f3caca3':
audioflinger: extend max i/p channel to 8 channels

Change-Id: Iefd24213da12d8635d2672454c2cd40fb6ba96a4
753466603a88f1ea3d966d17ab79256519553759 05-May-2016 vivek mehta <mvivek@codeaurora.org> audioflinger: extend max i/p channel to 8 channels

- on open_input stream max channel check is for 2 (FCC_2),
extend this to 8 (FCC_8)

Bug: 27348418

Change-Id: I0d7e5a101dee0a2effabc3637a1fb73e7ea78ffd
5fb71f62474c92206dd068b725dab0572c9ede95 20-Apr-2016 Glenn Kasten <gkasten@google.com> Merge "Add AudioSystem::getFrameCountHAL()" into nyc-dev
am: eb7f394004

* commit 'eb7f3940044effc6a8b313a73134b5cc2156068c':
Add AudioSystem::getFrameCountHAL()

Change-Id: Ib82d6e8fb760a90e47a374cd1d10f5a956ea1a9c
4a8308b11b92e608cdaf29f73f7919e75706f9a2 18-Apr-2016 Glenn Kasten <gkasten@google.com> Add AudioSystem::getFrameCountHAL()

And add comments about declaring methods in binder opcode order.

Bug: 28117362
Change-Id: I3c4426fa4bb3ce9c4a207a44d3bb1103d7fef160
eb059113754c54b178d6de6feec13daadd244672 19-Apr-2016 Glenn Kasten <gkasten@google.com> Merge "Reduce rollovers of unique ID generator" into nyc-dev
am: 88bd61e

* commit '88bd61e31184a72e34e5a8c2ae11d034e01845aa':
Reduce rollovers of unique ID generator

Change-Id: I424811996d1dd9f6ee71ceda4fff515c7698334f
d2e67e1ef59921101fd7b047e2acf84e5d16d66e 11-Apr-2016 Glenn Kasten <gkasten@google.com> Reduce rollovers of unique ID generator

Bug: 28119934
Change-Id: I6c57d5555f6c5ddc4d4eee1e6f27fc4aaeb31c83
043470de221152557286d0b7aa0536ea165c268a 14-Apr-2016 Andy Hung <hunga@google.com> Merge "Add memory leak detection to audioserver" into nyc-dev
am: 49e5375

* commit '49e5375bf3c98c825538d30b6bea9f4e84f0c36f':
Add memory leak detection to audioserver

Change-Id: I85d46b708beb575d01e51f610c87fbb35f2601a7
35fec5f61393124c9e13958941637b8fe386385e 13-Apr-2016 Andy Hung <hunga@google.com> Add memory leak detection to audioserver

adb shell dumpsys media.audio_flinger --unreachable

(userdebug and eng builds)

Bug: 28049120
Change-Id: I72ac624bd5b5482aac44b9f3d8429f657f715cb4
8bcb9c56784bc9abf44ded0c4fb55b24739d700f 07-Apr-2016 Glenn Kasten <gkasten@google.com> Merge "Check newAudioUniqueId() parameter \'use\'" into nyc-dev
am: dd3e7a1

* commit 'dd3e7a1be829243c6db6ad82e41e6a3a8dce174b':
Check newAudioUniqueId() parameter 'use'

Change-Id: Ib64400d1198a40f8fcfbe188e6514107ab87b0f1
9d003131329450081c8129b3fddd85cf20d2d9d9 06-Apr-2016 Glenn Kasten <gkasten@google.com> Check newAudioUniqueId() parameter 'use'

Bug: 28025366
Change-Id: Ice81e47cb919aa2aa6c78ccadebe9a1f19668f9c
b9b9fa3d28a0436bb5e267d8fc3626ebd820fe78 30-Mar-2016 Glenn Kasten <gkasten@google.com> Merge "Use audio_module_handle_t and audio_patch_handle_t consistently" into nyc-dev
am: 54b48c3

* commit '54b48c31fba71534ea56e32609f7ea770519fb2e':
Use audio_module_handle_t and audio_patch_handle_t consistently

Change-Id: Icbe23830212ccdbf49ee6e7978642aeb3d2de6c6
a13cde98a880341f0a56d91da6364b093fb5d24e 29-Mar-2016 Glenn Kasten <gkasten@google.com> Use audio_module_handle_t and audio_patch_handle_t consistently

Bug: 27814144
Change-Id: I54b7a73ec318779fd3addb060998f4d94141152d
7b81b7e026053615f93af1efc130205eef547e57 21-Mar-2016 Glenn Kasten <gkasten@google.com> Merge "Fix build warnings" into nyc-dev
am: 311fab5

* commit '311fab5291be07fe33ec65240825b4f4bc118fe7':
Fix build warnings
c42e9b462661673dff480ee71757a58b0f806370 21-Mar-2016 Glenn Kasten <gkasten@google.com> Fix build warnings

Change-Id: Idfdaff3a7a8f60cd8817bd306bfba28020a391c8
da631f5894b2cfb77e47179a0f401c266b5eedb1 19-Mar-2016 Glenn Kasten <gkasten@google.com> Merge "Fix build warnings" into nyc-dev
am: 7be6866

* commit '7be6866af78a86a89113e9b680f1a6416ae1f711':
Fix build warnings
57c4e6f7464d458eb52d209c2a63524913d6406d 18-Mar-2016 Glenn Kasten <gkasten@google.com> Fix build warnings

Change-Id: I33178dbe0bfc087d6599579ca0529ad853c669ed
20f18efb29b8fea661dd4119a764d3f8d4dfe7a2 17-Mar-2016 Glenn Kasten <gkasten@google.com> Merge "Use audio_session_t consistently" into nyc-dev
am: 9a57e34

* commit '9a57e34f476d5d2400e6e8ffac303c6190e641f0':
Use audio_session_t consistently
d848eb48c121c119e8ba7583efc75415fe102570 08-Mar-2016 Glenn Kasten <gkasten@google.com> Use audio_session_t consistently

Bug: 27562099
Change-Id: I328d8226191386b163f2ace41233607294c50dcd
06fd24f5a3a17ee5ac3069c3e009238fcb6aab39 08-Mar-2016 Sumit Bhattacharya <sumitb@nvidia.com> Merge "AudioFlinger: Get shared heap size from property" am: 844fab9b2b
am: c29470f61a

* commit 'c29470f61a5f35f23c8f52851e778b6613ace6f8':
AudioFlinger: Get shared heap size from property
cd64e0ed477fcaadd2ad03c5ef79d43ae98d7e44 10-Feb-2016 Sumit Bhattacharya <sumitb@nvidia.com> AudioFlinger: Get shared heap size from property

For consecutive 24bit, 192kHz, 7.1 content 4MB heap is not enough.
So exposing a propery ro.af.client_heap_size_kbyte to set platform
specific shared client heap size.

Change-Id: I2fb257c5fecc0245aa3a07998c2bfd6864a7d64f
517161856d74f5fe39cce131f29b977bc1745991 01-Mar-2016 Eric Laurent <elaurent@google.com> audio flinger: fix offload track underrun

Fix offload track underrun detection causing early disabling
of offloaded audio tracks.

Optimize sleep time in case of underrun to avoid spinning while
waiting for new data.

Re-enable offload when streaming

Bug: 26668110

Change-Id: I874728c69647ac05e1effb84c48700a6d0ac7435
2c073da0f02c3cf7cd4795af2d861222cbcab72a 26-Feb-2016 Glenn Kasten <gkasten@google.com> AudioSystem::getSamplingRate and getFrameCount now work for input

Also fix whitespace and comment in AudioIoDescriptor.

Bug: 25641253
Bug: 21019153
Change-Id: I6a1e2262f44f87ec3ebce6e5274f45ed0f47eb13
eeecb980ff4c202d0a3c4b0bfe040dce2f73336d 26-Feb-2016 Glenn Kasten <gkasten@google.com> Add use for audio_unique_id_t

Bug: 25641253
Bug: 21019153
Change-Id: I65dc128e760c245f3d90559635a8981b186c87d7
ae0cff1d48b2cd10aeff9627398faf684894eece 24-Feb-2016 Glenn Kasten <gkasten@google.com> Restore media.log service

Bug: 26306954
Change-Id: I00319f4869f46941e4c814a29b2f69a62e572743
9a00399340c7c129714dff96f1ab59045fe43056 24-Feb-2016 Glenn Kasten <gkasten@google.com> Restore audio tee sink

And fix a bug in error logging

Bug: 27323882
Change-Id: Ifc2cf18c651337ae305a38f25b6955f9b9128199
fdb3c07db5d44535eb8c3ec46dc78ad8446c01eb 09-Feb-2016 Phil Burk <philburk@google.com> AudioTrack: support ENCODING_IEC61937

Set DIRECT flag.
Use audio_has_proportional_frames() instead of audio_is_linear_pcm()
where appropriate.

Bug: 24541671
Bug: 20891646
Bug: 26373761
Change-Id: Ia32036b18683b084d6c9887593df87397ea0afd9
Signed-off-by: Phil Burk <philburk@google.com>
cdf924a32579e92ea456e8e7d5c14ed5920b620f 05-Feb-2016 Eric Laurent <elaurent@google.com> audio flinger: add check in getInputBufferSize()

Make sure that the sample rate passed to getInputBufferSize()
is not 0 to avoid divide by 0 in destinationFramesPossible()

Also check the channel mask parameter for validity.

bug: 26866012
Change-Id: Ifabbf56cadb0db104f99230cacdba30e0c6a0a3a
d79072e9dff59f767cce2cda1caab80ce5a0815b 06-Jan-2016 Glenn Kasten <gkasten@google.com> Remove TimedAudioTrack and associated code

Bug: 8278435
Change-Id: I095c1a4888e645e14d93b0b15fbef4524a831ca1
879db19219c120d424f7d7ad7164c3cfe56124e4 06-Jan-2016 Andy Hung <hunga@google.com> Fix compile warning

Change-Id: I7d88292cbb07b9894ec4c7d60e71f547d93b3c89
ce7176868977b0d44b245735bd8d3d8e54e61035 22-Dec-2015 Andy Hung <hunga@google.com> Disable media.log until service is ready

Bug: 26235256
Change-Id: I99dd980d2b6d789347023a19737b7d65b0608267
dcb346b7dc5b88c3e85db8a70bbd6a2fee8192b9 09-Sep-2015 Marco Nelissen <marcone@google.com> Run audio services in audioserver instead of mediaserver

audioflinger, audiopolicy, (fm) radio, soundtrigger moved to audioserver.
medialog is removed from mediaserver.
audioserver has same permissions and rights as mediaserver.

mediaserver is allowed to specify client uid to audioserver.

Subsequent CL will add medialog to audioserver.

TBD: Pare down permissions.

Bug: 24511453
Change-Id: Iccaa08b874a502710d142e72f8abbb3d97c44cfa
3f273d10817ddb2f792ae043de692efcdf1988ae 24-Nov-2015 Wei Jia <wjia@google.com> Uses AudioFlinger to signal battery stats for audio.

Bug: 18177221
Change-Id: I704010c037cb99bb74b98798ee8e494fa8bdc875
aba407f1a6378ac2518d0d76d0d18419b7722a81 21-Aug-2015 Eric Laurent <elaurent@google.com> audioflinger: increase shared memory heap size

Bug: 21093153.
Change-Id: I389af11451b01ce49fdb8957e2f322ba1925a62e
(cherry picked from commit da73b6c7474aaa5616f0214e238776f12717f32b)
da73b6c7474aaa5616f0214e238776f12717f32b 21-Aug-2015 Eric Laurent <elaurent@google.com> audioflinger: increase shared memory heap size

Bug: 21093153.
Change-Id: I389af11451b01ce49fdb8957e2f322ba1925a62e
eb9487e10294a4e73977f460f30eeaff503acd21 22-Jul-2015 Glenn Kasten <gkasten@google.com> Fix capture overruns at non-primary sample rate

and small buffer size. Also:
Pull out the magic number "12 ms" to a named constant.
Remove obsolete AudioFlinger::mPrimaryOutputSampleRate.

Bug: 22662814
Change-Id: I261f75a222c4505a84aad2493d251bd2dea59f68
7c1ec5f038e63a5eb8b04434577c25bc23f5f410 09-Jul-2015 Eric Laurent <elaurent@google.com> audio: several fixes in audio routing callbacks

- audio policy:
Force device change to ensure new audio patch creation
upon first track activity on a given output.
Fix function device_distinguishes_on_address() which could mistake
some output device with remote submix input device.

- audio flinger:
Reduce number of binder calls upon new client registration by only
sending ioConfigChanged() callbacks to newly registered client.
Fix first patch after output thread creation not triggering an
ioConfigChanged() callback.

-audio system:
Force client registration upon routing callback installation to force
new ioConfigChanged() callback from audio flinger.

Bug: 22381136.

Change-Id: Ieb0d9f92f563a40552eb31bc0499c8ac65f78ce4
72e3f39146fce4686bd96f11057c051bea376dfb 20-May-2015 Eric Laurent <elaurent@google.com> audio flinger: do not call JAVA services until system is ready

Wait for system ready indication form AudioService before enabling
calls to scheduling service or power manager.

Bug: 11520969.
Change-Id: I221927394f4a08fd86c9d457e55dd0e07949f0cf
f6870aefc5e31d4220f3778c4e79ff34a61f48ad 08-May-2015 Eric Laurent <elaurent@google.com> audio flinger: fix fuzz test crash

Clear output stream pointer in duplicating thread
when the main output to which it is attached is closed.

Also do not forward master mute and volume commands to
duplicating threads as this is not applicable.

Also fix logic in AudioFlinger::primaryPlaybackThread_l()
that could accidentally return a duplicating thread.
This never happens because the primary thread is always
first in the list.

Bug: 20731946.
Change-Id: Ic8869699836920351b23d09544c50a258d3fb585
9f578d3297782be6de5373e171f3b4af49726709 05-May-2015 Jean-Michel Trivi <jmtrivi@google.com> Merge "AudioRecord keeps track of UID" into mnc-dev
4cb668392ee0433462251afbee109405c6efacc8 02-May-2015 Jean-Michel Trivi <jmtrivi@google.com> AudioRecord keeps track of UID

Bug 20832981

Change-Id: If5f3c61fae02d86b9d6fdf411711f854fd56c77d
cc85abcf4ac398dca240db356b8b4db052b415a4 01-May-2015 Eric Laurent <elaurent@google.com> Merge "AudioSystem: refactor audio config cache and callbacks" into mnc-dev
73e26b661af50be2c0a4ff6c9ac85f7347a8b235 28-Apr-2015 Eric Laurent <elaurent@google.com> AudioSystem: refactor audio config cache and callbacks

Clean up implementation of audio configuration cache and
callback events from AudioFlinger:

- Define class AudioIoDescriptor for audio input and output
configurations outside of AudioSystem class.
- Do not use void * but an AudioIoDescriptor as argument to
audio config callbacks from AudioFlinger.
- Remove unused configuration events.
- Move AudioSystem audio input and output cache from static singletons to
members of AudioFlingerClient subclass.

Change-Id: I67c196c32c09ce2756af0755ee1fe631040c3270
850206ed9ebc6c663a957a656966bce2604dc170 01-May-2015 Eric Laurent <elaurent@google.com> Merge "PatchPanel: do not use setParameters() internally." into mnc-dev
be71aa29a3c86d2e01cd17839d2a72ab09a1bce5 28-Apr-2015 Svet Ganov <svetoslavganov@google.com> Respect the record audio app op - media

Change-Id: I3a97977b6e9a09355e2008f780d22d480fb7308b
054d9d3dea1390294650ac704acb4aa0a0731217 24-Apr-2015 Eric Laurent <elaurent@google.com> PatchPanel: do not use setParameters() internally.

Do not use setParameters() with AUDIO_PARAMETER_STREAM_ROUTING
when communicating the input or output device selected to playback or
record threads, even for HAL version less than 3.0.
Use createAudioPatch()/releaseAudioPatch() instead.
This allows to send more information on the output or input device being

Also fix a regression introduced in L where the output device selection
was not communicated to effects on record threads.

Change-Id: I4780ada53241d56694b005c992171e173c3bf8f5
6770c6faa3467c92eabc5ec9b23d60eb556a0d03 07-Apr-2015 Andy Hung <hunga@google.com> Enable 8 bit and float pcm record formats for AudioFlinger

Update sampling rate handling as well.

Bug: 19570772
Change-Id: I872248e64c0578b2e48869a68fee0d51bd0640c3
062e67a26e0553dd142be622821f493df541f0c6 11-Feb-2015 Phil Burk <philburk@google.com> AudioFlinger: call SPDIF wrapper from AudioFlinger

Create an interface layer between the AudioFlinger and the HAL
that manages the wrapping and format conversion.

Removed unnecessary includes.
Handle rate conversion in getRenderPosition().
Try to open HAL with encoded format before wrapping with SPDIF.

Bug: 17566660
Change-Id: I00ad888ca15ff0f85b85efb8167c7f5ea761a244
Signed-off-by: Phil Burk <philburk@google.com>
2f55e7632dfa0dafde58efd8cb2af6593217fd91 06-Mar-2015 Glenn Kasten <gkasten@google.com> Rename tee sink file name and add prefix to macros

Change-Id: If316b9e32963d9baef8f4382fcc73dc6c4ff684d
e7d6671c1ab1fea7ab1c4a9ebd1cd8f899c87628 05-Mar-2015 Glenn Kasten <gkasten@google.com> Rename formal parameter to match type name

Change-Id: I0761005b751f5c4a4b28729b1820961ff3077afd
63238efb0d674758902918e3cdaac322126484b7 03-Mar-2015 Glenn Kasten <gkasten@google.com> Remove redundant semicolon from namespace closing

Change-Id: I163f9d3d216c283ae1160ce4802e5247cf44fba7
3e91b5d11866599e8f33e63fb3b6c1d81ce1a1d2 19-Feb-2015 Ricardo Garcia <rago@google.com> Fix for getMicMute in AudioFlinger

Previous logic will only check for mic state of Primary Hardware
Device. Current logic checks state of all devices with valid
microphone input.
This is needed for audio_output feature support.

bug: 19439530
Change-Id: Ibbb92412ac70cf2915bbe8660c04fbaf0ab74171
b187de1ada34a9023c05d020a4592686ba761278 30-Dec-2014 Glenn Kasten <gkasten@google.com> Line length 100

Change-Id: I6c8fe626a3825fa9e139319656d682a57b887c97
a268a817fb9df2a266f06b58680fa4168517c8cd 17-Dec-2014 Jean-Michel Trivi <jmtrivi@google.com> am 93118cd9: am 99429b40: am 277c7b8c: Merge "Fix permission check for audio recording" into lmp-mr1-dev

* commit '93118cd96233b682be95a3eb114d88d69c8cc416':
Fix permission check for audio recording
93118cd96233b682be95a3eb114d88d69c8cc416 17-Dec-2014 Jean-Michel Trivi <jmtrivi@google.com> am 99429b40: am 277c7b8c: Merge "Fix permission check for audio recording" into lmp-mr1-dev

* commit '99429b40411790b85e19c57392bbd292a237c470':
Fix permission check for audio recording
97bb33f58d742539f3382583d7978fca71ffa2d5 13-Dec-2014 Jean-Michel Trivi <jmtrivi@google.com> Fix permission check for audio recording

Define input types covering the different usecases for audio
recording, and check the corresponding permissions when
starting to record.
Move the permission check from audio flinger to audio policy,
as only the policy has the information to determine which
permission to enforce.
Fix missing permission when an application records audio
and the audio is injected by an external policy.

Bug 18736417

Change-Id: If7ec040502242c990ac8ea464db484339bdce573
3a3e87005fdfbfe4564605220a044b8023d0f539 26-Nov-2014 Eric Laurent <elaurent@google.com> am 72215491: am 1a475921: am 223fd5c9: audio: new routing strategies and stream types

* commit '72215491c60fbcdb9a2f0be782e24e39cca249c5':
audio: new routing strategies and stream types
72215491c60fbcdb9a2f0be782e24e39cca249c5 26-Nov-2014 Eric Laurent <elaurent@google.com> am 1a475921: am 223fd5c9: audio: new routing strategies and stream types

* commit '1a475921c0577a4650d1bbe40a85b732d1766939':
audio: new routing strategies and stream types
223fd5c9738e9665e495904d37d4632414b68c1e 11-Nov-2014 Eric Laurent <elaurent@google.com> audio: new routing strategies and stream types

Added new routing strategies and stream type for internal use
by audio policy manager and audio flinger:
- One for accessibility to allow different routing than media
- One for re-routing (remote submix) in preparation of dynamic
- Added stream type for "internal" audio flinger tracks used
for audio patches and duplication.

Bug: 18067208.
Change-Id: I88f884b552e51e4a49c29125e5a1204cf58ff434
77e79a509d19ab50b1867fe3903b5a8fae450591 17-Nov-2014 Marco Nelissen <marcone@google.com> resolved conflicts for merge of e78a27ca to lmp-mr1-dev-plus-aosp

Change-Id: If10a9cc17245f95d5e10b1507445abbb4020670e
f888020c6e2735624f2b2a30e72aca24e17b8b4d 14-Nov-2014 Marco Nelissen <marcone@google.com> Update calls to IInterface::asBinder()

to use the new static version.

Change-Id: Ia7b10eb38ca55b72278bfd33d3bf647f338b4e6a

06b46062d2f8bc82ca3061a23d197734ae51918b 14-Nov-2014 Marco Nelissen <marcone@google.com> Update calls to IInterface::asBinder()

to use the new static version.

Change-Id: I89a5988a0ac694ffc04d88cf939e8455bf925d4c
298c4dc7e90cae4873d89098b777d1068a4e35ea 04-Nov-2014 Eric Laurent <elaurent@google.com> am d202ac37: am b7092547: Merge "remove some restrictions on effect output channels" into lmp-mr1-dev automerge: ed1e55c

* commit 'd202ac37fc1f5f31e180af55cebd22810a80251b':
remove some restrictions on effect output channels
b10352f4bc11ae6f3d93e464074709555ecf9e06 04-Nov-2014 Eric Laurent <elaurent@google.com> remove some restrictions on effect output channels

Do not prevent from attaching effects to a non stereo
output thread, unless the output thread is a mixer thread.

Bug: 18157592.
Change-Id: I6ac3187187a1b8aade7db04ea6dfbc47dacc25c3
2384b55ab31c49fb5babce058237c27ed28ed53e 30-Oct-2014 Jean-Michel Trivi <jmtrivi@google.com> am 1f4b82a2: am b14e6dc8: Merge "Always use an address for remote submix" into lmp-mr1-dev automerge: 6e8212b

* commit '1f4b82a20d75b5aa8d7801d342ac3a9b48fa0863':
Always use an address for remote submix
fd4c14883b268a0bc5514da135fe6b7d1ce2071b 07-Aug-2014 Jean-Michel Trivi <jmtrivi@google.com> Always use an address for remote submix

Usage of remote submix device for audio rerouting (e.g. wifi display)
didn't mandate the use of addresses. Use "0" as the default address
when none is specificed.
In logs, only use hex format for audio devices

Bug 16009464

Change-Id: Ibfb1ce6881eba8b7e34420293b8a7077a6e659e6
152f59b8cff44f74e6416cf309bfd85e0bb7e1db 22-Oct-2014 Eric Laurent <elaurent@google.com> am 6efbadac: am b6a89512: am 9d0d5958: Merge "audioflinger: new HW A/V sync ID allocation flow" into lmp-mr1-dev

* commit '6efbadac3ff5c3ddc194faaba44f1fe63e452c7f':
audioflinger: new HW A/V sync ID allocation flow
fa90e84ed0cb2abdc0e0873a06d10ccf2b3c34f6 18-Oct-2014 Eric Laurent <elaurent@google.com> audioflinger: new HW A/V sync ID allocation flow

The HW A/V sync ID is now allocated by the audio HAL before the
output stream is created by a call to global get_parameters() with

When the AudioTrack is created, the HW A/V sync ID is communicated
to the output stream by stream set_parameters() with key

Bug: 17112525.
Change-Id: Ia8bc6f3bf9f358aa89f3f56ac554e893a19811ad
d89eaddd1544dc9f6665e2578583e8083cac00da 07-Oct-2014 Marco Nelissen <marcone@google.com> Check for duplicate uuids when parsing audio_effects.conf

uuids need to be unique, and things don't work properly when they're
Also fix/enhance/extend the dumpEffectDescriptor() method, and
include a list of effects in audioflinger dumpsys.

Change-Id: I3dfbc5ed0f7272c7809e337f2929212ece047ee4
1b92868010b5c1409692a86f6b27e4a265b64c1a 03-Oct-2014 Eric Laurent <elaurent@google.com> audioflinger: fix pre processing transfer between record threads.

Fix two problems remaining with pre processing effects transfer from
one record thread to the next in case of tear down due to device connection:
1 - the enabled state of the effects was not communicated to the new HAL
input stream.
2 - the effects saved in orphan chains list were not transfered to the
new thread when a AudioRecord was created.

Bug: 17757378.
Change-Id: I0923c98470db3b51154dc89846157780a4c21e86
cf7863ea8d9137aadf6bfd9756eb07ebd1c81b5c 15-Sep-2014 Eric Laurent <elaurent@google.com> Merge "audioflinger: fix pre processing effect leak" into lmp-dev
aaa44478a373232d8416657035a9020f9c7aa7c3 13-Sep-2014 Eric Laurent <elaurent@google.com> audioflinger: fix pre processing effect leak

When a capture thread was closed, the effects attached to this thread
were left dangling and the associated effect chain destroyed.
When their last client was disconnected, the effects were not released
properly from the effect library because the destruction process could
not be completed without the effect being attached to a thread.

A similar problem prevented a RecordTrack to be properly released if
its client was destroyed after the capture thread.

The fix consists in allowing the effect or record track to be properly
released even if its parent thread cannot be promoted.

Also save any effect chain still present on a closed capture thread
in case a new client wants to reuse the effects on the same session later.

Bug: 17110064.
Change-Id: I5cd644daa357afd1f3548f9bcb28e6152d95fdb8
2f035f59d1e28728d38d18a7f0f7a9c6e8b0c11b 14-Sep-2014 Eric Laurent <elaurent@google.com> audioflinger: send mic mute command to all audio HALs

Mic mute should be sent to all audio HALs, not
only the primary HAL as telephony can use
capture devices on other HALs (e.g USB)

Bug: 17321604.
Change-Id: I658f6084d5b5cdc5a70784661d5cea0b6f81c3a9
329f6511ee4e03a4605c70bbda8d3a96d2544884 29-Aug-2014 Glenn Kasten <gkasten@google.com> Restore the ability to build tee sink for debugging

This changelist does not enable tee sink, but makes it possible to do so.
Tee sink had suffered some bit rot since it is not built by default.

Also fixes a crash for > 2 byte per sample or > 2 channels.
Still does not write correct header for floating-point;
that will be best solved by moving to libsndfile.

Bug: 16990102
Change-Id: I8e92c588ccc513d7802d696fcfb324e815772df6
93c3d41bdb15e39dac0faea9c5b60f1637cd477c 01-Aug-2014 Eric Laurent <elaurent@google.com> 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.
Modify audio policy to select a direct output with HW sync
when requested.

Bug: 16132368.

Change-Id: I03038f9188f2d389f8a5fd76a671854013a4513e
44622db93a24219123facbbe14259000f90de728 02-Aug-2014 Eric Laurent <elaurent@google.com> audio flinger: fix service fuzz test crash

Bug: 13744704.
Change-Id: I572c89f88dcab2b8b612ec6860983306f9f159ab
de3f8392fbf380ba6f09d009b00d7172477389a2 28-Jul-2014 Eric Laurent <elaurent@google.com> rename AudioSystem::newAudioSessionId()

Rename AudioSystem::newAudioSessionId() to
AudioSystem::newAudioUniqueId() as it can be used
also for I/O handles.

Bug: 12378680.
Change-Id: I611ea3b5eb57a4b0774437f477ee87dc4ccc2cc2
cf2c0210c8afbe7d0661ccbbae3835b5ce73c0bf 26-Jul-2014 Eric Laurent <elaurent@google.com> AudioFlinger: update openInput() and openOutput()

Add parameters to openInput() and openOutput(): device address,
input source.
Allow caller to specify a given I/O handle
Group parameters in a struct audio_config.

Bug: 12378680.
Change-Id: I7e9af74c0d996561cc13cbee7d9012d2daf33025
9a59276fb465e492138e0576523b54079671e8f4 22-Jul-2014 Andy Hung <hunga@google.com> Add multichannel capability to AudioFlinger

But not enabled (kEnableExtendedChannels == false).

Change-Id: I62f7e31fbd29ad703a9a02f5d1a280b6972dd423
83b8808faad1e91690c64d7007348be8d9ebde73 21-Jun-2014 Eric Laurent <elaurent@google.com> audio flinger: add patch connection between hw modules

Add support for audio device connections between different audio
hw modules.
The patch is performed by creating a bridge between the playback
thread connected to the sink device and the record thread connected
to the source device using a pair of specialized PlaybackTrack and
- Added PatchTrack and PatchRecord classes.
- Added TrackBase type to indicate more clearly the track behavior.
- A TrackBase can allocate the buffer or reuse an existing one.
- Factored some code in openOutput() and openInput() for internal use
by PatchPanel.

Bug: 14815883.

Change-Id: Ib9515fcda864610458a4bc81fa8f59096ff4d7db
ec40d284218466d8f0e832e7eb88e6ea6c479c88 16-Jul-2014 Glenn Kasten <gkasten@google.com> Add audio_input_flags_t to IAudioFlinger::openInput

For backward compatibility, until flags are correctly calculated,
we will assume that the request is for a low latency input stream.

Change-Id: I76746834e870df00833dc77cbdaa2edd2ffeec95
da3bd9f12883f8344d2db00ce2fa47511ed9bef6 16-Jul-2014 Glenn Kasten <gkasten@google.com> Add audio_input_flags_t to HAL open_input_stream

For backward compatibility, until flags are added to openInput(),
we will assume that the request is for a low latency input stream.

Change-Id: I5e6f7e574418917ff1b41b0a47199203c69cb40f
2829edccd7d2bb8244246f316face82b650b8949 18-Jun-2014 aarti jadhav-gaikwad <agaikwad@nvidia.com> stagefright: Pass audio aac sub formats in offloadinfo

Pass audio aac sub formats in offloadinfo according to
aac profile. Audio HAL can take decision about offload
using DSP capabilities

Change-Id: If269a3654b5d2b09c183212b0646ef03e06f2d8f
5c68f959eaa2e02fed5643c78e281fff42bcc0a2 07-Jul-2014 Glenn Kasten <gkasten@google.com> Merge "IAudioFlinger::openRecord now suggests notificationFrames"
7df8c0b799d8f52d6386e03313286dbd7d5cdc7c 03-Jul-2014 Glenn Kasten <gkasten@google.com> IAudioFlinger::openRecord now suggests notificationFrames

Change-Id: I08885cc381d03c522a23289e74f0e1ed46563863
5ba4440c11eb975ec0e104e0af1981838f42f57c 04-Jul-2014 Glenn Kasten <gkasten@google.com> Merge "Remove obsolete IAudioFlinger::channelCount()"
6146c08f0c3dd8b9e5788063aa433f304a810602 18-Mar-2014 Andy Hung <hunga@google.com> Add enabling variable for extended precision audio

Set AudioFlinger::kEnableExtendedPrecision = true to enable
extended precision. Enabling will be required for devices (such as
USB) which report 24 bit or 32 bit sink formats.

Change-Id: I0dc1d7a4f7607086d7b536ea0e43aef0e696f2ee
4ea00a25cf85877b48ebd1e15a657cfaab29af58 02-Jun-2014 Glenn Kasten <gkasten@google.com> Add mPrimaryOutputSampleRate

Change-Id: I46b527fc3f2b5a5720a74b4f0b9a8f2e0d570b09
f947dbce4390f2c3c460325d37002a34f09c0b74 01-Jun-2014 Glenn Kasten <gkasten@google.com> Remove obsolete IAudioFlinger::channelCount()

Change-Id: Ie623edae2e795f9155f1f452fe4e6c7217a4a4c8
ecc03733bfd3262ffadef3166e6be23b539c505c 28-May-2014 Eric Laurent <elaurent@google.com> Merge "audioflinger: first patch panel implementation."
1c333e252cbca3337c1bedbc57a005f3b7d23fdb 20-May-2014 Eric Laurent <elaurent@google.com> audioflinger: first patch panel implementation.

Added a new PatchPanel subclass to AudioFlinger
to handle audio ports and audio patches configuration
and connection.
The first implementation does not add new functionnality.
AudioPolicyManager uses patch panel interface to control
device routing.
- Added PatchPanel class. The first implementation does not
add new functionnality. PatchPanel handles routing commands
for audio HAL after 3.0 or converts to setParameters for audio
HALs before 3.0.
- Added config events to ThreadBase to control synchronized
audio patch connection.
- Use PatchPanel API to control device selection isntead of setParameters.
- New base class AudioPort common to audio device descriptors
and input output stream profiles. This class is RefBase and groups
attributes common to audio ports.
- Use same device selection flow for input as for outputs:
getNewInputDevice -> getDeviceForInptusiource -> setInputDevice

Change-Id: Idaa5a883b19a45816651c58cac697640dc717cd9
fe1a94e68e173fe4dfe7699112422a94eddacb4e 27-May-2014 Eric Laurent <elaurent@google.com> audioflinger: fix deadlock upon AudioRecord creation error

AudioFlinger:openRecord() should not hold mClientLock when
releasing the local reference on AudioRecord as the destructor will
also lock mClientLock.
Same fix for AudioFlinger::createTrack().
Also make sure that AudioFlinger::createEffect() holds mClientLock
when clearing local reference to the Client in case of error.

Regression introduced by 021cf9634ab09c0753a40b7c9ef4ba603be5c3da

Bug: 15118096.
Change-Id: Ie961c398c8e0460bca9b95e2ee4ce6859316c275
5806b3533437e3d83208e8e9d6bd74ed304e51ec 22-May-2014 Eric Laurent <elaurent@google.com> audioflinger: test min HAL version instead of current

Change-Id: Ibce2353b4390329b4c1a453e829178e3986c25a7
87cebadd48710e42474756fc3513df678de045ce 22-May-2014 Elliott Hughes <enh@google.com> resolved conflicts for merge of f285c91e to master

Change-Id: I4c995e297d09c0854a42142cc57dce8b771acf65
8b5f642eb2364ea7fe46a5b3af51b48b58f12183 22-May-2014 Elliott Hughes <enh@google.com> Move frameworks/av from fdprintf to POSIX dprintf.

Bug: 11156955
Change-Id: Ia98cd16b4c1f7be87cf060b7456de4f40896bacb
e541269be94f3a1072932d51537905b120ef4733 16-May-2014 Andy Hung <hunga@google.com> Use new channel count functions for audio masks

Change-Id: Ia658ab4b6320d19fdb50f123c930918724ff0ef3
Signed-off-by: Andy Hung <hunga@google.com>
021cf9634ab09c0753a40b7c9ef4ba603be5c3da 13-May-2014 Eric Laurent <elaurent@google.com> AudioFlinger: add specific mutex for client lists

Add a specific mutex to protect access to mClients and
mNotificationClients lists. This avoids locking the main AudioFlinger
mutex from inside thread loops and allows not to worry about
cross deadlocks when sending a config event with status reply while
keeping the ThreadBase or AudioFlinger mutex locked.
As a way of consequence, remove notification client list passed to
processConfigEvents_l() and audioConfigChanged() as the list
can now be accessed by locking client mutex only.

Change-Id: I228022204b6709a8bb60cc96d9514a6ffe59b62e
26d5ff926fa3323b39ae4408bcd29826a9523c9b 10-May-2014 Eric Laurent <elaurent@google.com> Merge "audioflinger: refactor thread config events"
1035194cee4fbd57e35ea15c56e66cd09b63d56e 09-May-2014 Eric Laurent <elaurent@google.com> audioflinger: refactor thread config events

Merge config events and set parameters messaging mechanism.
- setting parameters now uses the config event mechanism
- config event now allow to wait for a condition and synchronize caller
binder thread with execution thread and return an execution status.
- simplify locking mechanism to avoid unlocking the thread
mutex while processing events.

Change-Id: Ia49cb3e617abec4bacb6c1f9a8cb304c4ed3902e
d776ac63ce9c013c9626226e43f7db606e035838 07-May-2014 Glenn Kasten <gkasten@google.com> IAudioFlinger::openRecord returns IMemory(s)

openRecord() now explicitly returns the control block and data buffer
as separate IMemory references. If the IMemory for data buffer
is 0, this means it immediately follows the control block.

Change-Id: Ic098f88f0e037f8fbe30006689e18cacacf09d06
c4b88a8d0f524666bf0f390075c334d047a104f2 01-May-2014 Glenn Kasten <gkasten@google.com> Fix bug for direct track with PCM != 16-bit

The AUDIO_FORMAT_PCM_8_BIT format was being converted to
AUDIO_FORMAT_PCM_16_BIT on client side even for direct tracks.
That conversion was incorrect; it should only be done for mixed tracks.

Also remove checks for specific PCM formats in the generic part of
server side of createTrack. Those format checks should only be done by
the thread. This will allow direct tracks for PCM 8-bit, PCM 24-bit, etc.

Change-Id: If5b9fd79f8642ed93e2aeabcaf4809b2ed798978
1b24cf32e02a1372e57b3a2a432bc0adfe496e6d 16-Apr-2014 Mark Salyzyn <salyzyn@google.com> am e80631aa: am 839d11d1: Merge changes I0a744dc7,Id993a70d

* commit 'e80631aa1992ca50af679cd6a018c0ffda7f9b17':
media: use size_t for integer iterator to Vector::size()
media: 64 bit compile issues
3ab368e0810d894dcbc0971350c095049478a055 15-Apr-2014 Mark Salyzyn <salyzyn@google.com> media: use size_t for integer iterator to Vector::size()

Change-Id: I0a744dc7815a86a993df9b0623440be620ec8903
1490d5142d8d485ea0d56a9974726fb6dff0a62d 28-Mar-2014 Glenn Kasten <gkasten@google.com> Merge "Mark the logging heap read-only to media.log service"
142f519aa1acd5804d111e60d100f170fed28405 26-Mar-2014 Glenn Kasten <gkasten@google.com> Use symbol AUDIO_IO_HANDLE_NONE from <system/audio.h>

Change-Id: Id6b1aa17558eb73e17f22b8eab6cd02e00a96dff
51beebba9d4989d05831a13bbe5cdf53ecac1bf5 26-Mar-2014 Glenn Kasten <gkasten@google.com> Merge "Use symbol AUDIO_DEVICE_NONE from <system/audio.h>"
73ec11738cd4399c55d4905665a14a7c4cd42cbf 26-Mar-2014 Glenn Kasten <gkasten@google.com> Merge "Fix uses of KeyedVector"
45faf7e02791993a487d6e038d16ff46395f1975 17-Jan-2014 Glenn Kasten <gkasten@google.com> Use symbol AUDIO_DEVICE_NONE from <system/audio.h>

Change-Id: I61f882c5e7c949bf00d3bfc745ebf3b5e1c42a58
9ea65d0f4a564478343b1a722fae4ce5883670c3 17-Jan-2014 Glenn Kasten <gkasten@google.com> Fix uses of KeyedVector

Constructor for AudioFlinger::mAudioHwDevs was missing, and so
AudioFlinger::findSuitableHwDev_l() could return an undefined pointer
if a non-0 module wasn't found.

A KeyedVector of Plain Old Data (POD) element type must specify the
default value in the constructor, or else the default will be undefined.

- Parameter had wrong type in constructor for AudioSystem::gOutputs.
- Remove obsolete AudioSystem::gStreamOutputMap.

Change-Id: I9841493e018440e559d8b8b0e4e748ba2b2d365b
bcefec31bd1346133052356ffc8d7ac8a5b13fab 17-Jan-2014 Glenn Kasten <gkasten@google.com> Document AudioFlinger::nextUniqueId()

Change-Id: Iafe96f1c10bd85cb23a2553945ca68aa601dc2eb
cf515ab0030cf5e0bef843638af7c989a8f6843a 15-Mar-2014 Glenn Kasten <gkasten@google.com> Mark the logging heap read-only to media.log service

Change-Id: Ie26a9e7e37c951774c71d2c53886db52dd5479aa
3ef14ef30359376006a233f6a21a165d4b65a7df 13-Mar-2014 Glenn Kasten <gkasten@google.com> Make error handling more similar for output and capture

And simplify error case

Change-Id: I0bb1ec252945d672cc4cef137977b912f1b23d51
570f633e0b02d1bc25f3312b92e72cc29a40ca38 13-Mar-2014 Glenn Kasten <gkasten@google.com> Make session ID code similar between output and capture

Change-Id: I873a97d0e36e1a452421df4f749d51e1916797a5
e848bd9abb3bbbd4c66f9fb9d1442f7663d7ba40 13-Mar-2014 Glenn Kasten <gkasten@google.com> Move declarations to where needed

Also remove unnecessary ALOGV and dead variable inFrameCount

Change-Id: I34547fb0fd2ff142fc60277bedfa4064e7356611
c5a17425986b4ce3384e6956762c86018b49c4a0 13-Mar-2014 Glenn Kasten <gkasten@google.com> Remove name output parameter from createTrack

It was only used for one log.
A better solution will be a per-track unique ID.

Change-Id: Ia440e02ae4a5a4019a9a2d08970e1ee93ac4c3a3
05997e21af6c4517f375def6563af4b9ebe95f39 13-Mar-2014 Glenn Kasten <gkasten@google.com> Whitespace and comments

Change-Id: I99752cca74a459c4746ea4718acb0115439e50bd
0e0e846f3d86906ff990025981e514d6bcf44d8e 13-Mar-2014 Glenn Kasten <gkasten@google.com> Prepare for additional capture formats

Change-Id: Ib10b004f0029191b33a97671e41b0d86ebfbe0b9
6cbccee701e74fa43a5ea49c15af7dd3267b6699 14-Dec-2013 Haynes Mathew George <hgeorge@codeaurora.org> audioflinger: Fix for a deadlock in track creation

AudioFlinger enters a deadlock (with itself) on trying to free a
RecordTrack or Track object that failed initialization. Clear this
bad object from the caller instead.

Bug: 12423233
Change-Id: I926f2beb922a70f6924e593e2bbf1a5b5df85b16
d2304db2fcb5112292105a0949a55986a4c9875f 03-Feb-2014 Glenn Kasten <gkasten@google.com> Rename setStreamOutput to invalidateStream

And simplify by removing the unused I/O handle parameter 'output'.

Change-Id: Ie9c4df17a7378066312d4ed8790fda7a9125c95e
53b5d098b7d5d4412b9b9fe08daaf84c56b716e9 05-Feb-2014 Glenn Kasten <gkasten@google.com> Move up AudioFlinger::createTrack and openRecord parameter checks

Perform the basic sample rate, format, and channel masks tests as
early as possible. Now the thread methods only need to do the thread
type-specific checks.

Change-Id: I57d8319a228dda0446ca9b3ddcb7c9f67f28238c
d0e0cfa58a35508c14818b88804845194b5d80e1 22-Feb-2014 Glenn Kasten <gkasten@google.com> Merge "Make tee sink work again"
f66b42242342017c26eb97de544dae31dd2537ca 20-Feb-2014 Glenn Kasten <gkasten@google.com> Make tee sink work again

It was broken by this earlier change to NBAIO:
> Change-Id: I5eda412648b094358f5eefc38300e9ec8a734cd3
But the code was not being compiled, so the error was not caught earlier.

Also increase the default size of per-track pipe to a reasonable value.

Change-Id: Ica05017e6c6533e1fea9df379a9b204eebed4a1f
8ea16e4b0a7d398d26887c18675b3899de5d779d 21-Feb-2014 Eric Laurent <elaurent@google.com> audioflinger: fix race condition in SyncEvent callback

Now that the SyncEvent callback is implemented by the
RecordTrack instead of the RecordThread, there is a possibility
that the callback is called after the track deletion.

SyncEvent callback now uses a weak pointer instead of
a raw pointer as cookie. This allows the callback implementer to
acquire a strong reference on the object pointed to by the cookie.

Bug: 13114128.
Change-Id: Id61b8f06044ed1e52c6f7e7c666cdede68340de2
4cc0a6a835c806d200ef83ef31fe5bef327c355c 17-Feb-2014 Glenn Kasten <gkasten@google.com> Multi-client recording continued

Remove mReqChannelCount and mReqSampleRate.
Increase number of input frames needed for sample rate converter.
Add TODO comments to investigate later.
Fix bugs in sample rate conversion.

Change-Id: I3aa54b862843d518b6e4ece9a7f52fd27d741629
d457c970c8d08519cd77280a90b61ae1e342cfe3 11-Feb-2014 Marco Nelissen <marcone@google.com> Track pid for each session

so they can be properly freed.

Change-Id: I6f389035bc29e74e7c367c1c6d0252b180f666b3
1d6fa7af1288b550faabe4ec2cf98684236723db 11-Feb-2014 Narayan Kamath <narayan@google.com> resolved conflicts for merge of 566be7c3 to master

Change-Id: I7b1cc71057b2bd4f771e7bcf508a8c3abd6017ce
377b2ec9a2885f9b6405b07ba900a9e3f4349c38 03-Feb-2014 Kévin PETIT <kevin.petit@arm.com> Make frameworks/av 64-bit compatible

Contains the necessary changes to make frameworks/av build and work
on a 64-bit machine.

Signed-off-by: Craig Barber <craig.barber@arm.com>
Signed-off-by: Kévin PETIT <kevin.petit@arm.com>
Signed-off-by: Ashok Bhat <ashok.bhat@arm.com>
Signed-off-by: Marcus Oakland <marcus.oakland@arm.com>

Change-Id: I725feaae50ed8eee25ca2c947cf15aee1f395c43
9601c6efcb2552960d6f125d073525b581c1b7ec 10-Feb-2014 Marco Nelissen <marcone@google.com> Merge "Pretty up audioflinger dumpsys"
ec95f0e82a680931e9c7c9011dbbd68d5ab484c8 10-Feb-2014 Glenn Kasten <gkasten@google.com> Merge "Use printf format %#x for audio_format_t in logs"
b220884bf3129253cc5bc8d030bc475411ea4911 07-Feb-2014 Marco Nelissen <marcone@google.com> Pretty up audioflinger dumpsys

Change-Id: I57e44b4c36b99f7149542bbcf9645521c6152dfa
a793625031a3e326a261a0843598c35a5784bbde 07-Feb-2014 Glenn Kasten <gkasten@google.com> Merge "Use Format_isValid() and Format_isEqual() instead of direct comparison"
cac3daa6332bf6d1f7d26adc4a9915f3d7992dd9 07-Feb-2014 Glenn Kasten <gkasten@google.com> Use printf format %#x for audio_format_t in logs

Change-Id: I1c611d1037685d52ccc84efe0fccd6413ec938e9
7332c37c459f5f382a9e4105d522d1c5a7f6f0b5 05-Feb-2014 Glenn Kasten <gkasten@google.com> Merge "audioflinger: Fix for a deadlock in track creation"
6e0d67d7b496ce17c0970a4ffd3a6f808860949c 31-Jan-2014 Glenn Kasten <gkasten@google.com> Use Format_isValid() and Format_isEqual() instead of direct comparison

Change-Id: Ie87607aa514976947540a77775e6425c4e56e7d9
0f11b51a57bc9062c4fe8af73747319cedabc5d6 01-Feb-2014 Glenn Kasten <gkasten@google.com> Fix unused parameter warnings in audio

Change-Id: I665ba3358dd9502f0adec70d486e7bf8a2e1b0fe
03e9e83c47ab4a518da0a1f36b8f702f59221c95 14-Dec-2013 Haynes Mathew George <hgeorge@codeaurora.org> audioflinger: Fix for a deadlock in track creation

AudioFlinger enters a deadlock (with itself) on trying to free a
RecordTrack or Track object that failed initialization. Clear this
bad object from the caller instead.

Bug: 12423233
Change-Id: I926f2beb922a70f6924e593e2bbf1a5b5df85b16
f0002d142e6d24c5438600b2c259679de710f8ac 24-Jan-2014 Glenn Kasten <gkasten@google.com> Merge "Replace control block frameCount_ by explicit in/out parameter"
0ce5ca5e113d58cbcb7cb48615d6dbbf3fbe7c66 17-Jan-2014 Glenn Kasten <gkasten@google.com> Merge "Cleanup createTrack error handling"
0cde076ddb283c84c3801a2df4cc3df99bd1577f 17-Jan-2014 Glenn Kasten <gkasten@google.com> Cleanup createTrack error handling

Similar to cleanup done earlier for openRecord in this CL:
> Change-Id: I84897dd7d30b370640b54e928f230604b873cb68

Bug: 10888816
Change-Id: I804a47f898e0319a60a9bd58906bbb037e45cc25
5f972c031d4061f4f037c9fda1ea4bd9b6a756cd 13-Jan-2014 Glenn Kasten <gkasten@google.com> AudioRecord::getInputFramesLost() cleanup

Fixed bug that if the binder call failed (for example if the
IAudioFlinger binder is dead), then getInputFramesLost was returning
garbage. Now it correctly returns zero, which is the error value for
this method.

The type declarations for getInputFramesLost were inconsistent:
a mixture of unsigned int, size_t, and uint32_t. Now it returns uint32_t
everywhere, which is what the underlying HAL API returns.

Added a FIXME about the side effect behavior. This will need review
for multi-client.

Change-Id: Ifa2e117a87dbd0c1f2c892a31d1c3dd919bf1a0a
aea7ea06394bcb155972d82055d4ea59962e4051 26-Jun-2013 Glenn Kasten <gkasten@google.com> Use AUDIO_SESSION_ALLOCATE instead of 0

Also fix a couple of places where we were using AUDIO_SESSION_OUTPUT_MIX,
which happens to also be equal to 0, but has a different meaning.

Change-Id: I90e39be3b89f5021a96d9e3b8d10929013ca977f
74935e44734c1ec235c2b6677db3e0dbefa5ddb8 19-Dec-2013 Glenn Kasten <gkasten@google.com> Replace control block frameCount_ by explicit in/out parameter

in IAudioFlinger::createTrack and IAudioFlinger::openRecord

Change-Id: I09c644c80e92c8e744b1b99055988a2588b2a83d
481fb67a595f23c5b7f5be84b06db9b84a41a42f 30-Sep-2013 Glenn Kasten <gkasten@google.com> Add RecordThread media.log and deferred deallocation

This change allows a media.log buffer for RecordThread.

Unlike playback threads which stick around forever, the RecordThread comes
and goes for every capture session. This means that the media.log buffer
for a RecordThread would disappear too, and so was useless. Now when a
thread exits, it's associated media.log buffer is just marked for deferred
deallocation. It is only actually freed when the memory is needed.

Other changes:
- Fix bug in unregistering comparison, it was comparing the wrong pointers
- Increased size of log area so we can log for RecordThread also

Change-Id: If45d4c03a793b86390a0112ec3acc5d41b2e3635
663c2247b71086e30bfd3192979d1dd7f15c539e 24-Sep-2013 Glenn Kasten <gkasten@google.com> Consistent error checking for sp<IMemory> and pointer()

There have been concerns that an sp<IMemory> could be non-0, but the
associated pointer() still be NULL. There are rumors this may happen
when a non-0 sp<IMemory> is passed in by client but the shared memory cannot
be re-mapped into mediaserver.

There's also evidence in the early (2009/03/03) pre-git code of checking
pointer() for NULL, after a local allocate() returned a non-0 sp<IMemory>.
It's not clear if this is "cargo cult" paranoia, or if there was a
genuine reason for the check.

In any case, we now consistently check pointer() for sp<IMemory>
input parameters in createTrack() and queueTimedBuffer().

We also check after successful allocate(). If allocate() returns a
non-0 sp<> but NULL pointer(), then treat it as if the allocate() had
returned 0.

Change-Id: I3013ac5766b493d443ecef71711ec861076a623e
8594843c15b4722ced39436fe9e64f3e57e7ace4 19-Aug-2013 Glenn Kasten <gkasten@google.com> Pull HAL reads out of RecordThread resample

Previously, the resample was indirectly calling HAL read
from within the BufferProvider's getNextBuffer. Now the HAL
read is done ahead of time into a circular buffer,
and the getNextBuffer just reads out of that memory.

This change will permit some future planned features.

Also removed the mono to mono resampling optimization,
as that optimization will no longer be valid in the future.

Change-Id: I59f5016a2df91078d697c37a7dec2d9d9f44542e
1fc6cb5be26734938b3999e6bf4ce0e625e7d284 30-Oct-2013 Eric Laurent <elaurent@google.com> am ce275b7d: am 1c594b63: Merge "audioflinger: enable effects after registration if needed" into klp-dev

* commit 'ce275b7dd20e3d4781a46126c753e6eb998e6c0f':
audioflinger: enable effects after registration if needed
1c594b637df26499ce1dae2db34f2b3290efd838 30-Oct-2013 Eric Laurent <elaurent@google.com> Merge "audioflinger: enable effects after registration if needed" into klp-dev
9cae217050aa1347d4ac5053c305754879e3f97f 14-Jan-2013 Marco Nelissen <marcone@google.com> Assign blame for playback wakelocks.

Set a work source for the playback wakelock, so that playback is
counted against the requesting app instead of the media server.

Cherrypicked from master.


Change-Id: I7329f88a288a95a582a78005a1c3d16a5a611e31
462fd2fa9eef642b0574aa7409de0bde3fec8d43 14-Jan-2013 Marco Nelissen <marcone@google.com> Assign blame for playback wakelocks.

Set a work source for the playback wakelock, so that playback is
counted against the requesting app instead of the media server.

Change-Id: I7329f88a288a95a582a78005a1c3d16a5a611e31
d72b7c0180ee83fc3754629ed68fc5887a125c4c 13-Oct-2013 Eric Laurent <elaurent@google.com> audioflinger: enable effects after registration if needed

This fixes a bug where effects were not properly reenabled after
being moved from one playback thread to another. The effect
is enabled but the audio policy manager sees it as disabled.

Bug: 11181933.
Change-Id: I19cac7acbaf61c546e667fd85ed7d4eda1c716d8
35295078ab59c8c5d143a54d5a55557c3ca62c51 07-Oct-2013 Glenn Kasten <gkasten@google.com> resolved conflicts for merge of 9a7d11f0 to master

Change-Id: Ie4d101185a93d37ec280f608813ad62a077a584e
fee4ce338d78eeb58af1f66831ead53322d3859e 07-Oct-2013 Glenn Kasten <gkasten@google.com> Merge "Cleanup openRecord error handling" into klp-dev
62dbe93f7743061e97fc3299386a2f887ca748cf 25-Sep-2013 Eric Laurent <elaurent@google.com> am 4e141a4f: am 1802399c: Merge "fix deadlock in audioflinger::createEffect()" into klp-dev

* commit '4e141a4f1303767f70ea983925ec01b034fe667b':
fix deadlock in audioflinger::createEffect()
eb3c337a3d6c74ec857dfc8be7eeafe634614bcd 25-Sep-2013 Eric Laurent <elaurent@google.com> fix deadlock in audioflinger::createEffect()

commit 5baf2af5 introduced a regression by calling
getOutputForEffect() with AudioFLinger main mutex locked.
The locking order must always be AudioPolicyService mutex then
AudioFlinger then ThreadBase mutex.

Bug: 10916796.
Change-Id: Ide34a2d84dbb06dbb35abd0640d91b01b0ac4d40
e93cf2ca27ae6f4a81d4ef548bbf10a34db6d98f 24-Sep-2013 Glenn Kasten <gkasten@google.com> Cleanup openRecord error handling

Bug: 10888816
Change-Id: I84897dd7d30b370640b54e928f230604b873cb68
d7e076589dc5298d7a78cb683159723b7eb08d7f 19-Sep-2013 Eric Laurent <elaurent@google.com> am 87fb4f30: am d1b28d41: audioflniger: fix leaked audiosession references

* commit '87fb4f30077e7bcf78e65cf25fe95bd58238bad1':
audioflniger: fix leaked audiosession references
d1b28d41dbda203ffb420ba2e36cbe736b163ff8 19-Sep-2013 Eric Laurent <elaurent@google.com> audioflniger: fix leaked audiosession references

acquireAudioSessionId() should not create session references
if the caller is not listed in the known notification clients.
It happens when the MediaPlayer or AudioTrack is created by the
mediaserver on behalf of a client (e.g CameraService). In this case
releaseAudioSessionId() can be called from a different pid and
the session reference will not be removed.
Also we will not be able to remove the reference if the client
process dies.

Bug: 10606426.
Change-Id: Ibb5e27518daeb484a2e66302e4c6221cbaca5b70
dc8cae8c118e4aef4ef1f7b2c6f79becc1df4a05 18-Sep-2013 Eric Laurent <elaurent@google.com> am bf5e2397: am 5baf2af5: more support for audio effect offload

* commit 'bf5e23979a03da96ce1d63126c480103232f174b':
more support for audio effect offload
5baf2af52cd186633b7173196c1e4a4cd3435f22 13-Sep-2013 Eric Laurent <elaurent@google.com> more support for audio effect offload

Offloading of audio effects is now enabled for offloaded
output threads. If an effect not supporting offload is enabled,
the AudioTrack is invalidated so that it can be recreated in PCM

Fix some issues in effect proxy related to handling of effect
commands to offloaded and non offloaded effects.

Also fixed a bug on capture index in software Visualizer effect.

Bug: 8174034.

Change-Id: Ib23d3c2d5a652361b0aaec7faee09102f2b18fce
8136cfae9c22ae8ff42eec9ed751833dda605444 09-Sep-2013 Eric Laurent <elaurent@google.com> am 8a910716: am 6ca83fad: Merge "audioflinger: no effects on offloaded tracks" into klp-dev

* commit '8a910716892d17a2ac62c7e9884af0e9d75b26bc':
audioflinger: no effects on offloaded tracks
813e2a74853bde19e37d878c596a044b3f299efc 31-Aug-2013 Eric Laurent <elaurent@google.com> audioflinger: no effects on offloaded tracks

Invalidate offloaded tracks when an effect is enabled
so that the track is recreated in PCM mode and the effect
can be applied.
This is temporary until effect offloading is implemented.

Bug: 8174034.

Change-Id: I77b8b54a10db6cb8334be76d863ea7e720eaad09
61bd7a0281ffecb99b27bff63334c559df7357e6 20-Aug-2013 Jeff Brown <jeffbrown@google.com> am 0541b3bb: am c8b226f4: Merge "Enforce permission for recording from remote submix." into klp-dev

* commit '0541b3bb40fa23e97e0a4599463b6afc0e271939':
Enforce permission for recording from remote submix.
893a5642871114fca3b2a00c6ff8e5699ce3e3ed 17-Aug-2013 Jeff Brown <jeffbrown@google.com> Enforce permission for recording from remote submix.

Bug: 10265163
Change-Id: I2395036bac6e10baeaf6ea4bc3093bd9dd98742d
3255095af6677caeeebf81c8891ce8db745617ff 06-Aug-2013 Glenn Kasten <gkasten@google.com> Move local variable declarations to point of first use

Change-Id: Ia0fc4b099a3cf8bb5b67b287e7687e9dc9691e0e
6e2ebe97f2ad0a21907f20f9ee644c4eacbb7a40 13-Aug-2013 Glenn Kasten <gkasten@google.com> Use curly braces in 'if' to make it easier to add logs

Change-Id: I58b33fefdd8bf703647414157a99a3223be3531c
e198c360d5e75a9b2097844c495c10902e7e8500 13-Aug-2013 Glenn Kasten <gkasten@google.com> Whitespace

Change-Id: Id3ccc183a03421330d0498faaa62a45915cdc3d6
2fc14730e4697a6f456b4631549c9981f6b0b115 05-Aug-2013 Glenn Kasten <gkasten@google.com> Comments

Change-Id: I56f82904cb3855bad6f33ad1ff4ddf66a61c5720
030033342a6ea17003e6af38a56c7edc6d2ead01 07-Aug-2013 Glenn Kasten <gkasten@google.com> Clean up error handling in createTrack and openRecord

Outside callers now use initCheck() to determine whether a TrackBase
has been created successfully, instead of relying on internal knowledge.

Previously, callers needed to know that a TrackBase was only valid if it's
getCbk() != 0. For a Track (playback), they needed to know to also check
the track's name (track index). Now, outsiders can just call initCheck().

Other changes:
- Return a 0 reference if track creation fails
- Remove a dead line of code in AudioFlinger::openRecord

Change-Id: If374924a3f6fd27906f625aa83dd0a1e3f506e00
9156ef3e11b68cc4b6d3cea77f1f63673855a6d1 07-Aug-2013 Glenn Kasten <gkasten@google.com> Status pointer passed by caller is always non-NULL

in createTrack, openRecord, createEffect, createTrack_l,
createRecordTrack_l, and createEffect_l.

Change-Id: I2e459e4de9c78145f4d496e6abf289479a2f0941
309f7abb3c170ba764e67e9b6fed31fb442e9953 09-Aug-2013 Glenn Kasten <gkasten@google.com> Merge "Use 0 for sp<>, NULL for raw pointers"
3a6d5ded7187ae324532a60b03532c33d607e282 09-Aug-2013 Glenn Kasten <gkasten@google.com> Merge "Rename reqChannels to reqChannelMask"
937098b9b564a779ff1c8c2d9e60769ee5c69810 26-Jun-2013 Glenn Kasten <gkasten@google.com> Use 0 for sp<>, NULL for raw pointers

Change-Id: Ia0595afdc41e1dec428d7a3db73558b54c417bf3
fb872cc6f77f6d74011fab703b3edd7023c736cb 06-Aug-2013 Glenn Kasten <gkasten@google.com> memset audio_config to zero

Per guideline in hardware/libhardware/include/hardware/audio.h,
"You should memset() the entire structure to zero before use to
ensure forward compatibility."

Change-Id: I2bce70ef6ea4b070668bd9cbc54bfe20a60111aa
f506e9495f2b2123b3bec7d42ec8ef13c6213ee8 06-Aug-2013 Glenn Kasten <gkasten@google.com> Rename reqChannels to reqChannelMask

This avoids potential ambiguity with channel count.

Change-Id: I0db82efc4c14dd8189d65a1db29809a085acf528
ddb0ccf3fb6fe8da8c71a6deb30561b821f3c0a2 01-Aug-2013 Glenn Kasten <gkasten@google.com> RecordTrack::createRecordTrack_l flags are in/out

The flags are currently unused, but will be used for requesting a fast
track. Making flags in/out will allow reporting back up to client that
the request is denied.

Change-Id: Ifbee57da3632ce130551065a426577fb97b1a68d
eeca32671896739e84050da5992d5f151a1629de 01-Aug-2013 Glenn Kasten <gkasten@google.com> IAudioFlinger::openRecord track_flags_t flags is in/out

This will allow AudioFlinger to tell client it is denying a request.

Change-Id: Iff2be3ad6636371bbda9c9899a283c94620c1f06
b08ab81bab9e8cd2e3a7fff02725a387070fd078 31-Jul-2013 Glenn Kasten <gkasten@google.com> Merge "Add resampler comments and fix a typo"
34af02647b387a252fb02bab8e2cb9f7bd9c8abb 30-Jul-2013 Glenn Kasten <gkasten@google.com> Add resampler comments and fix a typo

Change-Id: Ie071673875f663de4212eed4a4dff89d51a5a915
d054c32443a493513ab63529b0c8b1aca290278c 12-Jul-2013 Glenn Kasten <gkasten@google.com> Move control block mName to createTrack() output

This is part of a series of CLs to clean up the shared memory
control block, by removing any fields that don't have to be there.

Change-Id: I6e51003a1293b6800258c31b22cff2eba42162e7
97252bb0e40a5a9b41f020163393cf6c5da10b7e 30-Jul-2013 Glenn Kasten <gkasten@google.com> Merge "AudioRecord and HAL input stream must be 16-bit PCM only"
fa319e6d918b84f93fb5457af5d1cca6421ac517 30-Jul-2013 Glenn Kasten <gkasten@google.com> Remove CC_LIKELY and CC_UNLIKELY where not needed

Only keep them in performance-sensitive code

Change-Id: Ib257ddd7bc39ce9896997ffae008c524ac743d01
2eeca1f8e18106d118f7268cb9d8597539685c5c 29-Jul-2013 Glenn Kasten <gkasten@google.com> Merge "Move local variable declarations to point of first use"
bfb1b832079bbb9426f72f3863199a54aefd02da 07-Jan-2013 Eric Laurent <elaurent@google.com> AudioFlinger: offload playback, non-blocking write

- Added specialized playback thread class for offload playback,
derived from directoutput thread.
This thread type handles specific state transitions for offloaded
tracks and offloading commands (pause/resume/drain/flush..) to audio HAL.
As opposed to other threads, does not go to standby if the track is paused.

- Added support for asynchronous write and drain operations at audio HAL.
Use a thread to handle async callback events from HAL: this avoids locking
playback thread mutex when executing the callback and cause deadlocks when
calling audio HAL functions with the playback thread mutex locked.

- Better accouting for track activity: call start/stop and release Output
methods in audio policy manager when tracks are actually added and removed
from the active tracks list.
Added a command thread in audio policy service to handle stop/release commands
asynchronously and avoid deadlocks with playback thread.

- Track terminated status is not a state anymore. This condition is othogonal
to state to permitted state transitions while terminated.

Change-Id: Id157f4b3277620568d8eace7535d9186602564de
34542acfa25c6413c87a94b6f7cc315a0c496277 26-Jun-2013 Glenn Kasten <gkasten@google.com> Move local variable declarations to point of first use

Change-Id: Ideb83dea2c3002651c34fa646753cba598e29e93
291bb6d8947c5b0c062f0895d623c529259bfa39 17-Jul-2013 Glenn Kasten <gkasten@google.com> AudioRecord and HAL input stream must be 16-bit PCM only

Currently there are 16-bit PCM assumptions in several places for capture:
- resampler API
- mRsmpInBuffer and mRsmpOutBuffer
- RecordThread::threadLoop upmix, downmix, and resampling
- possibly other places

Until those assumptions are removed, this CL enforces 16-bit PCM in both
client and server at all places where a format is checked.

Change-Id: I08b0570bff626ad0d341804825a72c14e61b4233
4182c4e2a07e2441fcd5c22eaff0ddfe7f826f61 15-Jul-2013 Glenn Kasten <gkasten@google.com> Use AudioSystem::setLowRamDevice() to configure memory

Bug: 9798886
Change-Id: I9321e3f369f1ed9429ae222e3926ebdeb012b8b0
153b9fe667e6e78e0218ff0159353097428c7657 15-Jul-2013 Glenn Kasten <gkasten@google.com> Make AudioFlinger::instantiate() more resilient when called from separate module

Bug: 8834855
Change-Id: I4cd842cdfb09d2aaaaab9df9ac3bec6179709bd3
1ab85ec401801ef9a9184650d0f5a1639b45eeb9 31-May-2013 Glenn Kasten <gkasten@google.com> Include what is needed

Remove old includes.
Header files only include other header files that they directly need themselves.

Change-Id: Ic471386808d9f42ea19ccbd59cb50a5f83a89dd0
ad3af3305f024bcbbd55c894a4995e449498e1ba 25-Mar-2013 Richard Fitzgerald <rf@opensource.wolfsonmicro.com> Public API changes for audio offload support.

NOTE: this does _not_ include all private member variables added
to classes as part of offload support. Only public/protected functions
and stubs functions/variables needed to make the changes buildable.

- isOffloadSupported() added to audio policy service
A stub implementation is required to build, this always returns false
- setParameters() added to IAudioTrack
A stub implementation is required to build, this always returns

- CBlk flag for stream end

- Change AudioSystem::getRenderPosition() to take an audio_output_t
so caller can specify which output to query

- Add AudioSystem::isOffloadSupported()
This is fully implemented down to the AudioFlinger function
AudioPolicyServer::isOffloadSupported() which is just a stub
that always returns false.

- Add EVENT_STREAM_END to AudioTrack interface.
STREAM_END is used to signal when the hardware has actually finished
playing all the data it was sent.

- Add event type enumeration to media player interface AudioSink callbacks
so that the same callback can be used to handle multiple types of
event. For offloaded tracks we also have to handle STREAM_END and
TEAR_DOWN events

- Pass audio_offload_info_t to various functions used for opening outputs,
tracks and audio players. This passes additional information about the
compressed stream down to the HAL when using offload.
For publicly-available APIs this is an optional parameter (for some of
the internal and low-level APIs around the HAL interface it is mandatory)

- Add getParameters() and setParameters() API to AudioTrack
Currently dummy implementations.

- Change AudioPlayer contructor so that it takes a set of bitflags defining what
options are required. This replaces the original bool which only specified
whether to use deep buffering.

- Changes to StageFright class definition related to handling tearing-down of
an offloaded track when we need to switch back to software decode

- Define new StageFright utility functions used for offloaded tracks
Currently dummy implementations.

- AudioFlinger changes to use extended audio_config_t.
Fills in audio_offload_info_t member if this info is passed in when
opening an output.

- libvideoeditor changes required to add the new event type parameter
to AudioSink callback functions

- libmediaplayerservice changes required to add the new event type parameter
to AudioSink callback functions

Change-Id: I3ab41138aa1083d81fe83b886a9b1021ec7320f1
Signed-off-by: Richard Fitzgerald <rf@opensource.wolfsonmicro.com>
Signed-off-by: Eric Laurent <elaurent@google.com>
7c027248e1a4ccd5b22bc4deafb03e2d87ac8f38 26-Dec-2012 Glenn Kasten <gkasten@google.com> Consistent whitespace

Change-Id: I118cce68d3b777f9ec9b6bfb70367496422a40f2
949a926cadbc961fbb649c91d76d7aee8ea4d7bd 16-Apr-2013 Glenn Kasten <gkasten@google.com> Use correct pid when running under test harness

This is a partial fix which addresses one of the root causes of this bug,
but only when running under test harness. It has no effect otherwise.

Bug: 8598539
Change-Id: I87444daef1d76b17544f331e651ba1c87893c381
c9b2e20f7c9a71e07ef398152709c76079decbcd 26-Feb-2013 Glenn Kasten <gkasten@google.com> Miscellaneous cleanup

Abbreviation framesReady to fRdy for new systrace.
Put inline const on one line.
Use local copy of mState in state.
Improve logging.
Line length 100.

Change-Id: I8201c3ce0e53fd464fd33d02544e52c342d40b68
46909e7eb074ce1b95b8a411eb71154f53f84f77 26-Feb-2013 Glenn Kasten <gkasten@google.com> Remove tee sink debugging at compile time

Bug: 8223560
Change-Id: Iddbfb06c45d43d9f20bb428215dd4094931e19a7
da6ef1320d0161b1640dc84d7a9c5a25860c3619 10-Jan-2013 Glenn Kasten <gkasten@google.com> Update tee sink

Implement rotation to reduce long-term storage use.
Implement optional per-track tee.
Dynamically enable at runtime based on property, instead of at compile-time.
Dynamic frame count not yet implemented.

Bug: 8223560
Change-Id: I3706443c6ec0cb0c6656dc288715a02ad5fea63a
59686720182dcaa1a1a4757964df38c16f1a5246 04-Feb-2013 Eric Laurent <elaurent@google.com> Merge "AudioFlinger: fix RecordThread initial device"
685ef09bcaf5de6abf2064d552296f70eaec6761 04-Feb-2013 Glenn Kasten <gkasten@google.com> Fix crash when destroying a DuplicatingThread

Bug: 8121343
Change-Id: I9b1fc56c753e465e8a08916022e52db6c3a36906
d3922f72601d82c6fc067a98916fda0bd1291c5f 02-Feb-2013 Eric Laurent <elaurent@google.com> AudioFlinger: fix RecordThread initial device

A regression was introduced when the audio device enums where
modified for a 32 bit representation: the device passed when
constructing a RecordThread was still the concatenation of input
device and output device bit fields on one 32 bit value which
is not possible anymore.

The fix consists in modifying the RecordThread constructor to accept
separate values for input and output devices.

Change-Id: I81fb5f4718428b54251e65d74b86e198ce15193e
9e58b552f51b00b3b674102876bd6c77ef3da806 19-Jan-2013 Glenn Kasten <gkasten@google.com> AudioFlinger uses media.log service for logging

Change-Id: Ia0f8204334f6b233f644d897762a18c95d936b4b
8d6cc842e8d525405c68e57fdf3bc5da0b4d7e87 03-Feb-2012 Glenn Kasten <gkasten@google.com> Remove unnecessary parameter

Just get the parameter on server side

Change-Id: I433a63104dbb257e0d862be2ab61847cb36d1c15
81784c37c61b09289654b979567a42bf73cd2b12 19-Nov-2012 Eric Laurent <elaurent@google.com> AudioFlinger files reorganization

Audioflinger.cpp and Audioflinger.h files must be split to
improve readability and maintainability.

This CL splits the files as follows:

AudioFlinger.cpp split into:
- AudioFlinger.cpp: implementation of IAudioflinger interface and global methods
- AFThreads.cpp: implementation of ThreadBase, PlaybackThread, MixerThread,
DuplicatingThread, DirectOutputThread and RecordThread.
- AFTracks.cpp: implementation of TrackBase, Track, TimedTrack, OutputTrack,
RecordTrack, TrackHandle and RecordHandle.
- AFEffects.cpp: implementation of EffectModule, EffectChain and EffectHandle.

AudioFlinger.h is modified by inline inclusion of header files containing
the declaration of complex inner classes:
- AFThreads.h: ThreadBase, PlaybackThread, MixerThread, DuplicatingThread,
DirectOutputThread and RecordThread
- AFEffects.h: EffectModule, EffectChain and EffectHandle

AFThreads.h includes the follownig headers inline:
- AFTrackBase.h: TrackBase
- AFPlaybackTracks: Track, TimedTrack, OutputTrack
- AFRecordTracks: RecordTrack

Change-Id: I512ebc3a51813ab7a4afccc9a538b18125165c4c
a42ff007a17d63df22c60dd5e5fd811ee45ca1b3 14-Nov-2012 Glenn Kasten <gkasten@google.com> Clean up channel count and channel mask

Channel count is uint32_t.
Remove redundant mask parameter to AudioTrack::createTrack_l()
and AudioRecord::openRecord_l().

Change-Id: I5dc2b18eb609b2c0dc3091994cbaa4628062c17f
aa25c0321bd4b9eb46a4d1cb4ac5fa47af30eeb4 17-Nov-2012 Glenn Kasten <gkasten@google.com> Merge ""if" statements use curly braces per media style"
77035d10a740914313500811b31a90ab948bd267 17-Nov-2012 Glenn Kasten <gkasten@google.com> Merge "Fix time vs. bytes units bug in getRenderPosition"
67ba2b6b8018ce7556cdd880dbf28d06a92ebb78 17-Nov-2012 Glenn Kasten <gkasten@google.com> Merge "Don't use control block frame count after create"
b603744e96b07b1d5bf745bde593fb2c025cefcf 14-Nov-2012 Glenn Kasten <gkasten@google.com> Don't use control block frame count after create

This is part of a series to clean up the control block.

Change-Id: I7f4cb05aef63053f8e2ab05b286d302260ef4758
d65d73c4ae74d084751b417615a78cbe7a51372a 23-Jun-2012 Glenn Kasten <gkasten@google.com> "if" statements use curly braces per media style

Change-Id: I130e7849fd1da7a0b7fe56c3c53919d26e3843b8
827e5f1237757aee78b677efcf0f7c44fd0dd3d8 02-Nov-2012 Glenn Kasten <gkasten@google.com> Don't explicitly log tid

If needed, it can be obtained with adb logcat -v threadtime

Change-Id: I91b3911d20f7bcfc3361db4052db21ff9181f1cf
26c77556efc30800466b60b3975bc35a70c8c28b 16-Nov-2012 Glenn Kasten <gkasten@google.com> Fix time vs. bytes units bug in getRenderPosition

Rename correctLatency since it requires thread to be locked.
Use size_t for byte and frame counts.

Change-Id: I178fdd18bdb823813b9563927bdff8c0d28ca5a5
aac817e6685a51843e84c23d970b3d559e74e8f6 16-Nov-2012 Glenn Kasten <gkasten@google.com> Merge "Use size_t for frame counts"
e33054eb968cbf8ccaee1b0ff0301403902deed6 14-Nov-2012 Glenn Kasten <gkasten@google.com> Use size_t for frame counts

Also fix typo: bufferCount should be frameCount.

Change-Id: Ibed539504db75ef99dc21c8ff1bf2987122063a5
4bd7e5436f9c308503d72e80804fb5637fda1584 15-Nov-2012 Glenn Kasten <gkasten@google.com> Static AudioTrack plays twice initially

Bug: 7528721
Change-Id: I10bc16a26f33dba6572b730a170cb3bf00e68e30
60a839204713e0f8258d082af83262b1eb33a6c3 21-Jun-2012 Glenn Kasten <gkasten@google.com> Clean up frame size in AudioTrack and AudioFlinger

TrackBase::mFrameSize, mChannelMask, and mChannelCount are now const.
Use TrackBase::mFrameSize instead of re-calculating frame size.
AudioFlinger only sees 16-bit PCM format, conversion from 8-bit is
now entirely on the client side. Previously a small part of the
responsibility was on server side also.
size_t is unsigned, so use %u in logs.
Fix theoretical bug where TrackBase constructor was over-allocating space
for non-linear AudioTrack or 8-bit PCM AudioRecord (probably benign).

Change-Id: I7cbbba0bf4dba29ea751d8af341ab8e5cbbdc206
3b16c766d1ae2cfd8487e8ffb2b23936fc0a8e17 14-Nov-2012 Glenn Kasten <gkasten@google.com> Use uint32_t for sample rate

Change-Id: Ie240b48fb54b08359f69ecd4e5f8bda3d15cbe80
9f2016d9adfb4f88fa0bbfcfa5954f79160db595 13-Nov-2012 Glenn Kasten <gkasten@google.com> Rename TrackBase::mFrameCount to mStepCount

This prepares for adding a new field TrackBase::mFrameCount
with a different meaning.

Change-Id: I6bbe2c59f2a882be57caeec2e2e06f439a0e9e83
83a0382dc17364567667a4e6135db43f5bd92efc 12-Nov-2012 Glenn Kasten <gkasten@google.com> Move frame size out of the control block

This is part of a series to clean up the control block.

Change-Id: Ifab1c42ac0f8be704e571b292713cd2250d12a3f
b929e417853694e37aba1ef4399f188987b709d9 08-Nov-2012 Glenn Kasten <gkasten@google.com> Move buffers pointer out of the control block

This is part of a series to clean up the control block.

Change-Id: Ie474557db7cb360f2d9a0f11600a68f5a3d46f07
864585df53eb97c31e77b3ad7c0d89e4f9b42588 07-Nov-2012 Glenn Kasten <gkasten@google.com> Remove CBLK_DIRECTION from control block flags

This is part of a series to clean up the control block.

Change-Id: I0265fece3247356b585d4d48fbda6f37aea8a851
e0b07179a48ee50fda931d2aa1b3c751d167e4d7 07-Nov-2012 Glenn Kasten <gkasten@google.com> Remove CBLK_FAST from control block flags

This is part of a series to clean up the control block.

Change-Id: Ic881a3560d9547cb63fcc0cefec87aa3da480e0d
287fedb1b1430f138c1f583869b10294773945be 05-Nov-2012 Glenn Kasten <gkasten@google.com> Merge duplicate code in TrackBase::TrackBase()

Change-Id: Id8a7db4d94888796a9dcbed4cac99941705cd174
9c5fdd83f9b9f49be35107971feb33528d60b945 05-Nov-2012 Glenn Kasten <gkasten@google.com> Simplify control block flag names

Use only one symbol per flag

Change-Id: Ia3582e2134abd60c896d11337face65383e79c7c
85ab62c4b433df3f1a9826bed1c9bec07a86c750 01-Nov-2012 Glenn Kasten <gkasten@google.com> Line length 100

Change-Id: Ib28fd7b9ce951a6933f006e7f8812ba617625530
d06785bebf7e43d4a011b62a252771373ada910c 30-Sep-2012 Glenn Kasten <gkasten@google.com> Save copy of mic input, disabled by default

Change-Id: I4f5e95a5ddf016530d1b2747a0a5ca0962caabda
26dd66e8ea7a1abf28c33196fc77822f68a718af 19-Oct-2012 Glenn Kasten <gkasten@google.com> Use ALOGVV instead of commented ALOGV

Change-Id: I17bdb5274877760c7edaa31416020d349082e593
291f824e02ff517a34cfe50220b4e2b402ee998d 19-Oct-2012 Glenn Kasten <gkasten@google.com> Remove active track when thread goes to standby

Bug: 7369232
Change-Id: I7ff9f525dad4be0aef562a53015b06ee7d3d50f1
a045dcafd2b77036210f5b72e79d745ad4c1b848 16-Oct-2012 Jean-Michel Trivi <jmtrivi@google.com> Fix track estimation for presentation complete

Audio tracks were not using the right latency estimation for
signalling the completion of their presetation. This caused
the synchronization mechanism between playback and record to be
off, and a synchronized recording would contain some of the audio
that was meant to be over once recording would start.
Use the playback thread's latency reporting which takes the audio
pipe into account.

Bug 7237669

Change-Id: I23a907a53ad0b0d68d246789ec595a77a79fced5
087dd8e7232e4c009e9121ab7e8c37985522c9ad 27-Sep-2012 Glenn Kasten <gkasten@google.com> Disable audio watchdog

It's not critical, and is wasting power

Bug: 7241714
Change-Id: I6ad4375f0000c92529688723dbe0ff0caa809c5d
2bfc6b42b3733c12485dd51ed95191956abc3e4e 28-Sep-2012 Jean-Michel Trivi <jmtrivi@google.com> bug 7253033 clean up before closing an output

An output can only be closed if there is no lock contention that
prevents ThreadBase::exit() from being blocked. If an output
device is waiting for an operation to complete (here a write
in the remote_submix module, because the pipe is full), signal
the module that it's entering the "exiting" state.

Change-Id: I8248add60da543e90c25a4c809866cdb26255651
842c5d9553f3f8e97d04ed1bd0d37e4851240654 26-Sep-2012 Glenn Kasten <gkasten@google.com> Revert "Don't wait for presentation complete if terminated"

This reverts commit 44cda3a4e7ca3de0db9cb49145def3803b03ebb4

Change-Id: I7fd29b77690dab057ac966a42fb198b2772f092c
cc0f1cfb69ce8b8985fc2c0984847a06a13ad22d 24-Sep-2012 Glenn Kasten <gkasten@google.com> Implement android.media.AudioManager.getProperty()

Bug: 6635041
Change-Id: I3386a4a6c226bc4eceaf65556119e4fb15f73224
b6ba2fd0d61a4844c153e17843fbe2c841c4bf57 25-Sep-2012 Eric Laurent <elaurent@google.com> audioflinger: improve record start and thread exit

Use broadcast() instead of signal() on the
thread wake up condition when starting record or requesting thread
exit to make sure that if another thread is waiting for the same
condition (e.g binder thread calling setParameters()) the mixer
thread will be woken up.

Bug 7184317.

Change-Id: I3154a4509ca7af6ffae5236e522b0fab8e75ed06
1afc26db11b71c43f63a0f72a45a803f1a7910dd 24-Sep-2012 Eric Laurent <elaurent@google.com> fix end of track presentation on suspended output

The code detecting the end of an audio track presentation before
removing it from the active track list is based on the
count of audio frames sent to audio HAL. When an output stream
is suspended (e.g. A2DP when SCO is active), this count does not
change and a track in stopped state will never be removed from
active track list causing the mixer thread to never release
the wake lock.

The fix consists in incrementing the audio HAL frame count even
if the output is suspended.

Also fix a problem in getRenderPosition() when the output is suspended.

Bug 7167534.

Change-Id: I3be836cbbea29b65dc087199cac6a1cd84c0a41d
896adcd3ae6a1c7010e526327eff54e16179987b 13-Sep-2012 Eric Laurent <elaurent@google.com> audioflinger: send priority request from a thread

When creating a fast AudioTrack, a request is sent to SchedulingPolicyService
to elevate the requesting thread priority. This generates a binder
call into system_server process and to a JAVA service via JNI.
If the thread from which the track was created is in the system_server
process and does not have the "can call java" attribute, a crash occurs because
the binder optimization reuses the same thread to process the returning binder
call and no JNI env is present.

The fix consists in sending the priority change request from the AudioFlinger
mixer thread, not from the binder thread.

This also reverts the workaround in commit 73431968

Bug 7126707.

Change-Id: I3347adf71ffbb56ed8436506d4357eab693078a3
4362f5300162ed55f56cf167eccf7f2e5b89d435 13-Sep-2012 Jean-Michel Trivi <jmtrivi@google.com> Handle audio HAL returning 0 bytes in record thread

Enter standby when HAL returns an error, but also consider 0 bytes
returned as NOT_ENOUGH_DATA.

Change-Id: Ica83142310e9c176f936e0440571a6034cbc575f
52762410dbc9189cd92a4094a1dbd4cfe8e71cb6 13-Sep-2012 Jean-Michel Trivi <jmtrivi@google.com> Don't deadlock on AudioRecord start when reads return 0

When calling start() on an AudioRecord with a HAL that
returns 0 on a read() operation, the start blocking
condition was never unblocked.
Add a boolean to track the first read operation so the returned
number of bytes (mBytesRead) is only evaluated after that
first read.

Change-Id: I8c735a00d48cd6a0da467ccdf75d3616b38f6afa
fe3156ec6fd9fa57dde913fd8567530d095a6550 11-Sep-2012 Jean-Michel Trivi <jmtrivi@google.com> Communicate audio session ID to downmixer

The audio downmixer effect might need the audio session Id, pass it
from the track creation in AudioFlinger to the downmix effect
creation in AudioMixer.

Change-Id: I5e29540542ae89cf4a0cdb537b3e67f04442a20a
f1c04f952916cf70407051c9f824ab84fb2b6e09 28-Aug-2012 Eric Laurent <elaurent@google.com> audioflinger: changes for new audio devices enums

The ThreadBase class now has a separate member for input
and output devices (mInDevice, mOutDevice).

Only query get_supported_devices() from audio HAL if the function
is exposed and if the audio policy manager did not specify the
audio module to open.

Also fixed bug in AEC preprocessing that would reset
to default output device when an input device was given.

Change-Id: I19d4d06aeb920b068e3ef31e6e6be6345ce5d67a
57b2dd1e78af53115985f18d31ec5421c9da947e 01-Sep-2012 Eric Laurent <elaurent@google.com> AudioFlinger: send audio source to audio effects

Added support for EFFECT_CMD_SET_AUDIO_SOURCE audio effect
command to inform preprocessings of current audio source
selection for capture.

Change-Id: Ib2418a9aa8114e8457fe828ecd43b230ed86cdd6
c3ae93f21280859086ae371428ffd32f39e76d50 30-Jul-2012 Glenn Kasten <gkasten@google.com> Update audio comments

Change-Id: Ie7504d0ddb252f7e4d4f99ed0b44cfc7b1049816
7aa25591769685ae0e8349b3ca3534c724484375 03-Aug-2012 Glenn Kasten <gkasten@google.com> Remove dead code

RecordThread::isValidSyncEvent() returns false, so most of
RecordThread::setSyncEvent() is never executed.

Change-Id: I0cf848beb46a367a45126d2df3073c5afa2ca59c
2dd4bdd715f586d4d30cf90cc6fc2bbfbce60fe0 29-Aug-2012 Glenn Kasten <gkasten@google.com> Move libnbaio out of AudioFlinger

libnbaio is now a separate shared library from AudioFlinger, rather
than a static library used only by AudioFlinger.

AudioBufferProvider interface is now also independent of AudioFlinger,
moved to include/media/

Change-Id: I9bb62ffbc38d42a38b0af76e66da5e9ab1e0e21b
106e8a42038f9e90d5ff97f8ab6f1a42258bde9e 02-Aug-2012 Glenn Kasten <gkasten@google.com> const methods

Change-Id: I92e32ee16274c032c9d0ce910676be2a7fa52471
0dbb356050d0db9e0043dd43045c1864a933332b 03-Aug-2012 Glenn Kasten <gkasten@google.com> Simplify AudioFlinger::PlaybackThread::isValidSyncEvent()

Change-Id: I3e4af69b929d4ca04afaac26c7e41c89fce25b9c
d23eedca9b5a1812891c05d89850ab7ee707040d 02-Aug-2012 Glenn Kasten <gkasten@google.com> Discard setSyncEvent() return value

setSyncEvent() returns a status_t which is sometimes ignored.
Emphasize this is intentional by casting to void.

Change-Id: Ic614988347cba36bd2504d7ad321594a355b0d9d
3ed292031dc50c56110cdadb1e3778117e3be76a 08-Aug-2012 Glenn Kasten <gkasten@google.com> Replace hard-coded "2" by a constant and comment

Bug: 6679403
Change-Id: I6c2701f9afedc26540dfad0b4e23348bbc4cb01a
2c3b2da3049627264b7c6b449a1622f002210f03 03-Aug-2012 John Grossman <johngro@google.com> AudioFlinger: fix timed audio

(cherry picked from commit e20ac92c564a2f4e8123885807abdf0a78de0dd7)

> AudioFlinger: fix timed audio
> Addresses Bug 6900517.
> Finish up support for timed audio in the new FastMixer world. Pay special
> attention to remaining lock-less and voluntary yield free on the FastMixer
> thread. This fixes audio playback for Q on JB.
> Change-Id: Iaf815e58a1b1d0a0190051794bec8dc5c9231785
> Signed-off-by: John Grossman <johngro@google.com>

Change-Id: I9bd687acc345a05867af48e71116690fdb0ce1b5
Signed-off-by: John Grossman <johngro@google.com>
ee578c0330319f04a48bccbdb26b53fea0388d04 24-Jul-2012 John Grossman <johngro@google.com> AudioFlinger: Better handling for master volume/mute

(cherry picked from commit 93d906837e0e89aa1d9c913ab2b531b809f9bb9e)

> AudioFlinger: Better handling for master volume/mute
> Changes to address bug 6842827.
> When a HAL is loaded, cache whether or not the HAL supports
> set_master_volume/mute in the AudioHwDevice structure. Store an
> AudioHwDevice in AudioStream(In|Out) structures instead of just an
> audio_he_device_t. This give threads (PlaybackThreads in
> particular) access to the cached capabilities.
> When setting master volume/mute, change the system to always set the
> setting on all HAL which support it and also to set the setting on all
> PlaybackThreads. Change PlaybackThreads to apply the setting at the
> in SW mix stage of the pipeline if its assigned HAL does not support
> the setting, or to ignore the setting of the assigned HAL does support
> it.
> Change-Id: Ia14137a30b4c3ee6f2d7ddcc8cba87bf5eec87f4
> Signed-off-by: John Grossman <johngro@google.com>

Change-Id: Icb6bc13764e100a2003eb1dee2231132ab287d98
Signed-off-by: John Grossman <johngro@google.com>
d8f178d613821c3f61a5c5e391eb275339e526a9 20-Jul-2012 John Grossman <johngro@google.com> Change audio flinger to user HAL master mute if available

(cherry picked from commit 91de9b56282d126ffb36344266af5fee3cefcfdd)

> Change audio flinger to user HAL master mute if available
> Hand merge from ics-aah
> > Change audio flinger to user HAL master mute if available: DO NOT MERGE
> >
> > Replicate the pattern used for HAL master volume support to make use
> > of master mute support if the HAL supports it. This is part of the
> > change needed to address bug 6828363. Because of the divergences
> > between ICS and master, this change will need to be merged by hand.
> >
> > Signed-off-by: John Grossman <johngro@google.com>
> > Change-Id: I6d83be524021d273d093bcb117b8f2fe57c23685
> Change-Id: I32280582905c969aaec2bb166ec5c61df82d737a
> Signed-off-by: John Grossman <johngro@google.com>

Change-Id: I5cd709187221d307fe25c5117ccaadca5f6b197b
Signed-off-by: John Grossman <johngro@google.com>
44cda3a4e7ca3de0db9cb49145def3803b03ebb4 01-Aug-2012 Glenn Kasten <gkasten@google.com> Don't wait for presentation complete if terminated

Change-Id: Ia04cf6c620693457dca87b4ffea5dd0fe71efdce
510a3d6b8018a77683dac466127ffd0af34bef6e 16-Jul-2012 Glenn Kasten <gkasten@google.com> Start adding support for multiple record tracks

Replace single mTrack by vector mTracks.
Destroy record tracks similarly to playback tracks.
Dump all record tracks, in addition to the active record track.

Change-Id: I503f10b51928b6b92698fe1c51a9ddd3215df1f4
0ec23ce0d1ff79566c402bc30df3074f6e25a22b 10-Jul-2012 Glenn Kasten <gkasten@google.com> Clean up start() parameters

Document where int is used instead of AudioSystem::sync_event_t
(probably because of a header file dependency).
TrackBase::start() and RecordTrack::start() don't need default parameters.

Change-Id: I82f4a4d078be900f3aa4bd926697e32f5ed68ec8
e4e2a37dbe2a4d923232305549101f779a2e3638 23-Jul-2012 Glenn Kasten <gkasten@google.com> Extract methods to enter standby and standby mode

Also move initial standby from to threadLoop to avoid a race condition.

Change-Id: I65afca83c36fb41b983b3b1d3dab35d4029560e3
0a7af18d0308295405491f86603e3d119450aba0 10-Jul-2012 Glenn Kasten <gkasten@google.com> Use valueAt instead of editValueAt when possible

Change-Id: I885b169f4b176a6b5c2ca9a534214b4ffff1700e
1d491ff06f4b9c90ff24fe953b90d0843eaf1c04 16-Jul-2012 Glenn Kasten <gkasten@google.com> Fix races in AudioRecord stop()

Change-Id: Id0ac1915f57fef4a938c7f90989c1162a8b6c51c
69d799679c8c0308e42057e7b5ad63a7ae806480 19-Jul-2012 Glenn Kasten <gkasten@google.com> Use upmix/downmix utility routines

Change-Id: I9ae2ec938fb695ec576ea008a42205325af7bbf1
e65c89113232d070dd9153c54ca19301bca7a162 21-Jul-2012 Eric Laurent <elaurent@google.com> fix audio effect not destroyed when needed.

commit a5f44eba contained an error which made that audio effect
modules where not destroyed but left in the destroyed state
rendering them unuseable after being released.

Bug 6805168.

Change-Id: Ia4e683b3c970ffd01846c482fde73d799ff219de
33e6e35b03a726e35203e97550f32154c91d5f13 17-Jul-2012 Glenn Kasten <gkasten@google.com> Miscellaneous audio record fixes

Call AudioSystem::stopInput() if exitPending() after wait() returns.

Acquire lock before clearing mActiveThread.

Change-Id: Ia55e4c4b3accc65ad5479cbdc094fd919152af9f
cd2d61016527bf48bd2e9a920bb3fdbb875eb3e4 19-Jul-2012 Glenn Kasten <gkasten@google.com> Use constructor to initialize instead of memcpy

Also don't check for thread parameter as it's always non-NULL

Change-Id: Id23ded1370556ef3f76f81f5f0c6fa644bcba681
be5f05e0fdfc4e3799653702187861a2afa072ee 19-Jul-2012 Glenn Kasten <gkasten@google.com> Internal dump methods return void not status_t

Only the IAudioFlinger::dump() needs to return a status_t.

Change-Id: Iffeb2a7db4846df850b6b2ed960276f1fd75dba0
5ad92f620fbbb6a8281f10169a23d38e3601e07a 19-Jul-2012 Glenn Kasten <gkasten@google.com> Revert 94479fd5405642c67efd14cebe722feb9cbe6e77

Change-Id: I5ca78d5462badf541868785b2ba2e3f6d0cf492a
bb4350d3b9e9485ae59e084de270f86aecef8066 04-Jul-2012 Glenn Kasten <gkasten@google.com> Use audio_devices_t more places

Change-Id: Id0ace02ca6f480a6c46e11880acf6cdc66d83184
a189a6883ee55cf62da1d7bf5bf5a8ab501938a4 20-Feb-2012 Glenn Kasten <gkasten@google.com> Use struct assignment instead of explicit memcpy

for POD structs effect_descriptor_t and effect_config_t

Change-Id: Ib2fc47f85fb65ed91b0abb1f87217c49b5eb571d
fd4e20c226eca185fc789de761beae64855bfbbb 04-Jun-2012 Glenn Kasten <gkasten@google.com> Run audio at priorities 2 and 3 above kernel 1

Also run the watchdog at same priority as the fast mixer.
requestPriority() originally used only the caller's pid to decide which
cgroup to assign, but in the future it might look at the priority also.
So it's safer to use same priority as the fast mixer to be sure we
run in the same cgroup.

Bug: 6461925
Change-Id: Ia59c93e4b22dacbb6746bfa6ad491be7b72f2b8d
d96c5724818fb47917bb5e7abe37799735e1ec0e 25-Apr-2012 Glenn Kasten <gkasten@google.com> Don't call virtual methods in destructor

The result of calling virtual methods from a destructor is undefined.

Change-Id: I0fd4a19626e5ae564a60b753315b5f6c4b8d1f2c
1ea6d23396118a9cfe912b7b8a4e6f231e318ea2 09-Jul-2012 Glenn Kasten <gkasten@google.com> Use atomic ops for thread suspend count

There was a theoretical but unlikely race if two binder threads
executed suspend() or restore() concurrently. Also added comments.

Change-Id: I0908acc810b83bdd66455b27ca3429de1662a2cd
1879fff068422852c1483dcf8365c2ff0e2fadfc 12-Jul-2012 Glenn Kasten <gkasten@google.com> Add tid parameter to IAudioFlinger::openRecord

Not yet implemented

Change-Id: I35523fb15ad71727ecc9f4bb870f07e4b7397dc4
bf04a5d7f287fc712e0ed91849dc85c90c1e182d 12-Jul-2012 Glenn Kasten <gkasten@google.com> Simplify AudioRecord::getInputFramesLost()

This also fixes a benign race in reading mActive without a lock.

Change-Id: I19e953d4f275e5c266ca1ca3fece7b6c02ad1707
39c54f68804c1ce5c85ec588f3c2c63447a807b4 09-Mar-2012 Glenn Kasten <gkasten@google.com> Remove dead code

Change-Id: If22a6c4e572b0734eba0c5a7ce29a2c61c581e5d
4fe1ec4f40b58abff6cec147aa786cb65698161a 28-Feb-2012 Glenn Kasten <gkasten@google.com> Fix check for invalid channel count

Change-Id: Id9e3dce0e3d5971786212d3f70e17a17e32ce92b
04270daf50f0c602d7c57a257a693e68246cbeb7 10-Jul-2012 Glenn Kasten <gkasten@google.com> Record overflow cleanup

Add comments and rename one method for clarity

Change-Id: I04a9147e46e88a072256c0211b112d52202419e2
254af180475346b6186b49c297f340c9c4817511 03-Jul-2012 Glenn Kasten <gkasten@google.com> Use audio_channel_mask_t more places

Use it in AudioSystem::getOutput(), AudioSystem::getInput(),
IAudioPolicyService::getOutput(), IAudioPolicyService::getInput(),
and various other places in AudioFlinger.

Not done: AudioTrack and OutputDescriptor.

Change-Id: I70e83455820bd8f05dafd30c63d636c6a47cd172
9f34a36d9cdb9595c288e50ffe00da038bc8abb9 21-Mar-2012 Glenn Kasten <gkasten@google.com> Whitespace and indentation

Change-Id: I424052b4ff9218147a5cfc8e6dcd67fe8105d229
7d6c35bf132a46c0a8a9826491882495fc98bd8c 02-Jul-2012 Glenn Kasten <gkasten@google.com> Move constant initializations from onFirstRef() to constructor

Change-Id: I57f55b0bd1edee105c58c3a055f95f1e4a2c9646
6648821933dc06c0b09ab2c8b32135edddcd4291 21-Jun-2012 Glenn Kasten <gkasten@google.com> AudioFlinger::getBuffer() always returns non-NULL

Change-Id: I543d3db507597cacbfdad5d9ea71732137fe54fb
94479fd5405642c67efd14cebe722feb9cbe6e77 10-Jul-2012 Glenn Kasten <gkasten@google.com> Fix build

Revert after system/core audio_devices_t is submitted

Change-Id: I5a8ee1a7b711e834501e927f41c62efa6a6600b6
01542f2704f39956da09ae2840e192dab760091f 02-Jul-2012 Glenn Kasten <gkasten@google.com> Only write to mDevice once

This fixes a bug where readers might see intermediate values.
Also add comments about how mStandby and mDevice are used.

Change-Id: Idc84e56c21381a45137a2ca5ff9c57d437201869
c1dae24a08b67b98e18e4239d4f3a74d600d353c 03-Jul-2012 Glenn Kasten <gkasten@google.com> Remove debug code HAVE_REQUEST_PRIORITY and SOAKER

Change-Id: I73a2afe72d8acb53e57e6b4e6fb5133e22b7875a
a5f44ebaf58911805b4fb7fb479b19fd89d2e39b 25-Jun-2012 Eric Laurent <elaurent@google.com> audioflinger: fix effect disconnect deadlock

Fix possible deadlock when several EffectHandles on the same
EffectModule are destroyed simultaneously:
A wp on an EffectHandle should not be promoted to a local sp
with ThreadBase mutex held as the EffectHandle destructor can be
called when the sp gets out of scope which will call
ThreadBase::disconnectEffect() and try to acquire the mutex.

Use raw pointers instead of weak pointers for the list of handles
on an EffectModule.

Bug 6679606.

Change-Id: Ice8b602fb03a7d363c44ce3dced8a53540d96270
dd8104cc5367262f0e5f13df4e79f131e8d560bb 02-Jul-2012 Glenn Kasten <gkasten@google.com> Use audio_channel_mask_t more consistently

In IAudioFlinger::createTrack() and IAudioFlinger::openRecord(),
declare input parameter to use correct type audio_channel_mask_t.

In IAudioFlinger::getInputBufferSize(), input parameter is now channel mask
instead of channel count.

Remove unused IAudioFlinger::channelCount(audio_io_handle_t).

In AudioRecord::getMinFrameCount() and AudioSystem::getInputBufferSize(),
input parameter is channel mask instead of channel count.

Change-Id: Ib2f1c29bea70f016b3cfce83942ba292190ac965
f1da96d8cf60842538e00a9c950cc451f7da2c10 03-Jul-2012 Glenn Kasten <gkasten@google.com> Remove longStandbyExit

It was never set (the assignment was within an "if" that was never true).

Change-Id: I01cc68e9df6b190eece621b2aa9858b4361880ce
415fa7599f48494f99206b8d6e1974abb52c5923 03-Jul-2012 Glenn Kasten <gkasten@google.com> Fix uninitialized field EffectModule::mPinned

Also mark EffectModule::mId and EffectModule::mSessionId const, and
document the initialization of other fields in EffectModule.

Change-Id: Ic1ca008e75e9b5924743ffc35bef80057f3a0669
d5903ec1332630f2992a6f0d5ca69d13a185c665 18-Mar-2012 Glenn Kasten <gkasten@google.com> Compare sp<> to 0 and raw pointers to NULL

Change-Id: I50ff8a010d349d1d7e3dffa04a6331814c2128b0
a01992a0675a06df7d0bbe7b977207dd0c33fdc7 02-Jul-2012 Eric Laurent <elaurent@google.com> am dbbd5b86: am 109347d4: audioflinger: fix regression in attachAuxEffect().

* commit 'dbbd5b860a3a26bea3376410f75f27530d9cd10b':
audioflinger: fix regression in attachAuxEffect().
109347d421413303eb1678dd9e2aa9d40acf89d2 02-Jul-2012 Eric Laurent <elaurent@google.com> audioflinger: fix regression in attachAuxEffect().

Commit 717e1286 introduced a regression in PlaybackThread::Track::attachAuxEffect()
when called with an effect ID of 0 to detach the auxiliary effect.

It is normal in this case that AudioFlinger::getEffectThread_l() returns 0.

Bug 6768757.

Change-Id: I7430bd1aad2f68da38f7c3e4794e7ad657bfc6be
dbabf8a7dfe3aa8bf0ed169220d2009d5891fef2 01-Jul-2012 Eric Laurent <elaurent@google.com> am 651f9e7c: am 717e1286: audioflinger: fix auxiliary effect attachment

* commit '651f9e7c972b58a49066081187161268bcf9237a':
audioflinger: fix auxiliary effect attachment
717e128691f083a9469a1d0e363ac6ecd5c65d58 30-Jun-2012 Eric Laurent <elaurent@google.com> audioflinger: fix auxiliary effect attachment

Auxiliary effects (Reverb) are global effects and as such follow
the default rule which is to attach them to the output thread that
handles music streams by default. This causes a problem when several
threads are eligible to handle music streams as tracks can be attached
to either thread based on criteria unknown when teh effect is created.

The fix consists in moving the auxiliary effect if necessary when an
AudioTrack is attached to it and this track is not on the same
output thread.

Bug 6608561.

Change-Id: Ib32c3cabc731b2046aba728be1771982999c6069
22167855ff9af7b13fda669ca27c67a037a7d585 20-Jun-2012 Eric Laurent <elaurent@google.com> audioflinger: fix setStreamOutput()

AudioFlinger::setStreamOutput() should also work for direct outputs.
Also ignore the destination output specified to match the expected
behavior which is to invalidate all tracks using the specified stream
type so that they can be re created on the correct ouput thread.

Do not send STREAM_CONFIG_CHANGED event wich is ignored by AudioSystem
anyway since the stream to output cache has been removed.

Change-Id: I13d9d47922923b630dd755717875424c16be4637
362ebcbf100f7fccd37551c77e67c4faa7241b63 24-May-2012 Glenn Kasten <gkasten@google.com> DO NOT MERGE Remove log spam for fast track denied

Bug: 6531054
Change-Id: Iedf58e810a157aae88b5900da27c81054c437058
1d6573032ecde54a466ca32951e101b41a05c797 14-Jun-2012 Glenn Kasten <gkasten@google.com> am 48a0bfa6: am 49dd5cf3: Merge "Log track name on obtain/releaseBuffer warnings" into jb-dev

* commit '48a0bfa6f731386f2794ff36d6677d56e98fc6ea':
Log track name on obtain/releaseBuffer warnings
0c9d26d187017f7fb028ab52a0fbc6395142faa4 31-May-2012 Glenn Kasten <gkasten@google.com> Log track name on obtain/releaseBuffer warnings

This should help diagnose problems by allowing us to correlate
the logs with the dumpsys media.audio_flinger output.

Change-Id: I8c7c592b4f87d13b0f29c66ce7a2f301a0f063c9
8cc3651c04e48b755dcc579bfa4f9a7e9391d6e7 12-Jun-2012 Glenn Kasten <gkasten@google.com> am 57d9b728: am c15d6657: Add audio watchdog thread

* commit '57d9b72812d25dff1c33e37b8475a469accd0919':
Add audio watchdog thread
c15d6657a17d7cef91f800f40d11760e2e7340af 30-May-2012 Glenn Kasten <gkasten@google.com> Add audio watchdog thread

Change-Id: I4ed62087bd6554179abb8258d2da606050e762c0
796078f96c8a15fefcea70e666b22ea67cc35301 08-Jun-2012 Glenn Kasten <gkasten@google.com> am ea5008d8: am 28ed2f93: Reduce underruns in screen off, esp. with EQ

* commit 'ea5008d8abfdf1479b4efa266cdb7c842d168aa9':
Reduce underruns in screen off, esp. with EQ
28ed2f93324988767b5658eba7c1fa781a275183 07-Jun-2012 Glenn Kasten <gkasten@google.com> Reduce underruns in screen off, esp. with EQ

Add MonoPipe APIs to specify setpoint.
Use screen state to configure pipe setpoint.
Fix a long-standing bug where pipe sleep time was excessive,
which interacted poorly with governor and low clock frequencies.
Now it deducts the elapsed time since last write(),
which was significant when there was EQ and low clock frequency.

Bug: 6618373
Change-Id: I6f3b0072c2244aeb033ef0795ad164491a164ff5
bdbf0c6f1a11d6fd9b71aa765f7de39e248557ba 08-Jun-2012 Eric Laurent <elaurent@google.com> am 98e2e030: am a4f7e0e9: audioflinger: fix duplicating thread standby

* commit '98e2e030231ce99a4796d34d39a7517078d6735e':
audioflinger: fix duplicating thread standby
a4f7e0e9a0e92a063f1b3a08988cf46e2cf1fa94 08-Jun-2012 Eric Laurent <elaurent@google.com> audioflinger: fix duplicating thread standby

The code that waits for a track presentation to be complete
before disabling it caused a regression for duplicating threads.
Because of the way output tracks activity is managed, the number
of frames output by the duplicating thread would never
reach the target set for a track to be considered presented.
The track would not be removed from active list and the thread would
not go to standby and keep its wakelock held.

Bug 6606922.

Change-Id: I4b46b420ac4cbf79a86b6791ae6589d407b01c92
349d79668ea4ca078400995c70d5d3201e8d9ea1 07-Jun-2012 Marco Nelissen <marcone@google.com> am d89dea16: am e35a55fb: Merge "Take latency and current time into account for visualization" into jb-dev

* commit 'd89dea161ff3c3da515c02928cad4a9c73b23312':
Take latency and current time into account for visualization
f06c2ed50e1db871ae9eb2bd15a196064f8c278c 06-Jun-2012 Marco Nelissen <marcone@google.com> Take latency and current time into account for visualization

Buffer more data, and return the data that is currently being
output from the audio output, to ensure that visualizations are
smooth and responsive even when the audio output has a large
latency and/or large buffers.

Change-Id: I401637f01be7600b3c594a55c869036c13b206c0
a88ed026402d92d699c336aa11267616007e4a9d 05-Jun-2012 Eric Laurent <elaurent@google.com> am 717f9b73: am 67c0a58e: audioflinger: various fixes on direct output

* commit '717f9b7392b0fc3ba15b018c923b85e64c0662b5':
audioflinger: various fixes on direct output
67c0a58e05f4c19d4a6f01fe6f06267d57b49305 02-May-2012 Eric Laurent <elaurent@google.com> audioflinger: various fixes on direct output

Various fixes in direct output playback thread implementation:
- threadLoop_write() was broken for playback threads that do not
use a pipe sink.
- output buffer size calculation was hard coded for stereo.
- removed software volume that was implemented for PCM stereo
format only: the audio HAL has to implement volume if needed
for direct outputs.

Change-Id: If211b4489be9af395435707b8cf0388cce1347b2
b86f92d552c391f5d2471bd4f979135be2578578 05-Jun-2012 Eric Laurent <elaurent@google.com> am e506084e: am ab9071b8: audioflinger: fix active sleep time calculation.

* commit 'e506084e1c22f8f1797b9dc3eb789a699efd45c3':
audioflinger: fix active sleep time calculation.
ab9071b8d1b375418eb797c9a790da71de644344 04-Jun-2012 Eric Laurent <elaurent@google.com> audioflinger: fix active sleep time calculation.

When an audioTrack underruns, the audioflinger mixer thread
sleeps for a certain time to give the app a chance to recover.
This time is based on the reported audio HAL latency.
Some audio HALs implementing deep buffering have a variable
latency and this creates a problem if the sleep time is cached
when the output stream is opened and not updated afterwards.

This change derives the active sleep time from the mix buffer
framecount instead of the latency. This is more conservative
but works for variable latency.

Bug 6588525.

Change-Id: Ia892fc290fe06f836565c3ae15f7a2ce026c88c6
24a2fd0113da60785ce5af5dd905f8aaf9e0f0a1 04-Jun-2012 Glenn Kasten <gkasten@google.com> am f335f182: am 39993085: State queue dump

* commit 'f335f182e4b50249ac34b41da3566ddb016cc816':
State queue dump
5385b7b0f5d922ee38f8a54f11ee4462ef4b5e29 04-Jun-2012 Glenn Kasten <gkasten@google.com> am 2c00676c: am 1295bb4d: Fast track dumpsys

* commit '2c00676cd34d78460ad610a4a4fd7a68544a7b7d':
Fast track dumpsys
399930859a75d806ce0ef124ac22025ae4ef0549 31-May-2012 Glenn Kasten <gkasten@google.com> State queue dump

Bug: 6591648
Change-Id: Iac75e5ea64e86640b3d890c46a636641b9733c6d
510ba8b812d88f62968a2c9b0b638fff6d99ee84 03-Jun-2012 Glenn Kasten <gkasten@google.com> am f45dc2f1: am bf0d21fb: Count underruns for normal tracks also

* commit 'f45dc2f1751d9ac19826b99fab0b226f5c84570a':
Count underruns for normal tracks also
1295bb4dcff7b29c75cd23746816df12a871d72c 31-May-2012 Glenn Kasten <gkasten@google.com> Fast track dumpsys

Bug: 6591648
Change-Id: I696f51c682e7233ba690d97da26012084989b412
bf0d21fb1310e8677caa53b90e8c3aecebc7fc13 31-May-2012 Glenn Kasten <gkasten@google.com> Count underruns for normal tracks also

Bug: 6591648
Change-Id: Iff9cabe392bb2ce97062603adb9c9dc7aa4170d5
35d7bfc359b3aa87ade92d1ab55c6992418cad48 01-Jun-2012 Glenn Kasten <gkasten@google.com> am 92e5ee95: am 7dc5b165: Merge "Fix fast track leak if out of normal track names" into jb-dev

* commit '92e5ee9548542513791a70c81e0cd3fd70397269':
Fix fast track leak if out of normal track names
893a05479c96f911d02beb0443da3ed6508143a7 30-May-2012 Glenn Kasten <gkasten@google.com> Fix fast track leak if out of normal track names

Bug: 6580402
Change-Id: I3ac7f012062c35833147f47ba822eb4bf532a824
529e888738a91ca70cbdeeabd982f8fb2947780c 30-May-2012 Eric Laurent <elaurent@google.com> am 8c07f759: am 3bdb4fbf: Merge "audioflinger: fix effect problem during underrun" into jb-dev

* commit '8c07f7599a757fe51dc54253c480067cf01f13d3':
audioflinger: fix effect problem during underrun
91b14c4c144d0cc957a427cffc02ba10d0615677 30-May-2012 Eric Laurent <elaurent@google.com> audioflinger: fix effect problem during underrun

When an audio track underruns, the input buffer of the
corresponding effect chain (if any) must be cleared, otherwise
audio from previous mixer run will be fed again to the effect process

Bug 6551652.

Change-Id: I5cd02196745f756c85af82d6937e9dc54369b37f
6d80297a55ab12759ee00b7f99fa97584b430da0 24-May-2012 Eric Laurent <elaurent@google.com> am 0cc62570: am f436fdcf: audioflinger: change session check in createTrack.

* commit '0cc6257030d3e6c649ea3ad807ecb9327ceb5b3e':
audioflinger: change session check in createTrack.
f436fdcf93bd417fd3c9d2a8b19fd221d894b5e3 24-May-2012 Eric Laurent <elaurent@google.com> audioflinger: change session check in createTrack.

Do not refuse to create a track on an output thread if the same session
is present on another thread. It is now possible that two tracks
with the same session ID are on different threads if one can use deep
buffering and the other can't.

In this case, move effects attached to this session to the output
thread ion which the new track is created.

Bug 6530324.

Change-Id: I9019b3ee382e374c89d2319033afcfa7f886e4c4
852fca99e25db8d2180c2622ca55fca676490a08 24-May-2012 Glenn Kasten <gkasten@google.com> Remove log spam for fast track denied

Bug: 6531054
Change-Id: Iedf58e810a157aae88b5900da27c81054c437058
e737cda649acbfa43fc1b74612a83f2fac9aa449 23-May-2012 Eric Laurent <elaurent@google.com> audioflinger: refine latency latency calculation.

There is an audio pipe between the normal mixer output and the fast
mixer to cope for scheduling delays and buffer size difference.
This pipe depth was not taken into account in latency calculation.

Adding the pipe contribution to the latency significantly improves A/V sync.

Bug 6520569.

Change-Id: I5584908e8aa8a02170eb38b22b4370eea800a235
fbae5dae5187aca9d974cbe15ec818e9c6f56705 21-May-2012 Glenn Kasten <gkasten@google.com> Keep a copy of most recent audio played

Change-Id: I6b2f97881c39998a2fae9ab79d669af6c0a37e94
99c99d00beb43b939dedc9ffb07adb89f6a85ba5 15-May-2012 Glenn Kasten <gkasten@google.com> systrace for audio

Trace fast track buffer fill status for underruns etc.

Move the definition of macro to Android.mk.

No overhead if disabled.

Change-Id: If0e83e21b61b059ca38f543f8a6ffb58e08c79ee
88cbea8a918bbaf5e06e48aadd5af5e81d58d232 15-May-2012 Glenn Kasten <gkasten@google.com> Display pipe underrun counters in dumpsys

The normal mixer writes it's submix to a pipe, which is read by the fast
mixer. Now dumpsys media.audio_flinger display the raw underrun counters
when fast mixer tries to pull from the pipe but doesn't get enough frames.

Change-Id: I72505f149f9e12802784da654a651d43734e1c79
9017e5e0ebad9664bb7b6f2057e5bb29c852c64f 15-May-2012 Glenn Kasten <gkasten@google.com> Increase normal mixer's pipe to fast mixer

Change-Id: I330925c7d07b6adb30b773bda3657e4efef9ae9b
44a957f06400a338e7af20b3d16c4c4ae22a673c 16-May-2012 Eric Laurent <elaurent@google.com> Fix static track activity ref counting

When a static AudioTrack underruns, it means that playback is over.
As apps do not necessarily stop playback explicitly, AudioFlinger
should call stopOutput() to decrease activity ref count in
audio policy manager.

Bug 6486311.

Change-Id: I1ea722c443780329ded6310c958b24726e918d16
2986460984580833161bdaabc7f17da1005a8961 09-May-2012 Eric Laurent <elaurent@google.com> Fix issues with synchronous record start.

- Added a timeout in case the trigger event is never fired.
- Extend AudioRecord obtainBuffer() timeout in case of
synchronous start to avoid spurious warning.
- Make sure that the event is triggered if the track is
- Reject event if the triggering track is in an incompatible state.

Also fix a problem when restoring a static AudioTrack after
a mediaserver crash.

Bug 6449468.

Change-Id: Ib36e11111fb88f73caa31dcb0622792737d57a4b
4adcede0dc54a85c31abaf139921aebd7a072d8e 14-May-2012 Glenn Kasten <gkasten@google.com> Reduce video frame drop rate

The video playback engine depends on having relatively precise audio
progress updates for its A/V sync and frame drop calculations. For small
audio HAL buffer sizes, this was not a problem, but when the HAL buffer
size was > 12 ms, the normal mix buffer size became > 24 ms and this
then caused video problems. The new formula tries to keep the normal
mix buffer size within a closer tolerance of 20 ms to 24 ms.

Also use consistent term: multiplier instead of multiple.

Bug: 6479613
Change-Id: I903bad74461908e8c8f0a61e99ab5e24d5c44433
09474df67278c0cd621b57c4aef1deaec4d8447f 10-May-2012 Glenn Kasten <gkasten@google.com> Improve underrun handling for fast tracks

Maintain more accurate accounting of type of underrun.
Automatically remove track from active list after a series of "empty" underruns.

Change-Id: If042bf80e1790dcaaf195c99dc9c0ed9b55382c1
d08f48c2ad2941d62b313007955c7145075d562c 02-May-2012 Glenn Kasten <gkasten@google.com> Fix stopping process for fast tracks

Previously, the state of a fast track "wiggled" back and forth at the end.

Now it goes through these transitions:
active -> stopping_1 -> stopping_2 -> stopped

This CL is only for fast tracks, and does not change how
normal tracks work.

Change-Id: Icc414f2b48c46dda63cfa6373ca22d033dd21cd4
808e7d16504cbe5b28bb88c31afb2542ab488965 12-May-2012 Eric Laurent <elaurent@google.com> AudioFlinger: fix global effects suspend logic

Audio effects on the output mix should not be suspended when effects
on the output stage (post processing) are enabled.

Change-Id: I2e1c08fa9358ea3cbaec68856738d504b1be54e4
d8e6fd35ec2b59ee7d873daf1f1d9d348221c7bc 07-May-2012 Glenn Kasten <gkasten@google.com> Use audio tag for system tracing

Disabled by default; uncomment ATRACE_TAG to enable

Change-Id: I99af894022a859ee5644bd853cfd8a48e4735ff9
e213c86d36414a8fc75e37c52999522fe09c7328 25-Apr-2012 Glenn Kasten <gkasten@google.com> dumpsys fCnt and flags

Previously displayed TrackBase::mFrameCount but not control block frameCount.
Now displays both.

Also display the track flags in control block.

Change-Id: Ie53781d4784633d78b6f928d69ebd494d8f110ec
31dfd1db7a4d2228d9642008af6f3dd744368eb6 01-May-2012 Glenn Kasten <gkasten@google.com> Disable fast track log spam

except for "denied by client" and "denied by server"

Change-Id: I133ab747933729cc1f386813ee06ece055bdb294
810280460da5000785662f6c5b0c7ff3ee0a4cb3 01-May-2012 Glenn Kasten <gkasten@google.com> Temporary fix for both normal tracks & fast tracks

If there is at least one active fast track, it forces a mixer
status of ready, which messes up the logic for normal track underruns.

Change-Id: I9de2fcaef090e2c2f99682333af3d3dd618b0d6b
288ed2103d96f3aabd7e6bea3c080ab6db164049 26-Apr-2012 Glenn Kasten <gkasten@google.com> Fix race condition for non-started fast tracks

This required re-implementing how fast tracks are considered active.
Now, they use the same logic as normal tracks, except underrun is ignored.

Other changes:
- add framesReady() to AudioBufferProvider interface
- rebased
- add track underrun counter state to fast mixer dump state
- move dumpsys header to Track::appendDumpHeader()
so it closer to where tracks are dumped
- display track state in dumpsys as a character code
- measure and display warmup time and cycles in dumpsys
- copy in the presentation complete code
- add ExtendedAudioBufferProvider for framesReady() which returns size_t
- simplify underrun tracking
- deferred reset track after stop()
- add comments

Change-Id: I7db8821bc565230ec76da1f9380fe3fb09735e5b
83faee053cfd4251dbb591b62039f563ffdac399 28-Apr-2012 Eric Laurent <elaurent@google.com> AudioFlinger: fix stop detection for static tracks

The end of playback and end of presentation detection was broken for
static AudioTracks (tracks using shared memory buffers passed by client).

The mixer should not wait for a minimal amount of frames to be available to mix
a static track otherwise the last frames might never be consumed.

A static track should be removed from active list in case of underrun even if not

Issue 6411521.

Change-Id: I66a2c1a77e98149e5049a223a6f04c3b8c5ad11a
300a2ee9327c05fbf9d3a5fd595b558097c7c5e8 25-Apr-2012 Glenn Kasten <gkasten@google.com> Fast mixer configuration

Add compile-time option for when to use fast mixer.

Double HAL frame count for fast tracks due to SRC, and make the normal
frame count multiplier an even number for compatibility. Sample rate
conversion can result in underruns if the HAL frame count is used as is,
due to jitter.

Change-Id: Ia1f8da1b8ac247d9807acfce3c318161db000905
da747447c1d4b5205469b4e94485b8769df57a97 26-Apr-2012 Eric Laurent <elaurent@google.com> AudioFlinger: fix tracks ready for mixing logic.

Commit fec279f5 broke the logic allowing to wait for an application
to provide frames for mixing in the case of several active tracks.

This was causing audio gaps when playing music and superposing a
sound Fx (keyboard clicks...).

Issue 6185007.

Change-Id: Id0fad150d0b615646d6b1387c0de8ca944d228f6
e0fa467e1150c65a7b1b1ed904c579b40f97c9df 24-Apr-2012 Glenn Kasten <gkasten@google.com> Move frame count calculations for fast tracks

For fast tracks: move the default and minimum frame count calculations
from client to server. If accepted, the default and minimum frame count
is the fast mixer (HAL) frame count. If denied, the default and minimum
frame count is the same as it currently is for normal tracks.

For normal tracks: there is no change yet, preserve legacy behavior for
now but add a FIXME to change this later.

Bug fix: the test for buffer alignment matches channelCount was wrong.

Bug fix: check for 8-bit data in shared memory, which isn't supported.

- in set(), only call AudioSystem::getOutputSamplingRate() when needed
- in createTrack_l(), only call AudioSystem::getSamplingRate() and
AudioSystem::getFrameCount() when needed

Change-Id: I79d2fe507db1a8f7bb094c71da8a129951dbb82f
1dc28b794587be22c90a97070d928f94586db638 24-Apr-2012 Glenn Kasten <gkasten@google.com> Use scheduling policy service

Change-Id: I3c09da1dc0de5039d0c15ce7fb2bc373fa398712
58912562617941964939a4182cda71eaeb153d4b 03-Apr-2012 Glenn Kasten <gkasten@google.com> AudioFlinger normal mixer uses FastMixer

Change-Id: I3131bb22d2d057e9197a2ebfa6aa1cfaab9e5321
3acbd053c842e76e1a40fc8a0bf62de87eebf00f 28-Feb-2012 Glenn Kasten <gkasten@google.com> Configure policy of mediaserver threads

Change-Id: Ifd825590ba36996064a458f64453a94b84722cb0
c95cfbb87d0ac5e773037019a96bfc29972d4b4e 12-Apr-2012 John Grossman <johngro@google.com> TimedAudioTrack: Optimize the queue trim operation.

Hand merge from ics-aah

> TimedAudioTrack: Optimize the queue trim operation.
> Don't perform the end PTS calculation for each buffer during trimming.
> Instead, only calculate the ending PTS of a buffer if there is no next
> buffer in the queue. This optimization assumes that the buffers being
> queued are in monotonic media time order (a fair assumption for now)
> and that the timestamps in the audio are contiguous (not a requirement
> for this API, but a reality of how it is being used right now).
> In the case where the audio is discontinuous on purpose, it is
> that this optimization will cause the system hold one extra buffer
> which it could have safely trimmed. It should not be much of an issue
> since in real life the audio is almost always contiguous, and as long
> as the media clock is running and the mixer is mixing, the buffer will
> be used up and discard as part of the normal flow anyway.
> Change-Id: I00061e85ee7d5651fcf80751646c7d7415894a14
> Signed-off-by: John Grossman <johngro@google.com>

Change-Id: I0054b58e1389fa005aa990cb5710caf4af7b706a
Signed-off-by: John Grossman <johngro@google.com>
8d314b709fdd81bb64bdaa8d72a0b19c355cefb9 19-Apr-2012 John Grossman <johngro@google.com> TimedAudioTrack: Fix continuity threshold handling.

Hand merge from ics-aah

> TimedAudioTrack: Fix continuity threshold handling.
> Fix issues with continuity threshold handling; notably
> + If the steady-state continuity threshold is exceeded, be sure to
> clear the on-time flag. Failure to do this will result in the
> system picking a new mix point which simply satisfies the
> steady-state continuity threshold instead of the startup threshold.
> Since we are putting a discontinuity in presentation anyway, we
> really want to pick a perfect point, not just an OK point.
> + Tighten the steady-state continuity threshold. It was currently set
> to 100mSec which is enormous. 4mSec (the new setting) is much more
> appropriate. On systems with a VCXO (like tungsten) this should
> never be wrong by more than a sample. If TimedAudioTracks are ever
> to be used on VCXO-less systems, this threshold should probably be a
> a parameter configurable by applications on a track by track basis
> so they can make the tradeoff between allowed error and frequency of
> disruptive corrections.
> + Reset the on-time flag if the mixer provides no PTS during a mix
> operation. This makes for a convenient way for the HAL to reset
> timed tracks when it makes changes for delay compensation across
> multiple outputs.
> Change-Id: I2cb23de5a3d1f75618abc1c8ab903db883837aa8
> Signed-off-by: John Grossman <johngro@google.com>

Change-Id: Ibd28c9d290494b0b19eb01caf2d9bfdef606a9b4
Signed-off-by: John Grossman <johngro@google.com>
9bd23229fdec1657398abc682ccccfce1c95f8aa 16-Apr-2012 Jean-Michel Trivi <jmtrivi@google.com> Fix multichannel downmix pause bug on video player

Pausing a video player will cause the track audio mixer to be
disabled, which causes the downmixer to be deleted. When reenabled,
the track channel mask hasn't changed but the downmixer is there
Fixed by:
- instanciating a downmixer when the AudioMixer track
gets initialized (in getTrackName(), now taking a channel mask
as input), and deleted when in deleteTrackName().
- when the channel changes on a track, check whether it
needs a downmixer or not. Preparing a track for downmix
automatically removes the old downmixer if there was one.

Also: initialize the track downmixerBufferProvider field
when AudioMixer is instanciated, so we can safely call
delete on it in AudioMixer's destructor, in case
deleteTrackName() wasn't called before the mixer was

Change-Id: I589b0781cda5b3c82f85b561c52b08546cac21f8
0ca3cf94c0dfc173ad7886ae162c4b67067539f6 18-Apr-2012 Eric Laurent <elaurent@google.com> rename audio policy output flags

Change-Id: I27c46bd1d1b2b5f96b87af7d05b951fef18a1312
acb86cccbd9d245439a04cef0bcefa589addaa4c 16-Apr-2012 Jean-Michel Trivi <jmtrivi@google.com> Configure the resampler with the correct channel count when downmixing

When a track needs to be downmixed and resampled, it gets downmixed
first before being resampled. Therefore the resampler needs to
be configured with the channel count of the output of the downmixer
instead of that of the track.
Removed frame size checks that don't apply anymore now that we support
frame sizes that are not powers of 2 (e.g. 12 for 5.1 16bits), and
changed test performed for every buffer during playback into an

Change-Id: Ia220f00ee382f4f7848b661c58555bdca664e194
f7ffb8bf0a58037f0bc9662c5275005a4e539948 14-Apr-2012 Eric Laurent <elaurent@google.com> audioflinger: update to new audio HAL.

Updated audio flinger to new function prototypes
for open_output_stream() and open_input_stream().

Check audio hw device version when loading a module and
reject devices with a version different from current one.

Change-Id: I9d4c81a1f59a15db78b3989417c2a411c638fe88
b388e531613730572067e193b6b66afb5d042233 14-Apr-2012 Eric Laurent <elaurent@google.com> Fix ALOG_ASSERT in AudioFlinger

Fix broken ALOG_ASSERT in updateFramesPendingAfterTrim_l() introduced by
commit 1c345196.

Change-Id: Ie1b2653069283f23ff0367f2628828e37fb0749c
d3030da2ac3c0ebb8b7bdf38418263caf405b863 12-Apr-2012 John Grossman <johngro@google.com> Fix the build

forgot to upload final fixup during merge. sry about that

Change-Id: I2ddd2c08d8efa83c0a8d1e378ae4c28686145154
1c345196edc61694f29307a1826a64a0d26028dc 27-Mar-2012 John Grossman <johngro@google.com> TimedAudio: Track of the number of pending frames.

This is a manual merge from ics-aah

> TimedAudio: Track of the number of pending frames.
> Keep track of the number of frames pending in the timed audio queue so
> we can implement framesReady in O(1) time instead of O(N). This
> change partially addresses bug 6020970; the bug will be completely
> addressed once this change has been up-integrated into master.
> Change-Id: I599eb15ea1f6d715b97b30e65214fb6fadd169df
> Signed-off-by: John Grossman <johngro@google.com>

Change-Id: I6cbbbc3afc8efd066fe94865326ede0c6b3db2bd
Signed-off-by: John Grossman <johngro@google.com>
9fbdee13d09447550dd22ae72c2dbabdce7f0a80 27-Mar-2012 John Grossman <johngro@google.com> TimedAudio: Fix a cause of audio popping.

This is a manual merge from ics-aah

> TimedAudio: Fix a cause of audio popping.
> Fix an issue with buffer lifecycle management which could cause audio
> pops on timed outputs. There were two issues at work here.
> 1) During trim operations for the queued timed audio data, buffers
> were being trimmed based on their starting PTS instead of when the
> chunk of audio data actually ended. This means that if you have a
> very large chunk of audio data (larger than the mixer lead time),
> then a buffer at the head of the queue could be eligible to be
> trimmed before its data had been completely mixed into the output
> stream, even though the output stream was fully buffered and in no
> danger of underflow.
> 2) The implementation of getNextBuffer and releaseBuffer for timed
> audio tracks was not keeping anything like a reference to the data
> that it handed out to the mixer. The original architecture here
> seemed to be expecting a ring buffer design, but timed audio tracks
> use a packet based design. Pieces of packets are handed out to the
> mixer which then frequently will hold onto that chunk of data
> across two mix operations, using the first part of the chunk to
> finish a mix buffer and then using the end of the chunk for the
> start of the next mix buffer. If the buffer that the mixer is
> holding a piece of got trimmed before the start of the next mix
> operation, it would return to its heap and could be filled with who
> knows what by the time it actually got mixed. On debug builds,
> they seem to get zero'ed out as they go back to the heap causing
> obvious pops in presentation.
> This change addresses both issues. Trim operations are now based on
> ending presentation time for a chunk of audio, not the start. Also,
> when the head of the queue is in flight to the mixer, it can no longer
> be trimmed immediately, merely flagged for trim by the mixer when the
> mixer finally does call releaseBuffer.
> Signed-off-by: John Grossman <johngro@google.com>
> Change-Id: Ia1ba08cb9dea35a698723ab2d9bcbf804f1682fe

Change-Id: I2c5e2f0375c410f0de075886aac56ff6317b144c
Signed-off-by: John Grossman <johngro@google.com>
3f9c84c0a5af83fceb8669390e2d71b75ec7b550 04-Apr-2012 Eric Laurent <elaurent@google.com> audio pre processing: test code for dual mic

Added functional test code to validate effect API for
multi mic simplementations.

Also fixed warning in AudioFlinger.

Change-Id: I07be4d2e4d17791d3626c804ba3e9f87ff26d05a
7d5b26230a179cd7bcc01f6578cd80d8c15a92a5 05-Apr-2012 Jean-Michel Trivi <jmtrivi@google.com> AudioMixer uses downmix effect for multichannel content

In the AudioMixer structure associated with each track, add an object
that acts as the buffer provider when the track has more than two
channels of input in the mixer. This object, DownmixerBufferProvider,
gets audio from the actual buffer provider of the track, and applies
a downmix effect on it.
The downmix effect is created and configured when the track gets
created in AudioFlinger, which causes AudioMixer::getTrackName()
to be called with the new track's channel mask. It is released
when the track is disabled in the mixer.

Change-Id: I05281ed5f61bef663a8af7ca7d5ceac3517c82db
a4c5a550e2a3bc237179b8684e51718e05894492 29-Mar-2012 Eric Laurent <elaurent@google.com> audio policy: load audio hw modules.

Audio HW modules are now loaded upon request from audio policy manager
according to the configuration in audio_policy.conf.
Removed hard coded HW module loading by AudioFlinger at init time.
Added methods to IAudioFlinger and AudioPolicyInterface
to control the loading of audio HW modules.
Added methods to open an output or input stream on a specific hw module.

Change-Id: I361b294ece1a9b56b2fb39cc64259dbb73b804f4
1a9ed11a472493cac7f6dfcbfac2064526a493ed 21-Mar-2012 Eric Laurent <elaurent@google.com> audio policy: add configuration file

removed outputs to stream mapping cache in audio system: the output for a
given stream type must always be queried from audio policy manager as the cache
is not always updated fast enough by audioflinger callback.

removed AudioFlinger::PlaybackThread::setStreamValid() not used anymore if
stream to output mapping is not cached.

Change-Id: Ieca720c0b292181f81247259c8a44359bc74c66b
73d227557ba5192735356bacab9f77b44980793b 19-Mar-2012 Glenn Kasten <gkasten@google.com> AudioFlinger track flags and server's fast policy

Change-Id: I72358c8e6829d173b3e60ced8a8babc089869fac
0bf65bdde04b8e66c998ff37e2b2afafddddfa33 29-Feb-2012 Glenn Kasten <gkasten@google.com> const methods and comments

Change-Id: Ifd16750174fdb15b72507787502b587562ffc99e
a1472d9883e35edd280201c8be3191695007dfd4 30-Mar-2012 Marco Nelissen <marcone@google.com> Make AudioTrack/AudioRecord handle more than 2^32 frames

Change-Id: I471815012c6a113ec2c4dd7676e8fa288a70bc76
a011e35b22f95f558d81dc9c94b68b1465c4661d 30-Mar-2012 Eric Laurent <elaurent@google.com> 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: I51f1167290d9cafdf2fbcdf9e4785156973af44c
b83d38feeeb88a8a2a6219e1fca2480b5a14fb0d 26-Mar-2012 Glenn Kasten <gkasten@google.com> Merge "IAudioFlinger::createTrack and openRecord flags"
c5c49398584f2399af905a931e556ed6e0a29cd4 21-Mar-2012 Glenn Kasten <gkasten@google.com> Merge "Clean up Track constructor"
63c1faa8dea7feb90255d31ef2a133d8f2818844 21-Mar-2012 Glenn Kasten <gkasten@google.com> Merge "Update comments"
7153494670bdac8b650cb10b8b1838651e0ca418 21-Mar-2012 Glenn Kasten <gkasten@google.com> Merge "Whitespace"
a26ff6f22f4e86d09514c2819237bd9748455018 21-Mar-2012 Glenn Kasten <gkasten@google.com> Merge "new doesn't fail on Android"
9a5f413a21b320fea0607e653bc75b1a4f0e7a2e 21-Mar-2012 Eric Laurent <elaurent@google.com> am a48285c4: am 165ee4c5: am 14958e21: Merge "audioflinger: fix issue with camcorder and A2DP" into ics-mr1

* commit 'a48285c4f22ffc43f1771ebd1ff35dcec48db2c7':
audioflinger: fix issue with camcorder and A2DP
f99590187e2e3f1cf6f093063170edec269cac5d 19-Mar-2012 Glenn Kasten <gkasten@google.com> Clean up Track constructor

The 'thread' parameter can never be NULL.
Use constructor initialization list when possible.
Make more members const.
Only put the relevant code under "if (mCblk != NULL)".
Add comment about track name leak.

Change-Id: Ib963390a69bed1999638cc982a759edd1d5f4712
ea7939a079b3600cab955760839b021326f8cfc3 14-Mar-2012 Glenn Kasten <gkasten@google.com> Whitespace

Fix indentation, and add blank lines in key places for clarity

Change-Id: I57a0a8142394f83203161aa9b8aa9276abf3ed7c
17a736c3e1d062d7fc916329eb32aef8935614af 14-Feb-2012 Glenn Kasten <gkasten@google.com> Update comments

Change-Id: I327663a020670d0a72ff57bd0b682e2ce0528650
a03567676e8766828ff970b87e13bc4c97b23473 19-Mar-2012 Glenn Kasten <gkasten@google.com> new doesn't fail on Android

Change-Id: I5079a3bf31097dd0807b2d806d5f8d3cff2077ab
a075db4ff9b086ac2885df77bb6da0869293df92 06-Mar-2012 Glenn Kasten <gkasten@google.com> IAudioFlinger::createTrack and openRecord flags

createTrack and openRecord don't need the "old" flags parameter,
which was either audio_policy_output_t or audio_in_acoustics_t
shifted left by 16 bits. But they do need "new" flags, which
are defined by the application use case. Initially, the only
application use case flag is timed output, but others are planned.

For output, the audio_policy_output_t flags are passed to
AudioSystem::getOutput, which returns an audio_io_handle_t, and that
handle is then passed to createTrack. So createTrack doesn't need the
old flags parameter.

For input, the audio_in_acoustics_t flags are passed to
AudioSystem::getInput, which returns an audio_io_handle_t, and that
handle is then passed to openRecord. So openRecord doesn't need the
old flags parameter.

Change-Id: I18a9870911846cca69d420c19fe6a9face2fe8c4
9d7b4c074205609271f61e1a4741ac0c524a1795 19-Mar-2012 Eric Laurent <elaurent@google.com> am 14958e21: Merge "audioflinger: fix issue with camcorder and A2DP" into ics-mr1

* commit '14958e21c12f922d7501d32c3bec05109eb342d5':
audioflinger: fix issue with camcorder and A2DP
89d94e79dad032fb18ddc655e6068e4231d3f0aa 17-Mar-2012 Eric Laurent <elaurent@google.com> audioflinger: fix issue with camcorder and A2DP

Some audio HALs do not support well a device selection of 0 (no device)
received on an input stream.

This can happen because of a problem in the audioflinger code that handles
the forwarding of the output device selection to the record thread for use by
the pre processing modules that need it. If the output device is 0 (meaning
no op, which happens when stopping playback over A2DP) audioflinger could not
detect it was an output device selection and would forward it to the input
stream (see AudioFlinger::setParameters() and RecordThread::checkForNewParameters_l().

Issue 6179641.

Change-Id: Idae534521866538e0d12ba259a2834f402a922e2
dfaf549e3e310bc22444f4404b19f4907b24c286 15-Mar-2012 Glenn Kasten <gkasten@google.com> Merge "AudioFlinger playback thread CPU measurement in Hz"
190a46f7c84e160386610c0c4cecb9767fb5503b 06-Mar-2012 Glenn Kasten <gkasten@google.com> AudioFlinger playback thread CPU measurement in Hz

Log statistics on CPU usage in Hz in addition to wall clock time

Use CPU statistics for all playback threads, not just MIXER
(but they are disabled by default by a compile-time debug macro).

ThreadCpuUsage library:
- Move statistics out of the library and leave that up to the caller
- Add API to determine a CPU's frequency

Change-Id: Ia1011123146e641fcf210ef26e78ae2b4d3b64ad
3b229ed97c0dfc85a8cf881341e29e595e0edea7 14-Mar-2012 Eric Laurent <elaurent@google.com> Merge "audioflinger: more info in dumpsys"
612bbb57c59397a540e96f06bdd16e437a583af5 14-Mar-2012 Eric Laurent <elaurent@google.com> audioflinger: more info in dumpsys

Added TID and io handle to AudioFlinger threads dump.

Change-Id: Ib1a856f3bad55c73e4c395b5e59d57435f4b9a4c
d3cee2f0f649c01e1153d593cbe723887b8e0ba0 14-Mar-2012 Glenn Kasten <gkasten@google.com> Break circular dependency on media player service

Bug: 6165157
Change-Id: I3c85bbcaf31f3cb9a009e273f7b6284015eb3bd8
e53b9ead781c36e96d6b6f012ddffc93a3d80f0d 13-Mar-2012 Glenn Kasten <gkasten@google.com> Whitespace and indentation

Fix indentation to be multiple of 4.
Make it easier to search:
sp< not sp < to
"switch (...)" instead of "switch(...)" (also "if" and "while")
Remove redundant blank line at start or EOF.
Remove whitespace at end of line.
Remove extra blank lines where they don't add value.

Use git diff -b or -w to verify.

Change-Id: I966b7ba852faa5474be6907fb212f5e267c2874e
fd83fbf5ead098070bae674b20e6f87f45ab5d4c 13-Mar-2012 Glenn Kasten <gkasten@google.com> Merge "Clean up assertion checks"
aa4397f07c43bd83bc3100b749401dc3d15e7622 13-Mar-2012 Glenn Kasten <gkasten@google.com> Fix bug where mMixerStatus was set to IDLE

Change-Id: I55df1738fb7ba17ba6caeea6a17557526eac17a7
5798d4ebf236357a4b13246f40e52b90a34d09a4 08-Mar-2012 Glenn Kasten <gkasten@google.com> Clean up assertion checks

Use ALOG_ASSERT instead of assert.
Use compile-time asserts where appropriate.
Fix typo in an ALOGV.

Change-Id: I58f1c1ffc14319a022c88b5a88b8d0368660da8b
73f4bc33e0d458933460250a47c64aa868c05f97 09-Mar-2012 Glenn Kasten <gkasten@google.com> Inline applyVolume() into threadLoop_mix()

Also the declaration of applyVolume in PlaybackThread was dead.

Change-Id: I4b1a9848d07d3d7f340baea05b17f667c78df868
66fcab972e9218d47c58a915f391b2f48a09903a 24-Feb-2012 Glenn Kasten <gkasten@google.com> Merge dup code at thread entry and param change

This CL is mostly just cleanup, but there are a couple of fixes marked
"FIX" below.

Merge the duplicate code that was at the beginning of threadLoop() and
after a parameter change. cacheParameters_l() is now called at entry to
threadLoop() and after any parameter change. It re-calculates all values
that are derived from parameters, and caches them in instance variables.

- FIX activeSleepTime depends on mWaitTimeMs, which was initially set
to infinity. updateWaitTime_l() was not called at entry to
threadLoop(), so activeSleepTime was not set correctly before the
first parameter change.

- FIX reversed the order of calls after parameter change
for the same reason so that updateWaitTime_l() is called before
calculating values that are derived from wait time.

- marked it private since now it's only called from DuplicatingThread

Change-Id: If2607d2ed66c6893d910433e48208a93c41fb7e9
18868c5db2f90309c6d11e5837822135e4a0c0fa 07-Mar-2012 Glenn Kasten <gkasten@google.com> Use audio_policy_output_flags_t consistently

This affects:
- IAudioFlinger::openOutput
- AudioTrack::AudioTrack
- AudioTrack::set
- apps that call these

Change-Id: I26fb281bac6cb87593d17697bc9cb37a835af205
d69549665d412f1f6ebad48ad8cd05133ada8728 09-Mar-2012 Glenn Kasten <gkasten@google.com> Merge "Replace hard-coded 3 by FCC_2 to simplify searches"
083c154162c88a9f63aeaa10a4b52dd454bda9ff 09-Mar-2012 Glenn Kasten <gkasten@google.com> Merge "Don't ask policy manager about invalid stream type"
53d76dbe7c55821e89d9da02e7a563f7fb45de87 08-Mar-2012 Glenn Kasten <gkasten@google.com> Replace hard-coded 3 by FCC_2 to simplify searches

Change-Id: I92881d04e8378307f849fb343071a58d181a68b4
fec279f5a0bfaa2a42e91ab6dfa0282baeee308b 08-Mar-2012 Glenn Kasten <gkasten@google.com> Mixer status cleanup

Use mPrevMixerStatus for DirectOutputThread also.
Remove the MIXER_CONTINUE logic and use MIXER_IDLE instead.
Rename the field mixerStatus to mMixerStatus.
Rename local variable back to mixerStatus.

Change-Id: I0a8145fc856c6c5ff8b784b6176ef3c4d8eb7408
b071e9bc248865ef87a339044c0c5cbabfac175c 08-Mar-2012 Glenn Kasten <gkasten@google.com> Cleanup DirectOutputThread::mActiveTrack

Rename activeTrack to mActiveTrack.
Release the reference earlier, at the end of threadLoop_mix().
This allows the field to be made private and to
move the declaration from PlaybackThread to DirectOutputThread.

Change-Id: I02be7a254638f7d85e92aaf0002d20ca0092a5c3
639dbee79140956c43926344c23af765f6e0c9a5 07-Mar-2012 Glenn Kasten <gkasten@google.com> Don't ask policy manager about invalid stream type

Change-Id: If50fbff9d34045d1398984da48da7e6428a74491
b279312a9038b9c5b9b05b31b1b1db86f748efd8 08-Mar-2012 Glenn Kasten <gkasten@google.com> Merge "IAudioFlingerClient::ioConfigChanged param2 const"
fa26a859bacb597587a8f49acfc3127351fa688c 06-Mar-2012 Glenn Kasten <gkasten@google.com> Isolate references to outputTracks/mOutputTracks

Move all references to DuplicatingThread::outputTracks and
DuplicatingThread::mOutputTracks from the common threadLoop() into
virtual methods. This allows them to be moved from PlaybackThread to
DuplicatingThread, and to be marked private.

Also use vector assignment to copy mOutputTracks to outputTracks.

Change-Id: Ieb1cf1ad36b8a65143e61e6c92a65fb43427e5e2
d4513b09123deebf8023b73a82d2d46d35806cea 07-Mar-2012 Glenn Kasten <gkasten@google.com> Make applyVolume private to DirectOutputThread

Change-Id: I7ca4a59505857cbd106b6f274c66e9580dead271
1465f0c3df04c3166155a852a6a5c10069c1fd0a 06-Mar-2012 Glenn Kasten <gkasten@google.com> Merge the calls to prepareTracks_l

Change-Id: I1dd759581333e2908d980180d44db7bf5ed6591d
b81cc8c6f3eec9edb255ea99b6a6f243585b1e38 01-Mar-2012 Glenn Kasten <gkasten@google.com> IAudioFlingerClient::ioConfigChanged param2 const

The 3rd parameter (param2) to AudioFlingerClient::ioConfigChanged
is used as an input. So changed it from void * to const void *.
It is then cast to const OutputDescriptor *
or const audio_stream_type_t * depending on the event.

Change-Id: Ieec0d284f139b74b3389b5ef69c7935a8e5650ee
f8edf68a1e39da273eafe8c85bdbedc26636c4ec 07-Mar-2012 Glenn Kasten <gkasten@google.com> Merge "Rename fields of AudioSessionRef"
92b8360fe9c3174dc0edaaab4b746d8a3d3f831f 07-Mar-2012 Glenn Kasten <gkasten@google.com> Merge "Fix indentation for re-organized code"
438b036deaf4413503567a75a2861c000d21da5b 06-Mar-2012 Glenn Kasten <gkasten@google.com> Rename updateWaitTime since a lock is held

Change-Id: I9bb978cbd0debf5b21676467060f72eebafea3e6
952eeb27682a9b2ddfa761f24b6eb5e18fe5d814 06-Mar-2012 Glenn Kasten <gkasten@google.com> Fix indentation for re-organized code

Change-Id: I63471cebdbd095b7ad4e481611b785f9b02c7941
012ca6b4f69fb24385025c0e84b8f816525a3032 06-Mar-2012 Glenn Kasten <gkasten@google.com> Rename fields of AudioSessionRef

Change-Id: I9f2a66094135c4ac6bec2d3e9db3ac5fbf988ede
000f0e39b4d0c88441297a05ab5f8da6832c1640 02-Mar-2012 Glenn Kasten <gkasten@google.com> threadLoop merge

Change-Id: Id8e6330ac6be76f9c2debba94f856de87e2d98f7
e8286332f3817a8b7cc4cfd8f6450a3913533660 29-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "Shorten thread names"
3e07470f3b122097cacfe5b85cdb1359279a2f33 29-Feb-2012 Glenn Kasten <gkasten@google.com> Prepare for threadLoop merge - active tracks

Continued work on making the copies of threadLoop more similar:
- Remove alias for mActiveTracks in MixerThread and DuplicatingThread.
- Pull in declaration of activeTrack in DirectOutputThread.
- Remove redundant parameter of prepareTracks_l().
- Comment prepareTracks_l().

Change-Id: If1087c1902b454acec01ddfdd9f055f0ca7abf04
91cda8bdf8358a8b977a44e016b60a70bc1a5ee9 29-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "Pull in declaration of effectChains to inner block"
73ca0f5837d5448f7a5eb159a09cd0ebe82b4de9 29-Feb-2012 Glenn Kasten <gkasten@google.com> Pull in declaration of effectChains to inner block

Change-Id: I09eacf72124942abd604132b9f4e774b1236fcf3
c455fe9727d361076b7cead3efdac2d32a1a1d6d 29-Feb-2012 Glenn Kasten <gkasten@google.com> mSuspend comments and usage

Emphasize that playbackthread::mSuspend is a counter, not a bool

Change-Id: I7188e56814e1c54dbc65e560f3627f138257d644
688a64030834ea2f52cc9765676ddf6aa34df767 29-Feb-2012 Glenn Kasten <gkasten@google.com> Mark similar and different sections in threadLoop

Most of these comments will be removed after the threadLoop merge.

Note: the trivial change in assignments to mixBufferSize, and the
comments about "tracks to remove" is to make them all identical.

Change-Id: I3b1a33a7f2cd12ad557a1986bb71f6171161974a
480b46802bef1371d5caa16ad5454fce04769c57 28-Feb-2012 Glenn Kasten <gkasten@google.com> Shorten thread names

prctl(PR_SET_NAME) limits to 15 characters. Before we had names like
"Binder Thread #" and the counter was cut off :-( Also remove redundant
"thread" at end of name; it's always a thread.

Change-Id: I1f99c2730ba0787ed9b59c15914356cddf698e2f
a3873833d518e032138cf70188b6f33cd7acec3d 28-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "Unlock effect chains in the middle of two if's"
3e9c3a1d34960cd258f294d31135ab6bf76179d5 28-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "Simplify removeNotificationClient"
a17c820c556fddf7ddd96b82b3e9874e340ffafd 28-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "AudioFlinger const methods and parameters"
cfbd62616ab2b12f0fee603658f04e5827cc7f8f 28-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "Fix theoretical race condition in addOutputTrack"
fadb2c73fce479205432652530663e1e90fd546c 28-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "AudioBufferProvider comments and cleanup"
843a12d146bd64642bf85a4e56c274246e3893a6 27-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "Fix tracking of hardware state for dump"
e628d515888baadba75442128678e747e930ed58 27-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "Make threadLoop() logs identical"
d3cee0b1f77baa4fb7a049eb757e9f5006890726 27-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "Move declaration of mixerStatus to inner block"
a3b09254d44cd8d66ec947abe547538c4cfeaa89 20-Jan-2012 Glenn Kasten <gkasten@google.com> Simplify removeNotificationClient

No need to check for presence of item before removing
(but we do lose the log of the previous value).

Change-Id: I2838430824de5f257f2ee15db0c22b1920c67d08
02fe1bf923bbe5789202dbd5810e2c04794562e6 25-Feb-2012 Glenn Kasten <gkasten@google.com> AudioFlinger const methods and parameters

Change-Id: I93ec28024005ed23aa141518092a012a4a7c44c5
c0b52836d07f823732f0ff98ca5ca9d7f5730cb8 24-Feb-2012 Glenn Kasten <gkasten@google.com> Make threadLoop() logs identical

Change the wording of the logs in the various copies of threadLoop()
to be identical. This will make it easier to merge them soon.

Change-Id: Idfa181e437738712c784dc7f746cac79f83d2931
5d4eeeaf76ebe177b43e87b2a9df5e55e39021f0 24-Feb-2012 Glenn Kasten <gkasten@google.com> Move declaration of mixerStatus to inner block

mixerStatus was being declared (and initialized) too early,
which also resulted in a duplicate initialization. Moved
the declaration into the block where it is actually used.

Change-Id: Ifdcfefe362a5efe3493dd616cdb44645c6f9aed5
37d825e72a6c606553a745da1212590a425996d3 24-Feb-2012 Glenn Kasten <gkasten@google.com> Pull out duplicated copies of silent mode check

Also fix the error handling for the property_get.

This is part of preparation for the threadLoop() merge.

Change-Id: I6405190ea18146d1271575e1dfe9f279e8f36b17
04743e99e71c0da012508c7119f414027654ee94 24-Feb-2012 Glenn Kasten <gkasten@google.com> Unlock effect chains in the middle of two if's

As part of the upcoming threadLoop() merge, this CL makes it clearer
what are the similar and different parts before and after unlocking
effect chains.

In each threadLoop(), the old code was:

if (sleepTime == 0) {
// A
// B
} else {
// C

The new code is:

if (sleepTime == 0) {
// A
if (sleepTime == 0) {
// B
} else {
// C

Also this is slightly slower by one "if", it has the advantage of making
it much more obvious about what is done before and after the unlock,
and also to see the similarities and differences among the various
copies of threadLoop().

Change-Id: I7bf4369d2dcb072573ec43b7e52c637f0097dc00
5ce96d97feafc6989f6141bb2633eae3d87ddf28 24-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "Pull CPU statistics code out of threadLoop()"
b6b740629c9f11535086e744465bada03f26df11 24-Feb-2012 Glenn Kasten <gkasten@google.com> Fix theoretical race condition in addOutputTrack

This is not a real race, because addOutputTrack was only called in two
places, and in both places there could be no other threads referencing
the DuplicatingThread instance.

Those two places are:
- the DuplicatingThread constructor, which is of course safe
- openDuplicateOutput - this is safe because it's called immediately
after the new DuplicatingThread, and there are no sp<> either in the
constructor or here which could cause onFirstRef() to do Thread::run().

But for safety in case addOutputTrack is ever called somewhere else,
or there are sp<> created earlier, it is safer to take the thread lock.

Change-Id: I1502d014fa37ec5dbf4bf40d3e2884af311cd5e9
83efdd0fc08cd5aedf50b45741a8a87be8dc4b41 24-Feb-2012 Glenn Kasten <gkasten@google.com> Pull CPU statistics code out of threadLoop()

This is to prepare for the threadLoop() merge

Change-Id: I118c7d5c6b011b5d5b95ec7d63fb03feb166a9cf
01c4ebf6b794493898114a502ed36de13137f7e5 22-Feb-2012 Glenn Kasten <gkasten@google.com> AudioBufferProvider comments and cleanup

Add comments about which methods implement the AudioBufferProvider interface.

Simplified the definition of kInvalidPts. <stdint.h> is very hard to work
with, there seems to be no way to use it reliably to get INT64_MAX without
having a separate source file, which is ugly because it means kInvalidPts
is not a compile-time constant. So I just deleted AudioBufferProvider.cpp
and used a hard-coded constant instead.

Added a default constructor for Buffer so that the fields aren't random
(especially .raw which is used to determine if the buffer is valid).

Make the pts for getNextBuffer default to kInvalidPTS so code that
doesn't need a pts doesn't have to specify a value.

Rename the parameter to AudioMixer::setBufferProvider to make it clearer.

Change-Id: I87e7290884d4ed975b019f62d1ab6ae2bc5065a5
8abf44d2f2bcd20a2835570efe89d89c19db426a 02-Feb-2012 Glenn Kasten <gkasten@google.com> Fix tracking of hardware state for dump

At end of AudioFlinger::onFirstRef(), the hardware status was being left
in wrong state. It should be AUDIO_HW_IDLE but was AUDIO_HW_INIT.

mHardwareStatus was being set to AUDIO_HW_OUTPUT_OPEN too early, and so
a return would leave it in the wrong state until next hardware operation.

Take the hardware lock for dev->get_parameters, and update mHardwareStatus
before and after.

Keep hardware lock only for the duration of the dev->set_parameters.

Rename two constants in enum hardware_call_state to have the prefix
AUDIO_HW so they follow the naming conventions.

Add comments.

Change-Id: I6c7450b11f9b13adaeef9cec874333e478a58fc0
5cf034d92d901169ca6e36c90475f40715827fcd 21-Feb-2012 Glenn Kasten <gkasten@google.com> Remove TrackBase::mFlags

The bit-field TrackBase::mFlags was supposed to have track-specific
flags in the upper 16 bits, and system flags in the lower 16 bits.

The upper 16 bits of mFlags were initialized in the TrackBase
constructor from the flags parameter of IAudioFlinger::createTrack()
and IAudioFlinger::openRecord(), and the lower 16 bits were cleared.

However, the upper 16 bits of mFlags were never acccessed again.
So really there are no track-specific flags. I left the flags
in the parameter list of createTrack() and openRecord() but made a
note that these should be removed eventually as they are dead.

This leaves only the one system flag "step server failed". I replaced
the bit-field mFlags by bool mStepServerFailed, which is simpler and
slightly faster.

Change-Id: I6650f5487be72791b4a67d73adcd10ffa04e2aa5
d6fd85a157ce2054b2304e6d171fa87ae09c363d 22-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "Avoid wp<>::unsafe_get() with a few exceptions"
9eaa55756c5b245970447019250ce852f5189525 20-Jan-2012 Glenn Kasten <gkasten@google.com> Avoid wp<>::unsafe_get() with a few exceptions

Avoid using wp<>::unsafe_get() except in a log, and other specific cases
when it's known to be safe.

Use more specific subclass types for parameters to avoid down-casts.

When a constructor or method parameter is "this" of an object that is
currently being constructed, it's better to use a raw pointer rather
than either sp<> or wp<>.

Using the raw pointer is safe, provided either:
- it is "this" of an object being constructed (which has sp<> refcount of 0),
- or the caller already holds an sp<>

The raw pointer is simpler and faster, and it avoids the problem of the
sp<> reference count being incremented and then decremented to zero on
scope exit, which would cause the object's destructor to run while the
object is still being constructed.

Also removed some dead code per a review comment.

Change-Id: I7375f64da3aec11b928c33cb01faff186252ef5e
f063b49e95c28d63a58215ebda892a5fee4204cc 18-Feb-2012 Glenn Kasten <gkasten@google.com> Fix build warning

warning: pointer of type 'void *' used in arithmetic
warning: enumeral and non-enumeral type in conditional expression

Change-Id: I7b8d626a636145ef648e3b5d0e77068216dd012e
3b81acab52b7140c1b8b20be2d67be3e221637e7 28-Jan-2012 Glenn Kasten <gkasten@google.com> Remove bit fields to improve performance

uint16_t enabled is (mostly) changed to bool in a separate CL

Change-Id: Ied9f8c034b2479cee9a8778cee7b8ff92ae75b7b
1b094ee8f7fe7eca65bf3d2f983ba95eef6db93d 17-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "Simplify code"
a111792f1314479c649d1d44c30c2caf70c00c2a 26-Jan-2012 Glenn Kasten <gkasten@google.com> Simplify code

Use DefaultKeyedVector::valueFor to avoid extra test
Make local variables as local as possible
No double parentheses
No typedef for single use
No parentheses around indirect function call
No AudioFlinger:: prefix when not needed
Remove unnecessary casts
Remove block with only one line

Saves 128 bytes

Change-Id: I3a87430eeb01b81e7b81a1c38f6fdd3274ec48f3
fe5b3ba4b332d5fc9aa4f453434329b9f38768c2 13-Feb-2012 John Grossman <johngro@google.com> Put a bandaid on a segfault in timed audio track handling.

Add a bandaid to prevent a segfault which can occur while handling
timed audio buffers. There is a deeper problem which should
eventually be addressed, but for now this fix should prevent any

The deeper problem is as follows.

When the AudioFlinger mixer gets data to mix from an AudioTrack, it
ends up getting a structure filled out which points into an IMemory
region owned by the AudioTrack. Unfortunately, this structure is not
holding a refcount on the IMemory which it points into. If the
IMemory refcount hits 0 and the chunk of RAM is retuned to the binder
heap it came from, there can still be a Buffer object being held by
the AudioFlinger mixer which points into the region of memory which
was retuned to the binfer heap. If AF reads from this buffer, it
could read corrupt data (if the region of memory gets handed back out
to a writer), or it could segfault (if the heap has been freed and the
pages unmapped). Similar problems could happen if AF attempts to
write to the buffer, heap corruption in one case, segfaulting in the

In the past, this has not been an issue for AF, because tracks
allocate a single IMemory (which serves as a ring buffer) and the
IMemory lives for as long as the track lives. As an artifact of the
way the code came out, the mixer cannot be holding a Buffer structure
pointing into the IMemory which used to be owned by a track if the
track no longer exists. Tracks cannot come into or out of existence
during a mix operation, which is the only thing which makes this safe.

TimedTracks work differently, however. Timed tracks each allocate a
small binder heap, and then hand out IMemory instances broken out of
this heap. The heap lives as long as the track, so the worst which
could happen here is that a TimedTrack's IMemory gets returned to the
heap while there is still a buffer structure in flight pointing into
the memory region, then the region gets handed out again and
overwritten by new data causing the mixer to mix the wrong audio. The
timing to cause this to happen is very difficult to encounter, and you
to generate the timing conditions required, you need to be in a pretty
bad failure state where audio is already breaking up and skipping, so
its unlikely that anyone would notice (which is why I'm band-aiding
the segfault and letting the deeper issue slide for now).

In general, however, it might be a good idea to revisit this buffering
design. On principal, if someone is going to hold pointers into a
refcounted object, they should be holding a ref on the object at the
same time. Failure to do this will usually lead to a situation where
there are corruption or segfault issues, or to a system where the
refcounted object's lifetime must be implicitly managed very carefully
in ways which are usually non-obvious and are easy to break by new
engineers on a project.

Change-Id: Ib391075395ed0ef46a03c37aa38a82d09e88abeb
ef7740be67a4d7b6b033ebed59c3d4a9c74a2c18 09-Feb-2012 John Grossman <johngro@google.com> Fix a segfault in AudioFlinger.

Check the string returned by a HAL's implementation of get_parameters
for NULL before attempting to make use of it. That way, we won't
bring down the mediaserver because of a poorly written HAL.

Change-Id: Ic99d7b004520d7d6347842a681c0595e889b68ea
Signed-off-by: John Grossman <johngro@google.com>
4ff14bae91075eb274eb1c2975982358946e7e63 09-Feb-2012 John Grossman <johngro@google.com> Upintegrate Audio Flinger changes from ICS_AAH

Bring in changes to audio flinger made to support timed audio tracks
and HW master volume control.

Change-Id: Ide52d48809bdbed13acf35fd59b24637e35064ae
Signed-off-by: John Grossman <johngro@google.com>
6dad4378f2a78d967defc8912ecf47f6ed117584 14-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "Fix races related to volume and mute"
d9b9b8d09e7471b0ffa21cfa9f944ef4ad300a71 14-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "Update comments"
99e53b86eebb605b70dd7591b89bf61a9414ed0e 19-Jan-2012 Glenn Kasten <gkasten@google.com> Update comments

We no longer put the filename at start of file.

Change-Id: Ic435b159a23105681e3d4a6cb1ac097bc853302e
8d6a2449a91f5116d7243ab039393195ebd663fe 08-Feb-2012 Glenn Kasten <gkasten@google.com> Use size_t and ssize_t with Vector

Use size_t with size() and ssize_t with indexOfKey(). Exception:
use ssize_t for backwards loops, and indices that are overloaded as a
marker or error code.

Change-Id: Ibf2a360af4539b72b09c818dda22ea2a0de92431
6dbc1359f778575d09d6da722b060a6d72c2e7c5 02-Feb-2012 Glenn Kasten <gkasten@google.com> AudioRecord and AudioTrack client tid

Inform AudioFlinger of the tid of the callback thread.

Change-Id: I670df92dd06749b057238b48ed1094b13aab720b
44deb053252a3bd2f57a007ab9560f4924f62394 06-Feb-2012 Glenn Kasten <gkasten@google.com> Factor out and speed up permission-checking code

Use the caching permission check for dump to save IPC.

Cache getpid() to save kernel call for other permission checks.

The C runtime library getpid() can't cache due to a fork
race condition, but we know that mediaserver doesn't fork.

Don't construct String16 on the stack.

Change-Id: I6be6161dae5155d39ba6ed6228e7683e67be34ed
2b213bc220768d2b984239511cd4554a96bc0079 02-Feb-2012 Glenn Kasten <gkasten@google.com> mAudioHwDevs and related cleanup

Inline AudioFlinger::initCheck and remove unnecessary lock.

Remove redundant check of mAudioHwDevs.size().

No need to lock mHardwareLock for each device separately
during initialization.

Use size_t not int to loop through Vector, since size() returns size_t.

Add missing hardware lock for get_mic_mute() and get_input_buffer_size().

Add comments.

Change-Id: Iafae78ef78bbf65f703d99fcc27c2f4ff221aedc
b6333aa8317ce5162ab006c4baed6b0890936dc7 11-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "Simplify ThreadBase::exit() aka requestExitAndWait"
858df80948ee64f478782a6a6c06533ba1651ef1 11-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "Camel case readability & private disconnect(bool)"
c8ad36bbb30e99e49026cba78e5e0f83db5cb0f6 11-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "Use mul from audioutils"
b28686f95daee16edeb5f39af2cd5274ac3dc99f 06-Jan-2012 Glenn Kasten <gkasten@google.com> Simplify ThreadBase::exit() aka requestExitAndWait

We can remove mExiting and use Thread::exitPending() instead.

The local sp<> on "this" in exit() is not needed, since the caller must
also hold an sp<> in order to be calling us. (Unless it was using a raw
pointer, but that would be dangerous for other reasons.)

Add comment explaining the mLock in exit().

Change-Id: I319e5107533a1a7cdbd13c292685f3e2be60f6c4
0ba18ec1b343a8de70924f87630dd1f329b00fe6 10-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "No newline or space at end of ALOG format string"
8b5980798ca06e57b1284e6e23fa220e1207bf41 10-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "Fix typos in ALOG for pid vs tid"
58123c3a8b5f34f9d1f70264a3c568ed90288501 03-Feb-2012 Glenn Kasten <gkasten@google.com> Camel case readability & private disconnect(bool)

Change-Id: If66516ed2703e048c5e6ccc6cd431446a024f4a1
5b9ff43995f6a6b819d9ad37dd8cdc5ad4a088d7 09-Feb-2012 Glenn Kasten <gkasten@google.com> Use mul from audioutils

I verified that the disassembled output is identical.

Change-Id: I34a76f0842ebc4aef2c923e079e38d0bc1f98b5c
23d82a9bc9a43b49ba684ba40875b91db310d3b9 03-Feb-2012 Glenn Kasten <gkasten@google.com> Fix typos in ALOG for pid vs tid

Change-Id: I6dc70f137d0ff8a86427ab8882a81886e1de0782
90bebef5669a9385c706b042d146a31dca2e5d9b 28-Jan-2012 Glenn Kasten <gkasten@google.com> No newline or space at end of ALOG format string

Change-Id: I0bef580cbc818cb7c87aea23919d26f1446cec32
6637baae4244aec731c4014da72418d330636ae1 09-Jan-2012 Glenn Kasten <gkasten@google.com> Fix races related to volume and mute

Fix race conditions when setting master volume, master mute, stream
volume, stream mute for a playback thread, and when reading stream
volume of a playback thread. Lock order is AudioFlinger, then thread.

Rename streamVolumeInternal to streamVolume_l, comment, and use it to
implement streamVolume().

Code size reduction:
- Remove dead code: AudioFlinger::PlaybackThread::masterVolume, masterMute, streamMute.
- Change return type of non-binder methods that always succeed from status_t to void.
- Remove virtual from volume and mute methods that don't need it.

This change saves 228 bytes but decreases performance of binder operations
due to the added locks.

Change-Id: Iac75abc1f54784873a667d1981b2e08f8f31e5c9
02bbd20cece1785c223ac4ca2ddc635931a80673 08-Feb-2012 Glenn Kasten <gkasten@google.com> Rename type() to streamType()

This avoids possible confusion with thread's type().
Also remove redundant cast "(audio_stream_type_t)".

Change-Id: I320b9177b6c267a102d215f002228bcf988c437a
98ec94c5854daccc3474758524e7f4adfe535ce0 25-Jan-2012 Glenn Kasten <gkasten@google.com> Combine duplicate code & document wp<> in mClients

Change-Id: Iea8cfe8e57563337fb2484a1246ef79d6ad3db18
72ef00de10fa95bfcb948ed88ab9b7a177ed0b48 17-Jan-2012 Glenn Kasten <gkasten@google.com> Use audio_io_handle_t consistently instead of int

- add a comment to nextUniqueId
- made ThreadBase::mId const, since it is only assigned in constructor.

Change-Id: I4e8b7bec4e45badcde6274d574b8a9aabd046837
dbfafaffe2e97eaf8d74ec6b6c468418a1ad2443 26-Jan-2012 Glenn Kasten <gkasten@google.com> Simplify destructors

Remove explicit clear() when the order doesn't matter.

Change-Id: I5931bc7ef5f681c7ce329aa9ec0a6e46d34a56c5
5e92a7861196ddae14638d4b7a63fc4892b7ef59 30-Jan-2012 Glenn Kasten <gkasten@google.com> Effect UUID inputs passed by pointer are const

Change-Id: I1f5c338bcb7368e3dd8cd5f804b2e6d9fbe087f8
0a20fa9c41c96e31fa20e071074a4b6e7f6c41c3 08-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "Use pid_t not int"
b61ec89bb0c701b3bd06eb658f854230681f8b39 08-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "Don't double destruct audio_track_cblk_t"
63d2daed17ab749baa80bc808fb5083b688b771b 08-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "AudioFlinger methods const and inline"
e616d4e6de6d53ddebbc3d7fb381af94589c2232 08-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "Improve performance for sp<> on stack"
1579d7948117e3e6541b0cfda02cc5234a3280ea 08-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "Use 0 not NULL for sp<> and wp<>"
e98bbd36d67243fe987b09904956550a68af1cc7 08-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "Declare more IAudioFlinger methods const"
1a0ae5be3d1273cba12584b33830d859510fbf82 03-Feb-2012 Glenn Kasten <gkasten@google.com> Don't double destruct audio_track_cblk_t

Fortunately audio_track_cblk_t doesn't have a destructor, but for clarity
remove the double destruction.

Also add warning not to add any virtuals to audio_track_cblk_t.

Change-Id: I70ebe1a70460c7002145b2cdf10f9f137396e6f3
bb001926447d0b7dc71ca8bb3c9856f3136d8f4c 03-Feb-2012 Glenn Kasten <gkasten@google.com> Use pid_t not int

Change-Id: Iad1c2fd4152e94080ad8c65c13ddf4519fc2ed27
d5e54f7a36daedc3b2a642d1499c262da04e6280 26-Jan-2012 Glenn Kasten <gkasten@google.com> Remove dead code

mFormat is unused in resampler
mClientTid is unused
local variable pid is unused in dump

Change-Id: Ib156e38029366620bfeff2a13e73471867155a5b
f587ba5b991c7cd91e4df093d0d796bd419e5d67 27-Jan-2012 Glenn Kasten <gkasten@google.com> Declare more IAudioFlinger methods const

This is just documentation, as C++ method const-ness doesn't mean anything
for a binder API. Instead, here const means "no side effects".

Change-Id: Iaa9cd2fe477db10ae9a40cac4f79f0faa9b4e5e6
c59c004a3a6042c0990d71179f88eee2ce781e3c 02-Feb-2012 Glenn Kasten <gkasten@google.com> AudioFlinger methods const and inline

This saves 1063 bytes and probably improves performance.

Change-Id: I11cf0dfd925fbaec75e3d1b806852a538eae5518
7378ca506e4e20c2b2d4e94a131cf1b95831adb5 20-Jan-2012 Glenn Kasten <gkasten@google.com> Use 0 not NULL for sp<> and wp<>

Change-Id: Id1f0c89acefaceed6cb9ca7c165fce895e46d85b
787bae0578fbaab6219ebf23494866b224d01438 03-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "Use audio_in_acoustics_t consistently"
a0d68338a88c2ddb4502f95017b546d603ef1ec7 28-Jan-2012 Glenn Kasten <gkasten@google.com> Use NULL not 0 for raw pointers

Use if (p != NULL) instead of if (ptr)

Change-Id: Iaec3413a59ccbf233c98fcd918cc7d70ac5da9fa
87f155d6655b2d3b27e69281a29e85c6407e4d26 03-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "For performance, return large objects by reference"
f81e97e4ec8b01965a5b36987f886cf5001f71ff 03-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "No need to check a wp<> for 0 before promote()"
84afa3b51ac48f84ed62489529ce78cba7fca00e 26-Jan-2012 Glenn Kasten <gkasten@google.com> Constructor initialization and const fields

In constructors, initialize member fields in the initialization list
rather than constructor body where possible. This allows more fields
to be const, provided they are never modified.

Also initialize POD fields in constructor, unless it's obvious they
don't need to be initialized. In that case, put a comment instead.

Remove explicit clear() in destructors on fields that are now const.

Give AudioSessionRef a default constructor, so it's immutable fields can
be marked const.

Add comment about ~TrackBase() trick.

Initialize fields in declaration order to make it easier to confirm that
all fields are set.

Move initialization of mHardwareStatus from onFirstRef() to constructor.

Use NULL not 0 to initialize raw pointers in initialization list.

Rename field mClient to mAudioFlingerClient, and getter from client()
to audioFlingerClient().

Change-Id: Ib36cf6ed32f3cd19003f40a5d84046eb4c122052
5c0ad10b14ec2287f90f95912d98e66eef006e2a 03-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "Cleanup thread types"
62da7fbd60bee2dd57f503126266e9f04311d400 03-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "Make AudioTrack control block volume field private"
d45ee9d9d61af0791c7c3c51f8d4fe6794ef02a5 02-Feb-2012 Glenn Kasten <gkasten@google.com> Merge "Fix const sp<>& in parameter list and return value"
d05397144be774f2f3623c754e865f51753e4e31 30-Jan-2012 Glenn Kasten <gkasten@google.com> For performance, return large objects by reference

Change-Id: Ibf737018ef1d3c7d717584615dcb2d4ecdb50c99
090f01963e215f895020a31e22368cd44e086ce3 30-Jan-2012 Glenn Kasten <gkasten@google.com> Improve performance for sp<> on stack

Combine default constructor for sp<> immediately followed by assignment,
as the reference-counting is relatively slow. Also return sp<> directly
rather than via local variable, for the same reason.

Change-Id: If55931f1e407994f6591ddde41b53db72fb4fc40
435dbe6c3ecd04bcb4bd80584064e287ebccd720 30-Jan-2012 Glenn Kasten <gkasten@google.com> Fix const sp<>& in parameter list and return value

EffectModule::addHandle and Client::heap() were declared incorrectly.

As a parameter, an sp<> should be & for efficiency, and for input
parameters it should also be const to protect the caller's value.

But as a return value, an sp<> should have neither const or &. The "e"
in "return e;" might be located on the stack, and if there is "&" then
the caller would see the address of a variable which no longer exists.
Also, an & would make it hard to do "return 0;".
A "const" without & is meaningless in the return type.
(In this particular case, the "e" is a member field, so it was safe.)

Change-Id: I3df5f294214eb15a9d4d596c6d5ef29de97b5c27
e9dd0176933d6233916c84e18f3e8c0d644ca05d 28-Jan-2012 Glenn Kasten <gkasten@google.com> Unconditional delete

Don't check that pointer is non-NULL before delete.

Don't leave deleted member fields non-NULL, except in a destructor,
since it could be misleading in a dump or debugger. (mRsmpOutBuffer)

Change-Id: Ic0492a6b752f74a67f4c96dfb89ca2de4e69eecf
77c1119ea0b5cb32287088ceeeb7e3b6bd14a85d 25-Jan-2012 Glenn Kasten <gkasten@google.com> No need to check a wp<> for 0 before promote()

Also remove unnecessary wp<> local variable.

Change-Id: I620e67b5d559d28616f8e00609a525cfe19c5ddc
de9719b3ec71472e6bf75117152176af51d1a515 27-Jan-2012 Glenn Kasten <gkasten@google.com> Use audio_in_acoustics_t consistently

Change-Id: I0a9dd668fb2e57b1c3ece3190588194974b99062
a3a2cd4072aaa2d93c91251a786eb7323f8d2c27 27-Jan-2012 Glenn Kasten <gkasten@google.com> Merge "AudioStreamIn and AudioStreamOut"
6f5980b75df837231365d238c1b0d6f386363fbb 27-Jan-2012 Glenn Kasten <gkasten@google.com> Merge "Declare methods in binder opcode order"
114c458f2b80a252ec627add1d5fda2093c79068 27-Jan-2012 Glenn Kasten <gkasten@google.com> Merge "Use enum track_state consistently"
aed850d0d3b3c8cf3feaf1438076f33db2a60946 26-Jan-2012 Glenn Kasten <gkasten@google.com> AudioStreamIn and AudioStreamOut

These are immutable, so make the fields const.
getOutput() and getInput() methods are now const.

Change-Id: I128246ebd56ea50b3e542be43f2aa1bcb55f1373
23bb8becff20449a9b1647d5a1a99b14c83f0cce 26-Jan-2012 Glenn Kasten <gkasten@google.com> Cleanup thread types

Use type_t instead of int for thread types.
Initialize ThreadBase::mType in constructor and make it const.

Change-Id: I43d141388b9639e4783c30b97dbda5688bf7555f
90716c5728b37637b2d0a730a721bfc9fad299e0 26-Jan-2012 Glenn Kasten <gkasten@google.com> Declare methods in binder opcode order

This makes it easier to compare interface and implementation.

Change-Id: Ie060e43dec348902abcf40f5a610cec639d6d0d3
29c23c3aee5ae799b3480dc6876a46c46b019710 26-Jan-2012 Glenn Kasten <gkasten@google.com> Use enum mixer_state consistently

Change-Id: I5b71ed20f939dfc4b98143334b7aa064d282f584
b853e986caf43408ad95b9014f194aadff385e3c 26-Jan-2012 Glenn Kasten <gkasten@google.com> Use enum track_state consistently

Change-Id: Ie5ebb7befa092e1de1e4df9c6e2d51e6bcfd176a
9365ea9bf2e439b3e71abbabe22ce7382ebc4b3a 25-Jan-2012 Eric Laurent <elaurent@google.com> am 535b0264: am 7eeaf3f0: Merge "AudioFlinger: refine mixer sleep time logic" into ics-mr1

* commit '535b0264a4cfa790e549bd9cd09980788f1375f4':
AudioFlinger: refine mixer sleep time logic
84e19873fde204d73628ba1b5ca9e3f5778574fa 24-Jan-2012 Eric Laurent <elaurent@google.com> am 7eeaf3f0: Merge "AudioFlinger: refine mixer sleep time logic" into ics-mr1

* commit '7eeaf3f07aa6fb10639d9f96c1367eb98c3e8839':
AudioFlinger: refine mixer sleep time logic
7c5aea0a8d9b422999483f96a2566f77ff11abf2 24-Jan-2012 Eric Laurent <elaurent@google.com> am 41773d46: Merge "DO NOT MERGE Revert "Revert "AudioFlinger: mix track only when really ready (2)""" into ics-mr1

* commit '41773d46556aa47d4322ff89fdaf7d1345c2d1f2':
DO NOT MERGE Revert "Revert "AudioFlinger: mix track only when really ready (2)""
21e4b6ed00e814bffc70895847a4944d7a190020 24-Jan-2012 Eric Laurent <elaurent@google.com> AudioFlinger: refine mixer sleep time logic

When an AudioTrack is in underrun state, the AudioFlinger mixer will
sleep for a short period of time to give the app a chance to fill the
AudioTrack buffer. If the AudioTrack is still not ready during next mixing round,
the mixer will proceed with other tracks.

If an application keeps a steady underrun condition, the AudioFlinger mixer will
alternate between ready and not ready states. In the longer term this will cause the
audio HAL to underrun.
There is a mechanism to reduce the sleep period if the mixer is not ready several times in a
row but this mechanism is defeated by the alternating ready/not ready conditions.

The fix consists in only increasing sleep time if the mixer is ready for at least two
consecutive times.

Issue 5904527.

Change-Id: Id0139bca9be8c4e425ec6d428515c4d8f718e8c9
eaa0b5cc2f7723e9b25298126d0dcb48c56d5dac 24-Jan-2012 Eric Laurent <elaurent@google.com> DO NOT MERGE Revert "Revert "AudioFlinger: mix track only when really ready (2)""

This reverts commit b918035d34422a2041b6ec8c09c566bb93345b40.

Change-Id: I093bcfa56ad54a080b930208b6b79169d33581fb
15dfda272eec983508b89fb8bc9ca6f2bb825496 24-Jan-2012 Justin Ho <justinho@google.com> am fee5a860: Merge "DO NOT MERGE Revert "AudioFlinger: mix track only when really ready (2)"" into ics-mr1

* commit 'fee5a860a8355cda071ff23644e943414ba7f65d':
DO NOT MERGE Revert "AudioFlinger: mix track only when really ready (2)"
7baf7894bc2f1a62440f381eeb50143f210a5d61 23-Jan-2012 Justin Ho <justinho@google.com> DO NOT MERGE Revert "AudioFlinger: mix track only when really ready (2)"

This reverts commit 71c4496a9757438afd30b4404824f296f6158a49.

Change-Id: Iff10c49ea728bb10023ddeb50a3b708db770fff2
335787fe43596f38ea2fa50b24c54d0823a3fb1d 21-Jan-2012 Glenn Kasten <gkasten@google.com> Remove AudioFlinger dependencies on client

Change-Id: Ibb591e41a3ca5d7015e2b66b98b8fef5f415fb37
83d86538c4c479a9225c75ab27938e8f05abb9c8 17-Jan-2012 Glenn Kasten <gkasten@google.com> Make AudioTrack control block volume field private

This is part of the process of abstracting the control block
to make it easier to maintain.

Change-Id: Idb8f461e68dab3bcf268159cc0781651c6fb7094
58f30210ea540b6ce5aa6a46330cd3499483cb97 12-Jan-2012 Glenn Kasten <gkasten@google.com> Use audio_format_t consistently, continued

Was int or uint32_t.

When AudioFlinger::format can't determine the correct format,
return INVALID rather than DEFAULT.

Init mFormat to INVALID rather than DEFAULT in the constructor.
Subclass constructors will set mFormat to the correct value.

Change-Id: I9b62640aa107d24d2d27925f5563d0d7407d1b73
d967f0a099db2b71597a3127134afd4a46287a4a 20-Jan-2012 Glenn Kasten <gkasten@google.com> Merge "Remove redundant get()"
7fc9a6fdf146ded90b51c52f4a05d797294dcb85 10-Jan-2012 Glenn Kasten <gkasten@google.com> Remove redundant get()

get() is almost always unnecessary, except in a LOG.
Also no need to check for != 0 before calling get().

Change-Id: Ib06e7a503f86cf102f09acc1ffb2ad085025516d
d746737921074e2a6c39c52b06022c5166689df5 20-Jan-2012 Jean-Baptiste Queru <jbq@google.com> am 6df477be: Merge "Rename (IF_)LOGE(_IF) to (IF_)ALOGE(_IF)"

* commit '6df477be186233e36fc370c4d2db6c1ed928a740':
Rename (IF_)LOGE(_IF) to (IF_)ALOGE(_IF)
daef36f5d4934bd055c694a8d54b86e2b50a6159 20-Jan-2012 Jean-Baptiste Queru <jbq@google.com> am a826f9e2: Merge "Rename (IF_)LOGW(_IF) to (IF_)ALOGW(_IF)"

* commit 'a826f9e2c4f6329d8d48c927f6e942e78ffaf92f':
Rename (IF_)LOGW(_IF) to (IF_)ALOGW(_IF)
3734cbca25c6d902677cfb5e59dff7a1cb17a45d 20-Jan-2012 Jean-Baptiste Queru <jbq@google.com> am 4f367f33: Merge "Rename (IF_)LOGI(_IF) to (IF_)ALOGI(_IF)"

* commit '4f367f3387887c538c81c34cc8becaea6fa5e430':
Rename (IF_)LOGI(_IF) to (IF_)ALOGI(_IF)
e744a90eb52bf9547848c08380cfb7ba7e63ffbc 20-Jan-2012 Jean-Baptiste Queru <jbq@google.com> am ba7f0d2a: Merge "Rename (IF_)LOGD(_IF) to (IF_)ALOGD(_IF)"

* commit 'ba7f0d2a03643ce429421b81febf18fd50473070':
Rename (IF_)LOGD(_IF) to (IF_)ALOGD(_IF)
ca05a87f4c69670a06bdee4b4f98bcdcd838beda 20-Jan-2012 Jean-Baptiste Queru <jbq@google.com> Merge ee4618bc

Change-Id: Ie1dc6ad38e7c30636d80f6caef11cf6673144940
9a8ded7348c5b2302dd27b285b395416bc842c49 06-Jan-2012 Steve Block <steveblock@google.com> Rename (IF_)LOGE(_IF) to (IF_)ALOGE(_IF)

Change-Id: I1de629b4632a4b3187ca1a28d6416daccd35f924
aa70226152d2084f85a96b52359dbc8476a86a45 06-Jan-2012 Steve Block <steveblock@google.com> Rename (IF_)LOGW(_IF) to (IF_)ALOGW(_IF)

Change-Id: I8fbdfa7a7581f481968dbb65aa40f7042936d7cb
53feeb42c721e8fc9285e35e679906a951f3277c 04-Jan-2012 Steve Block <steveblock@google.com> Rename (IF_)LOGI(_IF) to (IF_)ALOGI(_IF)

Change-Id: I26f76452ac49e2890b14d133c065493d8df0fb4a
52546c0ef96aa3e7e21482e0f9b6e982557c8da9 20-Dec-2011 Steve Block <steveblock@google.com> Rename (IF_)LOGD(_IF) to (IF_)ALOGD(_IF)

Change-Id: I44f267700356967dc51e8f85ebf457dc85cfb229
3812256de32e73e38ba16e50ac0451c10223d4eb 20-Oct-2011 Steve Block <steveblock@google.com> Rename (IF_)LOGV(_IF) to (IF_)ALOGV(_IF)

Change-Id: I5321ebd12e9c6248a108529e82c4e1af2a4405e3
aeeb7e219e34d2d657d829913659a4e10e976375 19-Jan-2012 Eric Laurent <elaurent@google.com> resolved conflicts for merge of 05683c85 to master

Change-Id: I7846b7da8c5813b7a9b1f3f71aede0229689ff0d
f1d4592d4c3c99ebab55559e164ff102e825283e 14-Jan-2012 Glenn Kasten <gkasten@google.com> For booleans, use ! instead of == false

Change-Id: Ibc115936d2d0b0b7744ebe9b52839ea5b42c4edd
2774144fa8283f1a7b43e17a53c97dec0c366dd3 18-Jan-2012 Eric Laurent <elaurent@google.com> AudioFlinger: mix track only when really ready (2)

This problem due to the way audio buffers are mixed when
low power mode is active was addressed by commits 19ddf0eb
and 8a04fe03 but only partially. As a matter of fact, when more
than one audio track is playing, the problem is still present.
This is most noticeable when playing music with screen off
and a notification or navigation instruction is played: in this case,
the music or notification is likely to skip.

The fix consists in declaring the mixer ready if all active tracks
are ready. Previous behavior was to declare ready if at least one track was
ready. To avoid that one application failing to fill the track buffer blocks other
tracks indefinitely, this condition is respected only if the mixer was ready
in the previous round.

Issue 5799167.

Change-Id: Iabd4ca08d3d45f563d9824c8a03c2c68a43ae179
b1cf75c4935001f61057989ee3cf27bbf09ecd9c 17-Jan-2012 Glenn Kasten <gkasten@google.com> Track volume cleanup

Always read and write track volumes atomically. In most places this was
already being done, but there were a couple places where the left and
right channels were read independently.

Changed constant MAX_GAIN_INT to be a uint32_t instead of a float.
It is always used as a uint32_t in comparisons and assignments.
Use MAX_GAIN_INT in more places.

Now that volume is always accessed atomically, removed the union
and alias for uint16_t volume[2], and kept only volumeLR.

Removed volatile as it's meaningless.

In AudioFlinger, clamp the track volumes read from shared memory
before applying master and stream volume.

Change-Id: If65e2b27e5bc3db5bf75540479843041b58433f0
ad0f6cc5e115ca167ff122c83451b46d85c590ac 17-Jan-2012 Glenn Kasten <gkasten@google.com> Remove dead setVolume() and mVolume[2]

Change-Id: I94b835434093e920432614eb5007101e87758f32
0696400a6bb9abbed62b3b9c6aa105495dc600a2 17-Jan-2012 Glenn Kasten <gkasten@google.com> Merge "Use audio_mode_t consistently"
263709e7be37c7040aaef385bc5c9389a9b5f514 06-Jan-2012 Glenn Kasten <gkasten@google.com> Check stream type in AudioFlinger::createTrack

A bad parameter to AudioFlinger::createTrack could cause mediaserver to crash.

Other AudioFlinger stream type cleanup:
- Simplify range check for audio_stream_type_t
- Add comment about mStreamTypes array initialization.

Change-Id: Ia33aa1cce0fdd694b08d9288816ffc097a9543d0
3944e0326a286bcb931551e61e79c033b10d09d4 17-Jan-2012 Glenn Kasten <gkasten@google.com> Merge "Fix locking for mMasterVolume and mMute"
613882293184e575a44bff681a3decaefe889e69 17-Jan-2012 Glenn Kasten <gkasten@google.com> Merge "Use size_t for frame size"
0107954f72153db747a3727dc1157e9236dfed90 17-Jan-2012 Glenn Kasten <gkasten@google.com> Merge "Use audio_stream_type_t consistently"
9806710f5d6722cfc5783c7eca3512451a0f2035 13-Dec-2011 Glenn Kasten <gkasten@google.com> Fix locking for mMasterVolume and mMute

mMasterVolume and mMute are both protected by mutex in AudioFlinger class, but
there were two places where they were accessed without a mutex.

Also make AudioFlinger::mMasterMute private not protected.

Change-Id: Ia3897daeb5c50313df5bcc071824357526237f3e
05632a5fa4b88ca474294887fc92a9fcdf0e2352 03-Jan-2012 Glenn Kasten <gkasten@google.com> AudioTrack and AudioFlinger send level cleanup

Add an API to control block for getting/setting send level.
This allow us to make the mSendLevel field private.

Document the lack of barriers.

Use 0.0f to initialize floating-point values (for doc only).

Change-Id: I59f83b00adeb89eeee227e7648625d9a835be7a4
b9980659501d0428d65d8292f3c32da69d37fbd2 11-Jan-2012 Glenn Kasten <gkasten@google.com> Use size_t for frame size

except in the control block, where we don't have room.

In AudioFlinger::ThreadBase::TrackBase::getBuffer,
read the frame size from control block only once.

Change-Id: Id6c4bccd4ed3e07d91df6bbea43bae45524f9f4e
fff6d715a8db0daf08a50634f242c40268de3d49 13-Jan-2012 Glenn Kasten <gkasten@google.com> Use audio_stream_type_t consistently

At native level it was a mixture of audio_stream_type_t, int, uint32_t,
and uint8_t. Java is still int. Also fixed a couple of hard-coded -1
instead of AUDIO_STREAM_DEFAULT, and in startToneCommand a hard-coded 0

Change-Id: Ia33bfd70edca8c2daec9052984b369cd8eee2a83
f78aee70d15daf4690de7e7b4983ee68b0d1381d 04-Jan-2012 Glenn Kasten <gkasten@google.com> Use audio_mode_t consistently

It was int or uint32_t.
Also make getMode() const.

Change-Id: Ibe45aadbf413b9158e4dd17f2b3bcc6355288d37
e3a067f8bc98134941ee1a4da8c2a92a15aaa9cc 11-Jan-2012 Glenn Kasten <gkasten@google.com> Merge "Simplify range check for audio_mode_t"
c40256146bee58bff09e1c16ef99ea06d31f89f9 11-Jan-2012 Glenn Kasten <gkasten@google.com> Merge "Use correct type for hardware call state"
2ea3410d0d3d592ce30c3ba0ce3e0e63b1244057 11-Jan-2012 Glenn Kasten <gkasten@google.com> Merge "Use consistent style of & reference for AutoMutex"
9770988e61961d34033fd2c12f0de85a267df68f 11-Jan-2012 Glenn Kasten <gkasten@google.com> Merge "AudioFlinger new can't fail"
930f4caa1e311ef7ff538c421a324396157eb24f 07-Jan-2012 Glenn Kasten <gkasten@google.com> Simplify range check for audio_mode_t

AudioSystem::setMode previously allowed negative modes, but these were
then rejected by AudioFlinger.

Now negative modes (including AUDIO_MODE_INVALID and AUDIO_MODE_CURRENT)
are explicitly disallowed.

Change-Id: I0bac8fea737c8eb1f5b6afbb893e48739f88d745
c1dc1cb1d1eaf84e88669f1a5f22579a0d9237c2 09-Jan-2012 Steve Block <steveblock@google.com> Rename LOG_ASSERT to ALOG_ASSERT DO NOT MERGE

See https://android-git.corp.google.com/g/157519

Bug: 5449033
Change-Id: I8ceb2dba1b031a0fd68d15d146960d9ced62bbf3
25b248eb52a0a16adaef6b79c9d92cb88b9a2bc2 04-Jan-2012 Glenn Kasten <gkasten@google.com> Use cached reference to media.player service

This save unnecessary binder calls

Change-Id: I93a60efc54d9c8fb8fab706cd4477bbfd00ffec8
febdbfec3b1ed0e20aa4f10bfdd82702d3e41f4b 09-Jan-2012 Glenn Kasten <gkasten@google.com> Merge "suspended() and isSuspended() are const"
29357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47 06-Jan-2012 Steve Block <steveblock@google.com> Rename (IF_)LOGE(_IF) to (IF_)ALOGE(_IF) DO NOT MERGE

See https://android-git.corp.google.com/g/#/c/157220

Bug: 5449033
Change-Id: Ic9c19d30693bd56755f55906127cd6bd7126096c
4a6f02833d8421b7d9b20f89729d8bb03b8b8102 07-Jan-2012 Glenn Kasten <gkasten@google.com> AudioFlinger new can't fail

Change-Id: I7dae05a5ea1c962a9975386eab1fedbbe106ffba
a7d8d6fc5e102a08b262a1b78aa1abeeb097d9e4 06-Jan-2012 Glenn Kasten <gkasten@google.com> Use consistent style of & reference for AutoMutex

AutoMutex, which is a typedef for Mutex::Autolock, is overloaded for
either a reference (&) or pointer (*) parameter, but we prefer to use
the reference form when the mutex is known at compile time.

Change-Id: I3515e6d6ab7959b2356a27fa3b04fd49e42cb31e
a4454b4765c5905f14186893b0688be375642283 04-Jan-2012 Glenn Kasten <gkasten@google.com> Use correct type for hardware call state

Change-Id: Ic6d98b129e3ec653df1d8f7e829adf8dccb4f378
5ff1dd576bb93c45b44088a51544a18fc43ebf58 06-Jan-2012 Steve Block <steveblock@google.com> Rename (IF_)LOGW(_IF) to (IF_)ALOGW(_IF) DO NOT MERGE

See https://android-git.corp.google.com/g/157065

Bug: 5449033
Change-Id: I00a4b904f9449e6f93b7fd35eac28640d7929e69
8a08dcc0a5de19a904e77d5f31bed3dff9a59890 05-Jan-2012 Steve Block <steveblock@google.com> Merge "Rename (IF_)LOGI(_IF) to (IF_)ALOGI(_IF) DO NOT MERGE"
a3a854868a80fd9b9b8720e06a172754943f9417 04-Jan-2012 Glenn Kasten <gkasten@google.com> suspended() and isSuspended() are const

Change-Id: I04b95970b5a645b64e7e64fffd46d868354dda66
88592eccaf6afcddd5f985955be92fe25205c680 05-Jan-2012 Glenn Kasten <gkasten@google.com> Merge "Remove the notion of "active track" from mixer"
a2a0a5d7d56baa831870f4bf2a0d942a477d92ef 05-Jan-2012 Glenn Kasten <gkasten@google.com> Merge "Use the standard CC_LIKELY and CC_UNLIKELY macros"
f6b1678f8f508b447155a81b44e214475ab634a8 15-Dec-2011 Glenn Kasten <gkasten@google.com> Use the standard CC_LIKELY and CC_UNLIKELY macros

Several source files privately defined macros LIKELY and UNLIKELY in terms
of __builtin_expect. But <cutils/compiler.h> already has CC_LIKELY and
CC_UNLIKELY which are intended for this purpose. So rename the private
uses to use the standard names.

In addition, AudioFlinger was relying on the macro expanding to extra ( ).

Change-Id: I2494e087a0c0cac0ac998335f5e9c8ad02955873
7ab41c9f773ba599646f1b0d00955c1be80f92fd 05-Jan-2012 Eric Laurent <elaurent@google.com> resolved conflicts for merge of 1a4b9939 to master

Change-Id: I0c910d391a38a916d8431f7d1f5b82e39e1a66c2
df64d15042bbd5e0e4933ac49bf3c177dd94752c 04-Jan-2012 Steve Block <steveblock@google.com> Rename (IF_)LOGI(_IF) to (IF_)ALOGI(_IF) DO NOT MERGE

See https://android-git.corp.google.com/g/156801

Bug: 5449033
Change-Id: Ib08fe86d23db91ee153e9f91a99a35c42b9208ea
b8a805261bf0282e992d3608035e47d05a898710 20-Dec-2011 Steve Block <steveblock@google.com> Rename (IF_)LOGD(_IF) to (IF_)ALOGD(_IF) DO NOT MERGE

See https://android-git.corp.google.com/g/156016

Bug: 5449033
Change-Id: I4c4e33bb9df3e39e11cd985e193e6fbab4635298
071ccd5a9702500f3f7d62ef881300914926184d 23-Dec-2011 Eric Laurent <elaurent@google.com> audioflinger: fix clicks on 48kHz audio.

The calculation done in prepareTracks_l() for the minimum amount
off frames needed to mix one output buffer had 2 issues:
- the additional sample needed for interpolation was not included
- the fact that the resampler does not acknowledge the frames consumed
immediately after each mixing round but only once all frames requested have been used
was not taken into account.
Thus the number of frames available in track buffer could be considered sufficient although
it was not and the resampler would abort producing a short silence perceived as a click.

Issue 5727099.

Change-Id: I7419847a7474c7d9f9170bedd0a636132262142c
9c56d4ae6212c21ce5fd71ed534eb195983a07c1 20-Dec-2011 Glenn Kasten <gkasten@google.com> Remove the notion of "active track" from mixer

This is a first step towards making the mixer more object-oriented.

Change-Id: Ifd445d0e471023a7f5c82e934736ffc95ba1b05b
bbaf8673f1d1dd79d1b7f474ca7111da58e84aff 20-Dec-2011 Eric Laurent <elaurent@google.com> Merge "audio effects: rename configure command"
3d5188bd6abe55898f10a0edf3c05aff8aa2ef67 17-Dec-2011 Eric Laurent <elaurent@google.com> audio effects: rename configure command

Renamed audio effect library interface command for audio format
This makes the naming more consistent with other exixsting commands
and allow adding a new command to get the configuration (EFFECT_CMD_GET_CONFIG).
Same change for reverse channel configuration renamed from

Implemented EFFECT_CMD_GET_CONFIG in exisitng effect libraries.

Change-Id: Ia7b1c620f13797fe5aceb3b0b4acbacce09fb067
d1e672acd8fa1af899f85ee2321327237028adf8 17-Dec-2011 Glenn Kasten <gkasten@google.com> Merge "Extract out audio DSP code to utility library"
3b21c50ef95fe4e7ac3426ca14b365749e66ff08 15-Dec-2011 Glenn Kasten <gkasten@google.com> Extract out audio DSP code to utility library

Change-Id: Ib8ce72028a7ea30e82baa518e381370e820ebbd0
b87c068727a15a3d3f0bfdcb758c76a097f5e869 16-Dec-2011 Glenn Kasten <gkasten@google.com> Merge "Simplify enable/disable mixing"
079123ee3d2e20bbc17a7ddbd96ca46bed27898f 16-Dec-2011 Glenn Kasten <gkasten@google.com> Merge "Improve resistance to leaks for ConfigEvent"
26fa039c3752eaaf74d1be53d9795f48e9f43de3 16-Dec-2011 Glenn Kasten <gkasten@google.com> Merge "Use NULL not 0 for pointers"
1c48c3c61970527b97892ab6a2daae8eaac26964 15-Dec-2011 Glenn Kasten <gkasten@google.com> Simplify enable/disable mixing

The MIXING enum isn't needed, and now returns void instead of status_t.

Change-Id: Ibe4ec24081d75ad4ab78b9c7191fc9077959c4e9
f3990f2cc8fd824ae52a880a7b22248e1bdfb192 13-Dec-2011 Glenn Kasten <gkasten@google.com> Improve resistance to leaks for ConfigEvent

A Vector of pointers is risky, as there is no ownership (and the
ThreadBase destructor was not deleting them, so if there were any left
over at end it would leak). Replaced by a Vector of values.

Change-Id: Iddde72dc30134adfcf724dec26cbe0a742509b8c
e0feee3da22beeffbd9357540e265f13b2119cbb 13-Dec-2011 Glenn Kasten <gkasten@google.com> Use NULL not 0 for pointers

Change-Id: Iab3f9abbdab617dc5a599e657ec46a0b0a002eef
42968939dfce0954d6540011199045ec4ed7de80 15-Dec-2011 Glenn Kasten <gkasten@google.com> Merge "Fix indentation and whitespace"
a06a9a50b37d60e9c43c9de9f8ea3a8649cd5691 15-Dec-2011 Glenn Kasten <gkasten@google.com> Merge "Improve AudioFlinger error logging"
d879601ace079e3c0aed79cf3fa5fb4db6ad4a9f 28-Oct-2011 Glenn Kasten <gkasten@google.com> Improve AudioFlinger error logging

Change-Id: I8ce9aff4038cd7fa0067600faa8080b137db1939
2eda60a8485cfe70a60e72156beffdc470ecb093 15-Dec-2011 Glenn Kasten <gkasten@google.com> Merge "Audio C++ comments"
c5ac4cb3a5124860ccfc7e4ff66251c55a5595ca 12-Dec-2011 Glenn Kasten <gkasten@google.com> Fix indentation and whitespace

Use git diff -w to verify.

Change-Id: Ib65be0a1ecf65d6cad516110604e3855bf68a638
c23bd9b5b9e4be9c395789810fdd8522296fc50c 15-Dec-2011 Glenn Kasten <gkasten@google.com> Merge "Use const char correctly in AudioFlinger"
e5dfcd8c6792c4b64120fd03708729b70a887f2a 15-Dec-2011 Glenn Kasten <gkasten@google.com> Merge "Use units after all times"
362c4e697d8e9c034e964ac7b40227e054491547 14-Dec-2011 Glenn Kasten <gkasten@google.com> Audio C++ comments

Change-Id: I84906ebb9dfcfa5b96b287d18364b407f02a30c1
91eb8bfbe253a6b6fe1aa23fb884a601c28991c4 13-Dec-2011 Glenn Kasten <gkasten@google.com> Remove redundant clear()

Change-Id: Ie5e4e63cbc8fa85ef50451dddf8f149fa864b132
ec1d6b5e17281a066d618f7fcd2b63b3ce11f421 12-Dec-2011 Glenn Kasten <gkasten@google.com> Use const char correctly in AudioFlinger

Use const char [] instead of const char * to eliminate unnecessary pointer.
Make the array audio_interfaces also const, in addition to the strings.

Change-Id: I31f33d1dcb9a657ee136f4280fd2d46492496831
7dede876998ff56351d495ec3a798c1b131193e8 13-Dec-2011 Glenn Kasten <gkasten@google.com> Use units after all times

Change-Id: I48d3f29c37228b5d03189e4c9600824c9360cac9
2013d4d159bfc29b4143d3b5fd4735f51a03684c 06-Dec-2011 Eric Laurent <elaurent@google.com> am 5433e25f: am 7b6aff23: Merge "audioflinger: fix audio skipping over A2DP" into ics-mr1

* commit '5433e25f6ce013860ff2a074ad8d1158cc39ab91':
audioflinger: fix audio skipping over A2DP
162b40bbaf3c3a24f61a6636bef6f80a9c0a31dd 05-Dec-2011 Eric Laurent <elaurent@google.com> audioflinger: fix audio skipping over A2DP

The maximum sleep time allowed in the mixer thread when audio tracks
are enabled but not ready for mixing is derived from the latency
reported by the output stream.
This does not work for A2DP where the latency also reflects encoding, decoding
and transfer time.

Modified activeSleepTimeUs() to take A2DP case into account.

Issue 5682206.

Change-Id: I3784ac01fb6f836b5a6ce6f764fb15347586de35
926798f8c21ab002d9797ef8973852a2612c1f75 23-Nov-2011 Eric Laurent <elaurent@google.com> am f6422f5f: am 20398fac: Merge "audioflinger: reduce sleep time to avoid underrun" into ics-mr1

* commit 'f6422f5f5d04aab47f8f36a0ea92e2140bed0105':
audioflinger: reduce sleep time to avoid underrun
7cafbb32999049873d4746ba83bd20c88abe6ce6 23-Nov-2011 Eric Laurent <elaurent@google.com> audioflinger: reduce sleep time to avoid underrun

Progressively reduce the sleep time applied in MixerThread::threadLoop()
in case of consecutive application underruns to avoid starving the audio HAL.
As the default sleep time is longer than the duration of an audio buffer
we ended up writing less data than needed by the audio HAL if
the condition persisted.

Issue 5553055.

Change-Id: I2b23ee79c032efa945025db228beaecd1e07a2e5
c4795ecad4e5a0b3ec54862a40c82ef1ba53cd59 14-Nov-2011 Eric Laurent <elaurent@google.com> am 25924f8f: am 030bb998: Merge "audioflinger: fix noise when skipping to next song" into ics-mr1

* commit '25924f8f6c0a4ca4a2eb257b72d9625f69d2525e':
audioflinger: fix noise when skipping to next song
544fe9b6e9325701df4ab8c1d29774fc13c4cf6c 12-Nov-2011 Eric Laurent <elaurent@google.com> audioflinger: fix noise when skipping to next song

When audio effects are enabled, a noise can be heard at the
beginning of the new song when skipping to next song in music app.

This is because some effects (especially virtualizer) have a tail.
This tail was not played when previous song was stopped because effects were
not processed when no tracks were present on a given session. This is to
reduce CPU load when effects are enabled but no audio is playing.
The tail was then rendered when the new song was started.

Added a delay before stopping effect process after all tracks have been removed from a session.

Issue 5584880.

Change-Id: I815e0f7441f9302e8dfe413dc269a94e4cc6fd95
6977ca7d5ffdbc1610a95c74653b1fbe6a665f32 10-Nov-2011 Eric Laurent <elaurent@google.com> am db7d79e6: am 2b7f91b9: Merge "Fix regression for SoundPool playback" into ics-mr1

* commit 'db7d79e6f1e1860a9bfe4756a03c753435fd0ddf':
Fix regression for SoundPool playback
a47b69c6f7c6fe0044ebcb2d0790ce3548de56fd 09-Nov-2011 Eric Laurent <elaurent@google.com> Fix regression for SoundPool playback

Commit 19ddf0eb introduced a problem with applications (like SoundPool)
relying on an underrun condition to detect end of playback instead of
stopping the track when all data is written.
AudioFlinger would keep waiting for new data in case of partial buffer
filling and never reach the underrun condition.

Added a mechanism to wait no more than once if not enough frames are present
in the track buffer.

Issue 5585490.

Change-Id: I131e605ff6070831a01ddf734e68459e3bf2354b
3b86c964df855a9740c446e984309b719c3ec37c 08-Nov-2011 Eric Laurent <elaurent@google.com> am f3a892ab: Merge "AudioFlinger: mix track only when really ready" into ics-mr1

* commit 'f3a892ab9347ce733b81ccb4913a91c586f8f367':
AudioFlinger: mix track only when really ready
3dbe3201479828e84abe02e1fdd0a5d414c0ddb8 03-Nov-2011 Eric Laurent <elaurent@google.com> AudioFlinger: mix track only when really ready

The addition of low power audio playback mode made that audio buffer consumption
by audio HAL can now happen in bursts. This makes that requesting audio data
from an AudioTrack for mixing can happen at much shorter intervals than before.
This revealed an existing problem where AudioFlinger would consider a track ready
for mixing although not enough frames were ready to completely fill one output buffer,
thus creating short periods of silence.

The fix consists in waiting for enough frames to be ready in AudioTrack buffer before
declaring a track ready for mixing. This minimum is not applied when the track is stopped
to allow the buffer to be emptied completely.

Change-Id: I6d04f9b65db5af85b0b53f0a5674be7ec02f9e9f
3856b090cd04ba5dd4a59a12430ed724d5995909 20-Oct-2011 Steve Block <steveblock@google.com> Rename (IF_)LOGV(_IF) to (IF_)ALOGV(_IF) DO NOT MERGE

See https://android-git.corp.google.com/g/#/c/143865

Bug: 5449033
Change-Id: I0122812ed6ff6f5b59fe4a43ab8bff0577adde0a
a85a74a8219c03f2b1d1ef98f3f02e55f89f89a3 19-Oct-2011 Eric Laurent <elaurent@google.com> Fix issue 381905: BassBoostTest CTS tests fail...

When AudioEffectTest is executed, an Equalizer is created
and enabled on a MediaPlayer session. Effects on the output
mix are therefore suspended.
Then the MediaPlayer is released with the effect still enabled.
In this case, Audioflinger::purgeStaleEffects_l() fails to restore
the suspended effects when the effect attached to the released audio session
is removed.
When subsequent tests are executed on output mix effects, these effects cannot be
enabled as they are still suspended.

Fixed purgeStaleEffects_l() to restore suspended effects if the effect removed is enabled.

Also fixed EffectHandle::disconnect() to only restore suspended effects if the disconnected
handle actually has control over the effect.

Change-Id: I67232e7c34680b0cc01abfd57d5d510a524e5d4f
5c4e818c39ac2d2739675fe907904a874f7623c5 19-Oct-2011 Eric Laurent <elaurent@google.com> Limit AudioFlinger log.

AudioFlinger logs a warning when a write to the audio HAL
takes too long to return. The threshold for this warning is
a rule of thumb based on the assumption that the audio HAL will consume
buffers at a regular pace.
The introduction of low power audio mode with larger buffers and writes
occuring in bursts makes that this threshold is often exceeded resulting
in excessive and misleading warnings.

The threshold is raised to remove unwanted warnings but we should reconsider
the usefulness of this warning altogether.

Change-Id: I5ef6898ea28d879cede3e47da542a64092a3cca4
ec35a1416472865dbebc22b10199ad718ed2cc95 06-Oct-2011 Eric Laurent <elaurent@google.com> Fix issue 5381089: problem with A2DP music volume

This problem only occurs when audio effects are present and
the music volume is applied by one effect engine.
When connecting or disconnecting A2DP, audio effects are moved from
one mixer thread to another. When removed from the source thread,
the effect is stopped but it is not restarted when added to the
destination thread.
This regression was introduced by commit 21b5c47e.

Change-Id: I4cc578d8d760ec65b185032b6fda98c739d331bc
9d18ec574f5d847a86a21594ac39394ef5b108fc 27-Sep-2011 Eric Laurent <elaurent@google.com> Fix issue 5373658: memory leak in AudioFlinger.

Unlink PowerManagerService binder interface death recipient
in ThreadBase destructor.

Change-Id: Iab06ae9a8a6737bb002b6416a157b0fb50c11ad5
6bffdb8b598a2399e57f6ca48660fb7bdb2490b5 23-Sep-2011 Eric Laurent <elaurent@google.com> Fix issue 5355047: Automated effect tests fail.

Fixed several regressions in automated audio effect tests due
to changes in effect framework and visualizer FFT output range.

- Do not suspend Volume effect on session 0 when effects are
enabled on specific sessions.
- Adapt energy detection thresholds to new visualizer FFT range.
- Leave more time for BassBoost and Virtualizer effects to ramp up
before measuring the effect.
- Removed second insert reverb left by mistake on the player session
in preset reverb test.

Change-Id: I7a1ad1372d783fa7900eb9dd1d3b47f54d8d766f
60cd0a0d488e604d27fc7dbb02b00348693dfde2 13-Sep-2011 Eric Laurent <elaurent@google.com> Issue 4345021: Audio routed to multiple devices...

There is a possiblility that the condition on which RecordThread::checkForNewParameters_l()
waits after updating the command completion status is never signalled.
This happens if the thread executing ThreadBase::setParameters() has timed out waiting
for the status (for instance if the audio HAL takes too long to execute the setParameters()
command. Then the RecordThread is stuck forever.

The fix consists in waiting for the condition with a timeout in RecordThread::checkForNewParameters_l().

Change-Id: I7fc671bc2fc43ba4acb65a2beb33ee05742f091e
b76e90de3c64626fe07a68469d0a59a31c8efb6b 30-Aug-2011 Eric Laurent <elaurent@google.com> Merge "226483: A2DP connected, but music out to speaker"
9f6530f53ae9eda43f4e7c1cb30d2379db00aa00 30-Aug-2011 Eric Laurent <elaurent@google.com> 226483: A2DP connected, but music out to speaker

When the A2DP headset is connected, there is a possible
race condition when the audio tracks are moved from
the mixer thread attached to the speaker output to the thread
attached to A2DP output.
As the request to clear the stream type to output mapping cache in
the client process is asynchronous, it is possible that the flag
indicating to the client audio track to re-create the IAudioTrack
on the new thread is processed before the cache is invalidated.
In this case, the track will be attached to the old thread and
music will continue playing over the device speaker instead of being
redirected to A2DP headset.

Change-Id: Ib2ce1eb5320eaff83287b93779061bf4e7a330df
bee5337da7659b3b7128622ba1f42618b11df5be 29-Aug-2011 Eric Laurent <elaurent@google.com> Audioflinger: reverse logic of BT NREC indication

The interpretation of BT NREC by AudioFlinger to enable
or disable AEC and NS was wrong: NREC to ON (default) means
the phone (Audio Gateway) must enable local AEC and NS.

Change-Id: I88a264e7fc9831c43bbace4f6b585baec73f2006
a1884f9e9ec3836683efd7eb333ee442e8bc9d56 23-Aug-2011 Eric Laurent <elaurent@google.com> AudioFlinger: add check for audio HAL init failure

Do not call audio HAL functions on the primary HW interface
if it could not be initialized properly.

Change-Id: If54059c8fd188d6c1686f9e0439994fe9411478a
0270b188aa3929cc512ec6869caba1d6b60cc08c 12-Aug-2011 Marco Nelissen <marcone@google.com> Don't remove effects on session 0

Change-Id: Id6f29fb1c687069f7480dd81d4745a558f202226
db7c079f284f6e91266f6653ae0ec198b1c5006e 10-Aug-2011 Eric Laurent <elaurent@google.com> Audio effects: track CPU and memory use separately

Before this change, CPU and memory usage for an audio effect were
registered and checked against the limit by audio policy manager
upon effect instantiation. Even if an effect was not enabled
it would prevent another effect to be created if the CPU load budget
was exceeded, which was too restrictive.

This change adds a method to register/unregister CPU load only when
an effect is enabled or disabled.
It also adds a mechanism to place all effects on the global output mix
in suspend state (disabled) when an effect is enabled on a specific session.
This will allow applications using session effects to have the priority
over others using global effects.

Also fixes some issues with suspend/restore mechanism:
- avoid taking actions when an effect is disconnected and was not enabled.
- do not remove a session from the suspended sessions list when corresponding
effect chain is destroyed.

Change-Id: I5225278aba1ae13d0d0997bfe26a0c9fb46b17d3
3a34befc6fb04a4945a849e8bda8b84e4bf973fe 02-Aug-2011 Marco Nelissen <marcone@google.com> Keep effects sessions active when the caller dies.

Don't remove effects until the session they are in goes away or all
AudioEffects have been explicitly released. This allows the control
panel process to die without stopping the effects.

Change-Id: I4496e5df080230ca1af149dec95c1309ab8ea888
c3e6572e0ff535932b1f6ffb7bcf5acd891675fb 08-Aug-2011 Eric Laurent <elaurent@google.com> Merge "AudioFlinger: protect input/output stream access"
b8ba0a979067a4efb0b3819bf17770793e41c15e 08-Aug-2011 Eric Laurent <elaurent@google.com> AudioFlinger: protect input/output stream access

Some methods would not check that the output orinput stream of a thread
was still valid before calling functions on its interface.
This could cause a crash if those methods where called while the output or
input was being closed by another thread.

Make sure that the output or input stream pointer is cleared before closing the
Always check that the output or input pointer is not null before calling
functions at the stream interface.
Generalize the use of initCheck() method to verify that the output or input
stream is not null.

Change-Id: I9d9ca6b744d011bcf3a7bbacb4a581ac1477bfa5
59bd0da8373af0e5159b799495fda51e03120ea4 01-Aug-2011 Eric Laurent <elaurent@google.com> AudioFlinger: disable AEC and NS with BT headsets

Disable AEC and NS when the Bluetooth SCO headset in use indicates it
implements those pre processings.

Change-Id: I93f3d10b0a27243d5dbff7182639576fc0c6d862
59255e4fc7d8ff52874b85b1988dc0785140cf81 28-Jul-2011 Eric Laurent <elaurent@google.com> Audio Effect Framework: add effect suspend/restore

Add the possibility for the effect framework to suspend
(temporarily disable process) and restore audio effects.
This feature will be usefull to disable pre processing under certain
conditions and better control coexistence of audio effects
on output mix and specific sources.

Change-Id: I79b195982cc48748d5708308fb1647b9c3c34cc6
6dbe883644940badc684957cfc381bfd115f205e 28-Jul-2011 Eric Laurent <elaurent@google.com> Fix issue 5090721: audio record broken

Commit 6dbdc40 introduced a deadlock when exiting the
AudioFlinger RecordThread.

Change-Id: I1f63e54c5aeff05da4e4d028b53f734c62c78677
a7280a59259018d997896c043fd2db95f631f12e 27-Jul-2011 Eric Laurent <elaurent@google.com> Merge "AudioFlinger: fix crash when deleting pre process."
ec437d8d3db79459d7b19e1734e6fe309bd621e8 27-Jul-2011 Eric Laurent <elaurent@google.com> AudioFlinger: fix crash when deleting pre process.

If a pre processing effect is detroyed while enabled and capture is active,
there was a possibility that the effect engine is released by the framework
while still processed by the audio HAL.

The fix consists in not releasing the engine in EffectModule::removeHandle()
but just flag the effect as being detroyed to avoid further calls to functions
on the engine effect interface.
The effect interface is then removed from the audio HAL safely in
EffectChain::removeEffect_l() while holding the EffectChain mutex.

Change-Id: I71fab30d9145062af8644f545a1f1d4d3e7e7f02
feb0db689c17dced50afaee54c659f1676e2d505 22-Jul-2011 Eric Laurent <elaurent@google.com> Fix issue 4604090: notification sound interrupted.

The problem is that the audio HAL fails to acquire the wake lock when playing the notification.
This is because of a change that removed the mediaserver process form the system group for honeycomb.

The fix consists in requesting the wake lock from PowerManagerService when AudioFlinger mixer
wakes up.

A consequence of this change is that audio HALs or pcm drivers do not have to hold wake locks
anymore as in the past.

Change-Id: I4fb3cc84816c9c408ab7fec75886baf801e1ecb5
1d2bff0e588afe183a1baaae731519b4e957bbdb 25-Jul-2011 Eric Laurent <elaurent@google.com> AudioFlinger: add dump of audio pre processing.

Dump of media.audio_flinger service was only listing effects on output threads.
Moved the dump of effect chains from PlaybackThread to ThreadBase class so that
pre processings on RecordThread are also listed.

Change-Id: If8bc74023c12b9c2371f1b300743b156ceca7b87
edc15ad8fcde12dc4f642d80d077239b1532eeca 22-Jul-2011 Eric Laurent <elaurent@google.com> Fix issue 4988574: 8 bit PCM audio playback broken.

Fixed regression in audio track control block frame size
calculation introduced by commit c310dcb.

Change-Id: Ia731b946ae4e43316b98d80229e3b08a696e47d6
7c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745 18-Jun-2011 Eric Laurent <elaurent@google.com> Audio framework: support for audio pre processing

Audio effect framework is extended to suport effects on
output and input audio path.

AudioFlinger: Support for audio effects and effect chains is
moved from PlaybackThread class to ThreadBase class so that
RecordThread can manage effects.
Effects of type pre processing are allowed on record thread
only. When a pre processing is enabled, the effect interface handle is
passed down to the input stream so that the audio HAL can call the
process function. The record thread loop calls the effect chain process
function that will only manage the effect state and commands and skip the
process function.

AudioRecord: The audio session is allocated before calling getInput() into
audio policy serice so that the session is known before the input theead is
created and pre processings can be created on the correct session.

AudioPolicyService: default pre processing for a given input source are
loaded from audio_effects.conf file.
When an input is created, corresponding effects are created and enabled.

Change-Id: Id17119e0979b4dcf189b5c7957fec30dc3478790
e0b5bb23f0a26d248275d203885b820659da7320 16-Jul-2011 Glenn Kasten <gkasten@google.com> Merge "Log CPU usage"
4d8d0c30abfa4b8d75866d42094cc797e05068fa 09-Jul-2011 Glenn Kasten <gkasten@google.com> Log CPU usage

Change-Id: Ie447e59be139153e526b7ad467c46c659d26816f
6d8b694d999e9be7d5dcc336535832a80fb6f61f 24-Jun-2011 Eric Laurent <elaurent@google.com> Moved and renamed effect API header files

Moved specific effect header files to
and renamed to lower case (effect_xxx.h).

Change-Id: Icfc2264bfd013cab0395d7e310ada636b9fe3621
671a636931295d9c33ffca74551a804479d01241 17-Jun-2011 Eric Laurent <elaurent@google.com> Added audio_bytes_per_sample() helper function

Change-Id: Ibfcd75c4c241a53d5f052c25ada091904991048a
7394a4f358fa9908a9f0a7c954b65c399f4268e6 14-Jun-2011 Dima Zavin <dima@android.com> audio: update for audio/audio_policy header names/locations

Change-Id: I36c49352eee57559403cd1597f56a8485a360289
Signed-off-by: Dima Zavin <dima@android.com>
0512ab559d4670c2204078470d7ef5d376811c57 05-May-2011 Glenn Kasten <gkasten@google.com> Remove dead code related to gettid

The gettid system call is always available now.

Change-Id: Ib78b41781eda182dc8605daf456bbea7ff7c2dc0
0d255b2d9061ba31f13ada3fc0f7e51916407176 25-May-2011 Jean-Michel Trivi <jmtrivi@google.com> Use channel mask instead of channel count for track creation

Record and playback objects (resp AudioRecord and AudioTrack)
are created using a channel mask, but this information is lost
in the mixer because only the channel count is known to
AudioFlinger. A channel count can always be derived from a
channel mask.

The change consists in:
- disambiguiting variable names for channel masks and counts
- passing the mask information from the client to AudioFlinger
and the mixer.
- when using the DIRECT ouput, only verifying the format of
the track is compatible with the output's for PCM.

Change-Id: I50d87bfb7d7afcabdf5f12d4ab75ef3a54132c0e
65580f9adf6c4d98449ad0716488f9fe3869aa5a 28-May-2011 Eric Laurent <elaurent@google.com> Removed interface to load audio effects libraries

Removed unused functions allowing dynamic loading of audio effects libraries
from effects factory API.

Change-Id: I06cc5a51dc10aca87c7a8687bbb874babd711eca
e1315cf0b63b4c14a77046519e6b01f6f60d74b0 18-May-2011 Eric Laurent <elaurent@google.com> New effect library API

Moved and renamed media/EffectApi.h to hardware/audio_effect.h
Modified the effect library API to expose a library info structure
containing an interface functions table.
Also removed enums for audio channels, audio format and devices
from effect API and use values from system/audio.h instead.

Modified effects factory to support new library interface format and
load libraries and efffects listed in audio_effects.conf file.
The file audio_effects.conf is first loaded from /vendor/etc and
then from /system/etc/audio_effects.conf if not found.

Modified existing effect libraries to implement the new library interface.

Change-Id: Ie52351e071b6d352fa2fbc06c3846686f8c45df9
162f7d15ac5c8c23d1c3de171239f3a4e6e06b2a 23-May-2011 Glenn Kasten <gkasten@google.com> Merge "HAVE_ANDROID_OS AUDIOFLINGER_SECURITY_ENABLED dead"
6708b9a3fb654f5623ba5a696288fdba310a5e1a 13-May-2011 Eric Laurent <elaurent@google.com> Merge "Fix audio effect framework issues"
b469b9490b3cd9e0f0466d9b9ab228f6c793b82e 09-May-2011 Eric Laurent <elaurent@google.com> Fix audio effect framework issues

Fix two issues in audio effect framework reported by partners.

1 - Fixed duplicated audio buffer sent to effect process function when
pausing a track.
Modified Effectchain::process_l() function to clear the effect chain
input buffer before calling the effect process functions when no track
is active on the session. Previous code was clearing the buffer after
calling the process functions and when transitioning from active
to inactive, the last processed buffer was passed again once to effect
process function before being cleared.

2 - Fixed potential mutex cross deadlock when disconnecting an effect
while playback is active. This is because EffectChain::process_l()
was calling PlaybackThread::hasAudioSession() thus creating an inversion
in the mutex lock order (EffectChain mutex locked before ThreadBase mutex).
The fix consists in removing the call to hasAudioSession() from process_l()
and requires each effect chain to keep count of the number of audio tracks
attached to it (previously only the active tracks were accounted for).

Change-Id: Iee4246694ea8c7a66c012120c629d72dd38f9c35
64760240f931714858a59c1579f07264d7182ba2 11-May-2011 Dima Zavin <dima@android.com> update for new audio.h header location

Change-Id: Ic4c62c4037800802427eb7d3c7f5eb8b25d18876
Signed-off-by: Dima Zavin <dima@android.com>
249c6a61f21bc90e25e4b77f18c98af1ac363e69 05-May-2011 Glenn Kasten <gkasten@google.com> HAVE_ANDROID_OS AUDIOFLINGER_SECURITY_ENABLED dead

Remove dead code from the days when Android ran in emulator.

Change-Id: Ibadbbde0538239ad9b2811a3a2e8f8a6d3b6389c
5a61d2f277af3098fc10b2881babca16391362da 20-Apr-2011 Dima Zavin <dima@android.com> audioflinger: don't do work in constructor, instead do it in onFirstRef

Change-Id: I22d9e01821816c3beb52b014330386c7fd2f0411
Signed-off-by: Dima Zavin <dima@android.com>
799a70e7028a4d714436c3a744a775acfbd31aae 19-Apr-2011 Dima Zavin <dima@android.com> audioflinger: enumerate all the possible audio interfaces

Keep track of the primary interface that handles the master volume,

Change-Id: Ib0701fccff8d8783a99035a241ab7c8ec75c00ac
Signed-off-by: Dima Zavin <dima@android.com>
fce7a473248381cc83a01855f92581077d3c9ee2 20-Apr-2011 Dima Zavin <dima@android.com> audio/media: convert to using the audio HAL and new audio defs

Change-Id: Ibc637918637329e4f2b62f4ac7781102fbc269f5
Signed-off-by: Dima Zavin <dima@android.com>
c30268b9d118309a0514bcf280a03ee69f81403f 06-Apr-2011 Glenn Kasten <gkasten@google.com> Merge "Miscellaneous code cleanup in audio framework"
4bcae82f9b07d1a39956c45a6f5bec0b696c4dd1 04-Apr-2011 Glenn Kasten <gkasten@google.com> Miscellaneous code cleanup in audio framework

- 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
38ccae2c0324daa305f3fe77d25fdf5edec0b0e1 29-Mar-2011 Eric Laurent <elaurent@google.com> New fix for issue 4111672: control block flags

The first fix (commit 913af0b4) is problematic because it makes threads
in mediaserver process block on the cblk mutex. This is not permitted
as it can cause audio to skip or worse have a malicious application
prevent all audio playback by keeping the mutex locked.

The fix consists in using atomic operations when modifying the control
block flags.

Also fixed audio_track_cblk_t::framesReady() so that it doesn't block
when called from AudioFlinger (only applies when a loop is active).

Change-Id: Ibf0abb562ced3e9f64118afdd5036854bb959428
33797ea64d067dfeaacbfd7ebe7f3383b73961b5 17-Mar-2011 Eric Laurent <elaurent@google.com> Fix issue 4111672: AudioTrack control block flags

Make sure that all read/modify/write operations on the AudioTrack
and AudioRecord control block flags field are protected by the
control block's mutex.

Also fix potential infinite loop in AudioTrack::write() if the
written size is not a multiple of frame size.

Change-Id: Ib3d557eb45dcc3abeb32c9aa56058e2873afee27
9ee159b79022b2e1a050acb3890ce948e99e9ccb 24-Feb-2011 Gloria Wang <gwang@google.com> - To track the usage of all audio output devices
- To track the currently used audio device
- The devices are separated as speaker and other audio devices
- Provide the collected data to battery application through pullBatteryData()

Change-Id: I374c755266b5ac6b1c6c630400f4daf901ea8acc
243f5f91755c01614a8cafe90b0806396e22d553 01-Mar-2011 Eric Laurent <elaurent@google.com> Fix issue 3479042.

The problem is that when an AudioRecord using the resampler is restarted,
the resampler state is not reset (as there is no reset function in the resampler).
The consequence is that the first time the record thread loop runs, it calls the resampler
which consumes the remaining data in the input buffer and when this buffer is released
the input index is incremented over the limit.

The fix consists in implementing a reset function in the resampler.

A similar problem was also present for playback but unoticed because the track buffer is always
drained by the mixer when a track stops. The only problem for playback was that the initial
phase fraction was wrong when restarting a track after stop (it was correct after a pause).

Change-Id: Ifc2585d685f4402d29f4afc63f6efd1d69265de3
117cd9286424888c1c5bf202ebf1e08ae1e6affe 04-Feb-2011 Glenn Kasten <gkasten@google.com> Merge "Bug 3366885 Remove LVMX switch"
db130fbd3ccd37e247e49494a84f8a9841ecd593 04-Feb-2011 Glenn Kasten <gkasten@google.com> Bug 3366885 Remove LVMX switch

Change-Id: I0bf98c6f85f00b3296874571e1c049dcc4e2fcca
eda6c364c253ba97ee45a3adeb8c2b45db1f81db 02-Feb-2011 Eric Laurent <elaurent@google.com> Fix issue 3371080

Modified default volume control logic in AudioService:
1 IN_CALL volume if in video/audio chat
2 NOTIFICATION if notification is playing or was playing less than 5s ago.

Modified silent mode:
- now also affect MUSIC stream type
- entering silent mode when VOL- hard key is pressed once while selected
stream volume is already at 0 (except for VOICE_CALL stream).
- exiting silent mode when pressing VOL+ hard key while in silent mode

Play sound FX (audible selections, keyboard clicks) at a fixed volume.

Modified audio framework:
- isStreamActive() method now implemented in AudioPolicyManagerBase (previously AudioFlinger)
- iStreamActive() now specifies a time window during which the stream is considered
active after it actually stopped.

Change-Id: I7e5a0724099450b9fc90825224180ac97322785f
73337489229cc9b50371c7a9fcd86e9f00ea46d0 20-Jan-2011 Eric Laurent <elaurent@google.com> Fix issue 3371096.

EffectModule::process() was copying effect chain input buffer to
output buffer if no effect was active instead of accumulating it.

Change-Id: I2838af2e7b6654d0a76547625929a5453da68d02
935752053ef2691dbb6d5a6d149e0e362c6e3c74 19-Jan-2011 Eric Laurent <elaurent@google.com> Tentative fix for issue 3362362.

The problem is likely that one method is called on the AudioPolicyManagerBase
instance while it is still being constructed by AudioPolicyService.

To avoid this, the AudioPolicyService mutex is held by the constructor until the
platform specific AudioPolicyManager is constructed and the member
mpPolicyManager initialized.

Also added an initCheck() method to AudioPolicyInterface to verify successful
initialization of AudioPolicyManager.

A similar change is done in AudioFlinger constructor.
Also added some missing protections in AudioFlinger methods where the
playback thread list is parsed.

Change-Id: I006b244ec057e1bb0aa5ebe426ef006e3b171056
f5aafb209d01ba2ab6cb55d1a12cfc653e2b4be0 18-Nov-2010 Eric Laurent <elaurent@google.com> Fix issue 3157123.

Use a Mutex wherever atomic operations were used in AudioTrack,
AudioRecord, AudioFlinger and AudioEffect classes.

Change-Id: I6f55b2cabdcd93d64ef19446735b8f33720f8dbc
f1fb01a7f00b8da90a36268aba8584a872e99175 15-Nov-2010 Jean-Michel Trivi <jmtrivi@google.com> Add new audio mode for audio communications other than telelphony.

The audio mode MODE_IN_CALL signals the system the device a phone
call is currently underway. There was no way for audio video
chat or VoIP applications to signal a call is underway, but not
using the telephony resources. This change introduces a new mode
to address this. Changes in other parts of the system (java
and native) are required to take this new mode into account.
The generic AudioPolicyManager is updated to not use its phone
state variable directly, but to use two new convenience methods,
isInCall() and isStateInCall(int) instead.

Change-Id: Id744cd26520ea1d1a4795eabe6a1f0c58789af76
af59ce2407fa4e6e5d8f1664a4df2daf1badd407 05-Oct-2010 Eric Laurent <elaurent@google.com> Fixed AudioFlinger not always pausing tracks

If the pause request is received before the AudioTrack buffer was
completelly filled and the track ready for mixing, the pause is
not executed: the track just underruns and stays in pausing state.

The fix consists in considering the track ready for mixing immediately
if pausing.

Change-Id: Ia6cb4703fee2126e41011a6400ea8eeb3a3e5456
44d9848d6656777a18019223e0d35f2fcc67719a 01-Oct-2010 Eric Laurent <elaurent@google.com> Issue 3032913: improve AudioTrack recovery time

This issue showed that when an AudioTrack underruns during a too long period
of time and is therefore disabled by audioflinger mixer, it takes an additional
delay of up to 3 seconds to recover.
This fix adds a simple mechanism to recover immediately when the client application
is ready to write data again in the AudioTrack buffer

Also throttle warnings on record overflows

Change-Id: I8b2c71578dd134b9e60a15ee4d91b70f3799cb3d
dac69110ed1073bf0a9827a3f78698896dd05d97 28-Sep-2010 Eric Laurent <elaurent@google.com> Fix several audio effects problems.

Fixed the following issues in LVM effect bundle wrapper:
- memory leaks in EffectCreate() in case effect creation fails at various stages
- Added saturation when accumulating to output buffer
- Fixed problems with enabled effects count when an effect is released while enabled
- Do not allocate temporary buffer for accumulation each time process() is called

Fixed the following issues in effects framework (AudioFlinger)
- Release effect synchronously in the library when deleted from effect chain
- Do not call the effect process function if no tracks are present in the same
audio session

Change-Id: Ifbd80a163415cfb3c0a337c12082853ea45d9c91
84e9a10fde8a4ae3da4f88d7911c154933aa457f 24-Sep-2010 Eric Laurent <elaurent@google.com> Fix issue 3007862

Removed a cross deadlock condition between audioflinger and audio policy
service mutexes.
Audioflinger::createEffect() locks audioflinger mutex and then calls
AudioSystem::getOutputForEffect() which ends up in
AudioPolicyService::getOutputForEffect() which locks audio policy service
mutex. If at the same time, the command thread in audio policy service is
processing a command(set volume, set route...), the mutex is locked and the
command will call one audioflinger method which in turn will attempt to
lock audioflinger mutex.
The fix consists in releasing audioflinger mutex before calling

Change-Id: Id44e7feb36e0a295731f6aa97cf32d022edd34d0
fac4895de4ae63928ff0cf2ccece106eb6d33f72 22-Sep-2010 Eric Laurent <elaurent@google.com> Request permission for global audio effects.

Applications creating an audio effect on the output mix must
have the MODIFY_AUDIO_SETTINGS permission.

Change-Id: I57d88533f91ad0d33680107d79abcec28f7263b5
e0aed6ddcb4e3c301b80aa26706b6052dab42c41 11-Sep-2010 Eric Laurent <elaurent@google.com> Fix volume problems with insert revert

- Use a constant input level to the reverb engine and implement volume control in the
insert reverb. This avoids the volume spikes when an effect that was inserted after
the reverb is disabled or removed.
- Fix clicks (one silent buffer) at the end of the reverb disable period.
- Modified volume management in audioflinger so that the volume ramp is also done by
the insert effect if present when the track is paused (avoids clicks).
- Increased room level for all presets.

Also fixed problems with output stage session (-1):
- effect bundle wrapper was not designed to support session -1
- the permission check in audioflinger for using session -1 failed due to a wrong usage of

Change-Id: Id1ff51327263364bf71d3f2668fa5cde4311d84f
aeae3de947fa0b1e670c8472b32288962f97b4f5 02-Sep-2010 Eric Laurent <elaurent@google.com> Fix problem in AudioEffect::command() status.

The *pReplyData argument of the command() function was left unitialized by EffectHandle::command()

Change-Id: I91a19817ead2a8cfbdd8e2d77ca270c7ce9d5bd4
8f45bd725549436eeacd12ee69349e2332ed8da5 31-Aug-2010 Eric Laurent <elaurent@google.com> Audio Effects: fix problems in volume control.

- Fixed click when re-enabling effect during the turn off phase:
make sure the effect states where effect is processed are the same
where volume control is delegated to effect.
- Fixed click when effect is deleted while still active: do not apply
volume ramp if an effect having volume control was just removed from the
effect chain.

Also fixed a crash when PCM dump is enabled in effect bundle wrapper.

Change-Id: Ib562f5cf75c69af75df0e862536262e2514493e4
25cbe0ecd6df8be7e40537c5d85c82f105038479 19-Aug-2010 Eric Laurent <elaurent@google.com> Fix issue 2929440

Fixed regression introduced by change a54d7d3d7dd691334189aab20d23c65710092869 in audioflinger mixer thread:
When the output stream is suspended, the sleep time between two writes must match the actual duration
of one output stream buffer otherwise the playback rate is not respected.

Change-Id: Ic5bebe890290d1f44aeff9dd3c142d18e26fff2a
571d49c1c316f5e07b74ed7b5df6bdec7cbc1a14 11-Aug-2010 Eric Laurent <elaurent@google.com> Fix issue 2909189: System property ro.audio.silent no longer mutes system.

Fixed regression introduced by commit 2a6b80bc65c4782b5a7168b300e1dc5ec9f617ee:
master mute was not working if no effect chains were present on session 0.

Change-Id: I66d107e045d159cb94d29c7476fa1e12d92f2ae7
8569f0d3bf4c6787707e348a7cf73b9c4199cb32 30-Jul-2010 Eric Laurent <elaurent@google.com> Fixed several audio effects problems.

- Fixed constant inversions in AudioEffect.java
- Do not return error when enabling an already enabled effect
- Update cached effect state in native AudioEffect class when effect is enabled/disabled by command() method
- Remove click when restarting effect during disable sequence
- Fixed problem in master mute management when volume control is delegated to effect.

Change-Id: I6df4ce9fcc54fdc7345df858f639d20d802d6712
60e182437228312cc28469a5b0dfde77ac848e1a 29-Jul-2010 Eric Laurent <elaurent@google.com> Fixed underrun in audioflinger mixer.

When all audio tracks have been disabled and the mixer is running idle before the output stream is placed in standby,
the mixer sometimes fails to write to the output stream on time to avoid underrun.

This is because the sleep period used to wait before the next write to output stream is too close to the actual buffer duration.
In fact this sleep time is not critical as if we write too early to the output stream, the kernel driver will wait for free buffers
from the audio DSP DMA and we will sleep anyways.

The fix consists in dividing the calculated wait period by 2 to increase the margin.

Change-Id: I5730887dc2ccce2a511bc858494a6f7da6b392a0
39e94f8f723d445447fdee0822291e664b631f60 28-Jul-2010 Eric Laurent <elaurent@google.com> Allow creation of an audio effect on a session with no audio tracks.

This is necessary to allow creating and enabling an effect attached to a particular player
session before the playback is started. As a matter of fact, the implementation of the mediaplayer
does not create the AudioTrack before playback starts.

Change-Id: I1266e8885f9d756acc949303321aaac0fbf83e34
25f4395b932fa9859a6e91ba77c5d20d009da64a 28-Jul-2010 Eric Laurent <elaurent@google.com> Audio effects: modified command() parameter types.

The type of the cmd, cmdSize and *pReplySize parameters of the effect control interface command()
function have been modified from int to uint32_t. This is more consistent with their role.

Change-Id: I84d289fc262d6753747910f06f485597dfee6591
de070137f11d346fba77605bd76a44c040a618fc 13-Jul-2010 Eric Laurent <elaurent@google.com> Audio policy manager changes for audio effects

Added methods for audio effects management by audio policy manager.
- control of total CPU load and memory used by effect engines
- selection of output stream for global effects
- added audio session id in parameter list for startOutput() and stopOutput().
this is not used in default audio policy manager implementation.

Modifications of audio effect framework in AudioFlinger to allow moving and reconfiguring
effect engines from one output mixer thread to another when audio tracks in the same session
are moved or when requested by audio policy manager.
Also fixed mutex deadlock problem with effect chains locks.

Change-Id: Ida43484b06e9b890d6b9e53c13958d042720ebdb
f997cabca292d70d078ae828e21c28e6df62995f 19-Jul-2010 Eric Laurent <elaurent@google.com> Fixed problems in audio effect volume control.

Fixed the following problems in audio effect volume control in AudioFlinger:
- Make sure that the volumes returned by EffectChain::setVolume_l() are correct even is
no change is detected since last call
- Do not use isEnabled() to validate volume control but mState >= ACTIVE instead as the volume control
must be also active in STOPPING and STOPPED states.

Change-Id: Id62da3164fad500ee8a5efd6cd78c77e8fdcb541
cab112421da6e8eac19ffddbbe3d76067cffee78 15-Jul-2010 Eric Laurent <elaurent@google.com> Several improvements in audio effects volume control.

- Fixed crash when deleting an effect chained before an effect having volume control
(not need to set both in effect descriptor).
- Volume control changes from one effect to another if needed according to effect enable state
- EFFECT_CMD_SET_VOLUME is only sent when their is an actual change in volume

Change-Id: Ieebaf09157e2627366023569d95516646e03e26c
5462fc9a38fa8c9dff434cd53fa5fb1782ae3042 15-Jul-2010 Mathias Agopian <mathias@google.com> added BinderService<> template to help creating native binder services

Change-Id: Id980899d2647b56479f8a27c89eaa949f9209dfe
65ab47156e1c7dfcd8cc4266253a5ff30219e7f0 15-Jul-2010 Mathias Agopian <mathias@google.com> move native services under services/

moved surfaceflinger, audioflinger, cameraservice

all native services should now reside in this location.

Change-Id: Iee42b83dd2a94c3bf5107ab0895fe2dfcd5337a8