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. Cross Promotion of app


I have a homework assignment in my Mobile Marketing class to get
together with another developer and cross promote my app and theirs.

Essentially, I contact my customers and tell them about your app. You
contact your customers and tell them about mine.

I'm seeking a compatible app that is not directly competing. My
customer base consists of mostly male individuals (90%+) who enjoy
outdoor sports such as hiking, camping, hunting, backpacking, or
kayaking, in places where there is little or no cell coverage.

One of the best ways I could promote someone's app is in my weekly
newsletter. I could also do a blog post, but link to it in a
newsletter to ensure it gets noticed.

You can contact me by email if you have a compatible offering.



2. application crashes when trying to play media in res/raw

I have a small mp3 (326KB) in my res/raw folder. In my code, I have

mPlayer = MediaPlayer.create(FakeCallScreen.this, R.raw.sample);


The application just crashes when it tries to start the activity, I
cannot figure out why.


3. Can an be installed through ADB Shell?

4. Send SMS from Widget

5. GPS-Driver: Permission denied

6. Cannot get ANDROID_ID on 1.6 systems

7. implementing an android "framework"