This change fixes the stability problems experienced when using
a bluetooth headset supporting both A2DP and SCO. Problems occur
when starting the video chat at which time the A2DP output is being
stopped to start SCO. At that time, active AudioTracks are invalidated
by AudioFlinger so that a new AudioTrack binder interface can be
recreated by the client process on the new mixer thread with correct parameters.
The problem was that the process to restore the binder interface was not
protected against concurrent requests which caused 2 binder interfaces
to be created sometimes. This could lead to permanent client deadlock
if one of the client threads was waiting for a condition of the first
created binder interface while the second one was created (as the AudioFlinger
would only signal conditions on the last one created).
This concurrent request situation is more likely to happen when a client
uses the JAVA AudioTrack as the JNI implementation uses simultaneously the
native AudioTrack callback and write push mechanisms. By doing so, the code
that checks if the binder interface should be restored (in obtainBuffer()) is
much more likely to be called concurrently from two different threads.
The fix consists in protecting the critical binder interface restore phase
with a flag in the AudioTrack control block. The first thread acting upon the binder
interface restore request will raise the flag and the second thread will just wait for
a condition to be signaled when the restore process is complete.
Also protected all accesses to the AudioTrack control block by a mutex to prevent
access while the track is being destroyed and restored. If a mutex cannot be held
(e.g because we call a callback function), acquire a strong reference on the IAudioTrack
to prevent its destruction while the cblk is being accessed.
Modified AudioTrack JNI to use GetByteArrayElements() instead of
GetPrimitiveArrayCritical() when writing audio buffers. Entering a critical section would
cause the JNI to abort if a mediaserver crash occurs during a write due to the AudioSystem
callback being called during the critical section when media server process restarts.
Anyway with current JNI implementation, either versions do not copy data most of the times
and the criticial version does not guaranty no data copy.
The same modifications have been made to AudioRecord.
Change-Id: Idc5aa711a04c3eee180cdd03f44fe17f3c4dcb52
Use a death handler when audio focus changes are caused by audio
mode changes.
The bug comes from the fact that audio focus clients that use the
audio mode for automatic focus handling didn't register a death
handler, which was set to null. When such a client died, this
handler was compared against the one to remove from the
audio focus stack, which resulted in an NPE.
The fix consists in registering a valid IBinder object in the
audio focus stack, even for clients whose focus requests originate
from a change in audio mode, as implemented in the
handleFocusForCalls() method.
Change-Id: Id9e1d3d10afcd99969285f6d60fc4d7dde1e4a10
* commit 'd581c04722e2610ca5471b9c3d1881043b1205b1':
Add missing copyright headers for a couple of files. DO NOT MERGE Cherry-picked from other branch...
sqlite3 is overkill for what we are doing here, and more fragile.
BUG: 3512856
Change-Id: I83d86127949d894a3887db3456d91b013060e852
Signed-off-by: Mike Lockwood <lockwood@android.com>
For some mp3 files, the mode can be changed from one audio frame to another. Without
the capability to switch modes, the decoded audio may have lots of artifacts.
bug - 3253310
Change-Id: Id57bb1f204642d15e38a800c72214f6794cfaa37
- 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
Make sure that NumberEffectsEnabled is decremented at the same time as
SamplesToExitCountBb reaches 0 in Effect_process(). Not doing so
causes NumberEffectsEnabled not being decremented if Effect_setEnabled()
is called after SamplesToExitCountBb reaches 0 and before next Effect_process() is called.
Change-Id: Id827a301f93a5a09ecd9995a0c7d731ef526711a
This is used by the USB service to associate Gallery with PTP cameras.
Removed unnecessary broadcast receiver
Change-Id: Ifd78aa94f69cb7d6ec0b557313e90bb79812f15d
This change modifies Stagefright's ANativeWindow initialization to use
the new MIN_UNDEQUEUED_BUFFERS query on the ANativeWindow.
Change-Id: I62565945e90ac40de326de77adcfa5577ed89975
Related-Bug: 3356050
This change fixes the error path of
OMXCodec::allocateOutputBuffersFromNativeWindow so that it cancels the
correct number of buffers if a dequeueBuffer operation fails.
Change-Id: Ib7cdcdf24f1718bc070ad218a5980949c0e942eb
This change makes Stagefright query the gralloc buffer usage flags from
the OMX IL component and passing those flags on to the ANativeWindow.
Change-Id: Ic9af8a9e6df9ff4aadc7355890324d68841bc488
Related-Bug: 3479027
This change defines an OpenMAX IL API for querying from the IL component
the gralloc buffer usage flags that should be used to allocate the
buffers. It also adds the Stagefright plumbing for using the new OMX IL
API.
Change-Id: I046b5e7be70ce61e2a921dcdc6e3aa9324d19ea6
Related-Bug: 3479027