diff options
author | Dave Burke <daveburke@google.com> | 2011-10-19 22:37:18 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-10-19 22:37:18 -0700 |
commit | 55f4bc5c3d1acfaa735b8b19cf34b6b68f6cfcca (patch) | |
tree | 699af111d9580cb63e00d88ea422b416c196cccd /media/libstagefright/OMXCodec.cpp | |
parent | 8888a75f01d904541e409e858d23e4150ace34b6 (diff) | |
parent | b1d666f5cb555d135eb69e005e88a03330bbb54c (diff) | |
download | frameworks_av-55f4bc5c3d1acfaa735b8b19cf34b6b68f6cfcca.zip frameworks_av-55f4bc5c3d1acfaa735b8b19cf34b6b68f6cfcca.tar.gz frameworks_av-55f4bc5c3d1acfaa735b8b19cf34b6b68f6cfcca.tar.bz2 |
Merge "Stagefright: idle OMX after ANW errors" into ics-mr0
Diffstat (limited to 'media/libstagefright/OMXCodec.cpp')
-rwxr-xr-x | media/libstagefright/OMXCodec.cpp | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp index 7b7078a..00d414c 100755 --- a/media/libstagefright/OMXCodec.cpp +++ b/media/libstagefright/OMXCodec.cpp @@ -3609,11 +3609,24 @@ status_t OMXCodec::stop() { mAsyncCompletion.wait(mLock); } + bool isError = false; switch (mState) { case LOADED: - case ERROR: break; + case ERROR: + { + OMX_STATETYPE state = OMX_StateInvalid; + status_t err = mOMX->getState(mNode, &state); + CHECK_EQ(err, (status_t)OK); + + if (state != OMX_StateExecuting) { + break; + } + // else fall through to the idling code + isError = true; + } + case EXECUTING: { setState(EXECUTING_TO_IDLE); @@ -3648,6 +3661,12 @@ status_t OMXCodec::stop() { mAsyncCompletion.wait(mLock); } + if (isError) { + // We were in the ERROR state coming in, so restore that now + // that we've idled the OMX component. + setState(ERROR); + } + break; } |