OSDN Git Service

AudioFlinger: offload playback, non-blocking write
authorEric Laurent <elaurent@google.com>
Mon, 7 Jan 2013 17:53:42 +0000 (09:53 -0800)
committerEric Laurent <elaurent@google.com>
Thu, 25 Jul 2013 21:08:09 +0000 (14:08 -0700)
commitbfb1b832079bbb9426f72f3863199a54aefd02da
tree5007d22456776dc77d124be84bcfe8bc4152bbb2
parentfc5ea08326b510c6f82f71845d95a8758a6ab698
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
13 files changed:
include/private/media/AudioTrackShared.h
media/libmedia/AudioTrackShared.cpp
services/audioflinger/AudioFlinger.cpp
services/audioflinger/AudioFlinger.h
services/audioflinger/AudioPolicyService.cpp
services/audioflinger/AudioPolicyService.h
services/audioflinger/Effects.cpp
services/audioflinger/Effects.h
services/audioflinger/PlaybackTracks.h
services/audioflinger/Threads.cpp
services/audioflinger/Threads.h
services/audioflinger/TrackBase.h
services/audioflinger/Tracks.cpp