Hi Glenn, all What about effects on Session 0? Do these get applied to the output of the Fast mixer (which is the mix of fast tracks + the normal mixer)? If so, it seems to contradict the idea that it is a fast mixer, because Session 0 effects are still applying.
Can anyone suggest a code change which would make Session 0 effects only apply to the output of the "normal" mixer (before it is mixed into the fast mixer)? Kind regards Eugene On Friday, November 23, 2012 7:52:20 AM UTC+11, Glenn Kasten wrote: > > Effects are applied to normal tracks only, not fast tracks. They are > applied by normal mixer, prior to entering the fast mix. This lack of > effects on fast tracks is another reason why fast mixer is "fast" relative > to normal mixer (in addition to other reasons listed earlier). > > On Wednesday, November 21, 2012 3:14:14 PM UTC-8, Previr Rangroo wrote: >> >> Hello Glenn, >> >> To continue the conversation forward on Track Effects being avoided by >> the FastMixer, can the same be said of the Effects on SessionId 0 (the >> Global Effects, if you will)? Will these global effects process the submix >> (mFastTracks[0]) from the normal mixer thread only and then be mixed with >> the FastMixer tracks *OR *is the combined output from FastMixer >> processed by the Global Effects? >> >> If latter is the case, which seems to be my observation as well, doesn't >> it defeat the purpose of having a dedicated fast lane for the Fast Tracks? >> >> Any comments will be highly appreciated. >> >> Best regards, >> Previr >> >> On Wednesday, September 19, 2012 1:40:02 AM UTC+10, Glenn Kasten wrote: >>> >>> Every time a mixer thread runs through it's main loop, it gets the PCM >>> data for each track input by a buffer provider. The buffer provider >>> normally returns new PCM data each time it is called, or if there is not >>> enough new data available then it returns a short (insufficient) count and >>> that track will underrun. You can see this by adding some logs to the >>> thread loops. >>> >>> On Sunday, September 16, 2012 8:52:36 PM UTC-7, big_fish_ wrote: >>>> >>>> Hi Glenn, >>>> >>>> Thanks for your response. >>>> >>>> I understand your mean. I mean is if there is no any new states >>>> available from normal mixer, then FastMixer will get the old state again. >>>> If this old state command is MIX_WRITE, then at this time, FastMixer will >>>> write the mixBuffer again which stored the PCM data mixed at last time. >>>> Is it not a issue? if normal mixer have a long time latency which cause >>>> long time not send new state to FastMixer, then FastMixer will write the >>>> same data for many times. To my understanding, the DUT user will listen >>>> same sound for many millisecond, maybe like noise. >>>> >>>> I don't know my understanding if is correct, please help confirm it. >>>> >>>> Thanks >>>> Yu >>>> >>>> 2012/9/17 Glenn Kasten <gka...@android.com> >>>> >>>>> No - if there is not a new state available from normal mixer, then >>>>> FastMixer will continue to operate correctly using the old state. State >>>>> includes many things, but most important is the set of active fast >>>>> tracks. >>>>> The idle command is only used for major mode changes, not for state >>>>> changes. >>>>> >>>>> >>>>> On Friday, September 14, 2012 2:21:08 AM UTC-7, big_fish_ wrote: >>>>> >>>>>> Hi glenn, >>>>>> >>>>>> Thanks for your reply. >>>>>> I have another question about FastMixer stat machine. >>>>>> To my understanding, the MIX_WRITE process as following: >>>>>> 1, get next FastMixerState from FastMixerStateQueue. >>>>>> 2, get its command >>>>>> 3, if command equal MIX_WRITE, then do mixer and write operations. >>>>>> >>>>>> After the step three done, FastMixer will continue to call poll to >>>>>> get new FastMixerState from FastMixerStateQueue. >>>>>> But if at this time, if MixerThread is busy on do mixer, resample and >>>>>> audio effect for other Tracks which cost a long latency. Then it will >>>>>> cause MixerThread haven't send any new FastMixerState to FastMixer, >>>>>> then >>>>>> FastMixer will get the old one again, and do above steps again. >>>>>> >>>>>> I think after the step 3, FastMixer should clear the >>>>>> handled FastMixerState.**mCommand to HOT_IDLE to avoid above issue. >>>>>> >>>>>> Please help check if my understanding if is correct. >>>>>> Thansk >>>>>> Yu >>>>>> >>>>>> >>>>>> 2012/9/7 Glenn Kasten <gka...@android.com> >>>>>> >>>>>>> 1. You didn't mention if you're developing Android apps or the >>>>>>> platform. If you're an Android app developer, you should be using only >>>>>>> documented public APIs. For audio output, that's Java language >>>>>>> android.media.AudioTrack in SDK and C language OpenSL ES AudioPlayer >>>>>>> with >>>>>>> PCM buffer queue in NDK. The AUDIO_OUTPUT_FLAG_FAST is an internal >>>>>>> symbol that's used only at the AudioTrack C++ level, and that's not a >>>>>>> documented public API. So you should not need to deal with >>>>>>> AUDIO_OUTPUT_FLAG_FAST. >>>>>>> >>>>>>> But if you're doing platform development such as porting, it can be >>>>>>> helpful to understand the internal implementation in JB ... >>>>>>> AUDIO_OUTPUT_FLAG_FAST is a hint from the API level that this >>>>>>> application would like to use a lower latency, fewer feature, audio >>>>>>> track >>>>>>> if one is available. The request is not guaranteed to be accepted by >>>>>>> the >>>>>>> audio server (AudioFlinger). The fewer features that are not available >>>>>>> include effects, as you said, and also sample rate conversion. If >>>>>>> AudioFlinger can handle the request it will create a "fast track", >>>>>>> otherwise a normal track. >>>>>>> >>>>>>> 2. The "fast" in FastMixer means that it executes more often, and >>>>>>> that it uses less CPU time each time it runs, than the normal mixer >>>>>>> thread. >>>>>>> The normal mixer thread runs about once every 20 ms, and the FastMixer >>>>>>> thread runs at rate of once per HAL buffer (which is ideally less than >>>>>>> 20 >>>>>>> ms). The FastMixer thread supports up to 7 fast tracks, and does not >>>>>>> support sample rate conversion of effects. So it uses a limited amount >>>>>>> of >>>>>>> CPU each time it runs. The normal mixer thread supports more tracks (up >>>>>>> to >>>>>>> 32), and supports sample rate conversion and effects. So it can use >>>>>>> more >>>>>>> CPU each time it runs. The main purpose of FastMixer design was not to >>>>>>> take >>>>>>> advantage of multi-core. >>>>>>> >>>>>>> On Tuesday, September 4, 2012 6:59:27 PM UTC-7, big_fish_ wrote: >>>>>>>> >>>>>>>> I am a android developer, I just read the FastMixer code of >>>>>>>> Jellybean. >>>>>>>> >>>>>>>> I have some questions, >>>>>>>> >>>>>>>> 1, If submit AudioTrack with AUDIO_OUTPUT_FLAG_FAST flag, then this >>>>>>>> Track >>>>>>>> can't do AudioEffect handle, right? >>>>>>>> >>>>>>>> I noticed that FastMixer thread handle all FastTacks without >>>>>>>> AudioEffect. Except mFastTracks[0], because the zero FastTrack is >>>>>>>> passed from MixerThread which was already through mixer and effect >>>>>>>> handled. >>>>>>>> right? >>>>>>>> >>>>>>>> 2, About the performance, why FastMixer is faster then before? >>>>>>>> >>>>>>>> If we have 20 tracks, we set 8 tracks as FastMixer, and 12 as >>>>>>>> normal tracks, then there are two threads to do mixer. So if we >>>>>>>> run on dual core CPU, then we have multithreading adventage. >>>>>>>> >>>>>>>> But if we have 32 tracks are all as FastTrack, then MixerThread >>>>>>>> will not do mixer. then there will have no multithreading >>>>>>>> adventage. >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>> unsubscribe: android-porti...@**googlegroups.com >>>>>>> website: >>>>>>> http://groups.google.com/**group/android-porting<http://groups.google.com/group/android-porting> >>>>>>> >>>>>> >>>>>> -- >>>>> unsubscribe: android-porti...@googlegroups.com >>>>> website: http://groups.google.com/group/android-porting >>>>> >>>> >>>> -- unsubscribe: android-porting+unsubscr...@googlegroups.com website: http://groups.google.com/group/android-porting