Audio Flinger and Mixer operations

by mahamannu » Thu, 05 Mar 2009 22:45:31 GMT

Sponsored Links

I'd like to know if the Audio Flinger uses the same mixer buffer for
combining Audio streams from Media Service playback [ Potentially
large buffer] , System sound [ ringtone , DTMF etc ] , Gaming Audio
[ Low latency ; small buffer ; ] at a given time. Usually Gaming Audio
might also use Media Service playback ; so essentially there may be 2
or more PV playback inputs to Audio Flinger. The concern is that
although the MIO Audio component supports Flush [ in case of a seek/FF/
Rewind on a stream] ; the next flush will be done at the DSP/H/W
level; which will not be able to distinguish between type of data if
it is mixed. It would be nice to not mix a Large Media Service output
buffer for optimization purposes with System sound ; as a flush at the
h/w will cause no system sound to be played or if the mixing is done
in serial fashion ; the time senstive System sound will play after a
large playback buffer has finished playing.


Audio Flinger and Mixer operations

by Dave Sparks » Fri, 06 Mar 2009 04:55:47 GMT

 AudioFlinger mixes into a small buffer which determines the latency
(along with the underlying hardware latency). The source buffers can
be any size. The mix buffer size has to be larger than the scheduler
interval (typically 20ms) or audio will stutter under load. That means
best case latency is around 40ms for a ping-pong buffer audio driver.


Sponsored Links

Audio Flinger and Mixer operations

by mahamannu » Wed, 11 Mar 2009 22:50:04 GMT

 Thanks Dave

I want to avoid mixing Music Stream [ from Pvplayer ] with other
Streams and re-direct the music stream to a different Audio H/W
Interface. Is it possible to send MIO buffers directly to H/W ?
Firstly what are the penalties for bypassing audio Flinger. As I
understand it is provifing Stream/Track based routing and Volume
control. MediaPlayerInterface.h recommends to implement
MediaplayerHWInterface to write directly to the HW. Are there changes
required in MediaPlayerService.cpp for this. I noticed that currently
it tries to get a Player Handle and since currently PvPlayer is of
type MediaPlayerInterface, it's audiosink object ends up forming
"tracks" to write to AudioFlinger.
Also, since AudioFlinger has the interface to AudioHardwareInterface ;
does another call to OpenOutputStream need to be made elsewhere if MIO
is to write buffers directly to H/W ?

The other design that I can think of is to have a second AudioFlinger
object instantiated by AudioSystem which will only get Music Tracks
and write to its dedicated H/W. What issues do you see with this
design ? Does the AudioFlinger need to be made multi-threaded and
thread-safe fo this ?

thanks, M


Audio Flinger and Mixer operations

by mahamannu » Wed, 11 Mar 2009 22:52:20 GMT

 Just to add to that, Is the AndroidAudioStream MIO implementation
meant for writing directly to H/W ?


Audio Flinger and Mixer operations

by Dave Sparks » Thu, 12 Mar 2009 02:52:12 GMT

  started an implementation of the Audio MIO for streaming direct to a
tunneled codec. The obstacle I ran into was that OpenCORE 1.0 does not
support falling back to software if the hardware codec is busy.

The other difficult part is that stream type volume controls (i.e.
media volume) are not available to the AudioSink. This means that the
media volume needs to be propagated through AudioFlinger to the
compressed audio driver (presumably through the kernel or a user space

We will have a solution for this problem in a post-Cupcake release
TBD. In fact, we are revisiting the entire audio architecture right
now to fix some deficiencies that have become obvious as we try to
accommodate additional use cases.

On Mar 11, 3:49 pm, mahamannu <> wrote:

Audio Flinger and Mixer operations

by ATC » Tue, 14 Apr 2009 21:42:52 GMT

 here can I modify the buffersize for the audio? I am trying to test
the effect of bigger buffer sizes for my system

- Akash

On Mar 11, 9:52 pm, Dave Sparks <> wrote:

Other Threads

1. Assigned SDK-Version, minSdkVersion and ADT emulator version


I am working on a little App, which has an assigned SDK-Version library of 
Android 2.2. This App uses Android 2.2 upwards specific calls because of 
some multitouch features. But it also has some sort of compatibility code 
with a runtime configuration to support Android 1.6. So, from my point of 
view it should run on Android 1.6 and upwards. Therefore I have put
    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="8"/>
in the Manifest.
As I want to test this, but I don't have a 1.6 Phone, I tried with the 
emulator. Unfortunately the emulator selection dialog in the eclipse run 
configurations doesn't show me any (available) 1.6 emulations, instead it 
shows me only Android 2.2 and upwards devices.

Does someone know how to handle this situation?



2. Using Preferences From xml resource in BroadCast receiver

Hi can any one give me some code to use Preferences from my 
settings.xml Preference file in a BroadcastRecevier?
Thank you 


3. Butuh Masukan utk HTC Desire

4. Enable imported account contacts programmatically

5. Testimonial dedi sopian (revisi)

6. How to get the text height

7. Documentation for older Android SDK versions?