In frameworks/av look at git show 291f824e02ff517a34cfe50220b4e2b402ee998d
It might be related to that fix, but I'm not sure.

On Tuesday, December 18, 2012 8:21:26 PM UTC-8, [email protected] wrote:
>
> post again, because I didn't see my posted info.
>
> Clients:
>   pid: 2141
> Global session refs:
>  session pid count
>        1 1541   1
>        2 1541   1
>       10 2141   1
>       12 3449   1
>       13 3449   1
>       14 3449   1
>       15 3449   1
>       19 3449   1
>       20 3449   1
> Hardware status: 0
> Standby Time mSec: 3000
>
> Output thread 0x411b8008 internals
> last write occurred (msecs): 238843
> total writes: 14
> delayed writes: 0
> blocked in write: 0
> suspend count: 1
> mix buffer : 0x40d0f148
> Fast track availMask=0xf8
> io handle: 5
> TID: 1952
> standby: 1
> Sample rate: 48000
> HAL frame count: 768
> Normal frame count: 1152
> Channel Count: 2
> Channel Mask: 0x00000003
> Format: 1
> Frame size: 4
>
> Pending setParameters commands: 
>  Index Command
>
> Pending config events: 
>  Index event param
>
> AudioMixer tracks: 00000003
> FastMixer command=COLD_IDLE writeSequence=52 framesWritten=19968
>           numTracks=2 writeErrors=0 underruns=1 overruns=6
>           sampleRate=48000 frameCount=768 measuredWarmup=35.8 ms, 
> warmupCycles=2
>           mixPeriod=16.00 ms
> Simple moving statistics over last 0.4 seconds:
>   wall clock time in ms per mix cycle:
>     mean=13.55 min=0.31 max=41.44 stddev=10.09
>   raw CPU load in us per mix cycle:
>     mean=253 min=0 max=397 stddev=89
> Fast tracks: kMaxFastTracks=8 activeMask=0x5
> Index Active Full Partial Empty  Recent Ready
>     0    yes   21       0     2   empty     0
>     1     no    0       0     0    full     0
>     2    yes   14       0     9   empty     0
>     3     no    0       0     0    full     0
>     4     no    0       0     0    full     0
>     5     no    0       0     0    full     0
>     6     no    0       0     0    full     0
>     7     no    0       0     0    full     0
> State queue observer: stateChanges=8
> State queue mutator: pushDirty=8 pushAck=3 blockedSequence=6
> Output thread 0x411b8008 stream volumes in dB:
>     0:0, 1:-29, 2:-29, 3:-14, 4:-7.5, 5:-29, 6:-6.6, 7:-29, 8:-30, 9:-14, 
> 10:-14
> Output thread 0x411b8008 tracks
>    Name Client Type Fmt Chn mask   Session mFrCnt fCount S M F SRate  L dB 
>  R dB    Server      User     Main buf    Aux Buf  Flags Underruns
>    F  2   2141    0   1 0x00000001      17    768   1536 T 0 1 48000   -10 
>   -10  0x00002a00 0x00002a00 0x40d0f148 0x00000000  0x82         3*
>    F  1   2141    0   1 0x00000001      10      0   1536 I 0 0 48000   -10 
>   -10  0x00000000 0x00000000 0x40d0f148 0x00000000  0x83         0 
> Output thread 0x411b8008 active tracks
>    Name Client Type Fmt Chn mask   Session mFrCnt fCount S M F SRate  L dB 
>  R dB    Server      User     Main buf    Aux Buf  Flags Underruns
>    F  2   2141    0   1 0x00000001      17    768   1536 T 0 1 48000   -10 
>   -10  0x00002a00 0x00002a00 0x40d0f148 0x00000000  0x82         3*
> Normal mixer raw underrun counters: partial=0 empty=2
>
> - 0 Effect Chains:
>
> From below dump, we could see that another fasttrack didn't exit.
>
> Thanks
>
> 在 2012年12月18日星期二UTC+8下午11时05分39秒,Glenn Kasten写道:
>>
>> I have not seen this happen on my test devices so far.
>> Which device are you having the problem on?
>> Does the same problem happen on all other devices you try, or only this 
>> one?
>> Is it 100% repeatable, or only happens sometimes?
>> Please supply output of adb shell dumpsys media.audio_flinger
>> and the last 20 lines of adb logcat immediately after a failure.
>>
>> On Wednesday, December 12, 2012 9:59:14 PM UTC-8, eleven wrote:
>>>
>>> Dear Glenn, 
>>>
>>> I met a issue when I hang up a phone call after communication. 
>>> When hang up a phone call, there will be a notification stream from 
>>> earpiece to 
>>> notify user that phone call is ended. 
>>>
>>> From the log, ToneGenerator will create a FastTrack to play it. 
>>>
>>> And the Question is after palying the sound, this FastTrack will be set 
>>> to 
>>> TERMINATED state and stay in Active state in MixerThread. 
>>>
>>> After track the code, I found that below function never return ture: 
>>>
>>> if (!track->presentationComplete(framesWritten, audioHALFrames)) { 
>>>      // track stays in active list until presentation is complete 
>>>     break; 
>>> } 
>>>
>>>
>>> bool AudioFlinger::PlaybackThread::Track::presentationComplete(size_t 
>>> framesWritten,   size_t audioHalFrames) 
>>> { 
>>>     // a track is considered presented when the total number of frames 
>>> written 
>>> to audio HAL 
>>>     // corresponds to the number of frames written when 
>>> presentationComplete() 
>>> is called for the 
>>>     // first time (mPresentationCompleteFrames == 0) plus the buffer 
>>> filling 
>>> status at that time. 
>>>     if (mPresentationCompleteFrames == 0) { 
>>>         mPresentationCompleteFrames = framesWritten + audioHalFrames; 
>>>         ALOGV("presentationComplete() reset: mPresentationCompleteFrames 
>>> %d 
>>> audioHalFrames %d", 
>>>                   mPresentationCompleteFrames, audioHalFrames); 
>>>     } 
>>>     if (framesWritten >= mPresentationCompleteFrames) { 
>>>         ALOGV("presentationComplete() session %d complete: framesWritten 
>>> %d", 
>>>                   mSessionId, framesWritten); 
>>>         triggerEvents(AudioSystem::SYNC_EVENT_PRESENTATION_COMPLETE); 
>>>         return true; 
>>>     } 
>>>     return false; 
>>> } 
>>>
>>> After add some log to track I found that "framesWritten" alwasy be 0, 
>>> because in 
>>> playtrackthread, mBytesWritten was reset to 0 at the front of 
>>> PlaybackThread::threadLoop() 
>>>             // put audio hardware into standby after short delay 
>>>             if (CC_UNLIKELY((!mActiveTracks.size() && systemTime() > 
>>> standbyTime) || 
>>>                         mSuspended > 0)) { 
>>>                 if (!mStandby) { 
>>>
>>>                     threadLoop_standby(); 
>>>
>>>                     mStandby = true; 
>>>                     mBytesWritten = 0; 
>>>                 } 
>>>
>>> Because it will just call presentationComplete() after Track's state 
>>> becomming 
>>> STOPPING_2 or TERMINATED.So the question is why Track's state changed so 
>>> slow 
>>> which make the next suspend operation reset the mBytesWritten always ?? 
>>>
>>> BTW, I tried to make the mixerThread suspend just after 
>>> mActiveTracks.size 
>>> =0,which means waiting FastTrack finish its presentationComplete. 
>>> but it still failed, because when Clinet AP call track's stop function, 
>>> it will 
>>> also stop writing, and mBytesWritten also can not get increased, so 
>>> presentationComplete will never return true. 
>>>
>>> it is very weird !! And our platform support FastMixer, after happened 
>>> this, the 
>>> mixerthread will keep pushing state into FastMixer. 
>>>
>>> Could you help me ? 
>>>
>>> Thanks 
>>>
>>>

-- 
unsubscribe: [email protected]
website: http://groups.google.com/group/android-porting

Reply via email to