summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/OMXCodec.cpp
diff options
context:
space:
mode:
authorDave Burke <daveburke@google.com>2011-10-19 22:38:45 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2011-10-19 22:38:45 -0700
commit1d2acaffde56ad79e6e96f228d7857863462397c (patch)
treee5e05f30fbca34668d58ff6e6b3199a4ab947e3b /media/libstagefright/OMXCodec.cpp
parente6a823c276302b0c499d7a39956c1b731f23dd4c (diff)
parent55f4bc5c3d1acfaa735b8b19cf34b6b68f6cfcca (diff)
downloadframeworks_av-1d2acaffde56ad79e6e96f228d7857863462397c.zip
frameworks_av-1d2acaffde56ad79e6e96f228d7857863462397c.tar.gz
frameworks_av-1d2acaffde56ad79e6e96f228d7857863462397c.tar.bz2
am 23d64420: Merge "Stagefright: idle OMX after ANW errors" into ics-mr0
* commit '23d644202a44383bf008ff86f6faa3ea7e447290': Stagefright: idle OMX after ANW errors
Diffstat (limited to 'media/libstagefright/OMXCodec.cpp')
-rwxr-xr-xmedia/libstagefright/OMXCodec.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp
index f9cb882..7e55790 100755
--- a/media/libstagefright/OMXCodec.cpp
+++ b/media/libstagefright/OMXCodec.cpp
@@ -3618,11 +3618,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);
@@ -3657,6 +3670,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;
}