Hi Eric,
Thank you for the reply.
I checked in msm device.
Kitkat I'm using the latest android master 4.4 as of today
I agree your suggestion and checked once, found is working fine.
Sure. I upload the CL soon.
Thanks,
Bala
On Wednesday, March 5, 2014 12:40:32 PM UTC+5:30, Bala Murugan wrote:
>
> Hi,
>
> I recently came across a situation as below, which leads to
> playback/Video freeze.
>
> The exact scenario is,
>
> 1. Video is playrd with gallery app, and the user does *seek* to
> somewhere near 20 seconds to end.
> 2. User keeps pressing pause and resume.
> 3. At some point in time, while user keeps pausing and resuming, when
> Audioplayer EOS received from Audio source, it calls
> *PlaybackThread::Track::stop
> *which will make the state to *STOPPING_1 *as there is a data still in
> mCblk and under run is not occurred yet.
>
> 4. And thereafter while playing at *STOPPING_1*,
> * AudioFlinger::PlaybackThread::threadLoop_Write* calls *out_write* and
> gets 0 as return value since driver buffer is full.
> So, Playback thread waits for *mWriteAckSequence* to become even
> number i.e, basically waits for acknowledgement from driver, using
> *poll*systemcall in tinycompress.
>
> 5. At this point user presses "*Pause*" button.
>
> 6. Now, Offload command thread(in HAL) is kept waiting at poll. And, as
> compress_pause has been triggered the driver to stop rendering.
> So, driver buffer will not be freed until compress_resume is called.
>
> 7. Now, when user presses "*Resume*" button, and at this stage, there
> is still data in *mCBlk*, So, track moves to *STOPPING_1* state. In
> prepareTracks_l, there is no code to call the *out_resume* to resume the
> playback.
>
> 8. So, I added the below patch, which makes the playback to continue
> further properly.
> I just want to check, Is this a problem, as poll is not returned or
> if not, is my patch a valid one, and can be commited?
>
> diff --git a/services/audioflinger/Threads.cpp
> b/services/audioflinger/Threads.cpp
> index 498ddb6..14ab3d0 100644
> --- a/services/audioflinger/Threads.cpp
> +++ b/services/audioflinger/Threads.cpp
> @@ -4058,7 +4058,11 @@ AudioFlinger::PlaybackThread::mixer_state
> AudioFlinger::OffloadThread::prepareTr
> track->mRetryCount = kMaxTrackRetriesOffload;
> mActiveTrack = t;
> mixerStatus = MIXER_TRACKS_READY;
> - }
> + } else if (track->isStopping_1() && track->framesReady() &&
> (mWriteAckSequence & 1) && mHwPaused) {
> + doHwResume = true;
> + mHwPaused = false;
> + }
> +
> } else {
> ALOGVV("OffloadThread: track %d s=%08x [NOT READY]",
> track->name(), cblk->mServer);
> if (track->isStopping_1()) {
>
>
> Thanks,
> Bala
>
--
--
unsubscribe: [email protected]
website: http://groups.google.com/group/android-porting
---
You received this message because you are subscribed to the Google Groups
"android-porting" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.