summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/OMXCodec.cpp
diff options
context:
space:
mode:
authorDave Burke <daveburke@google.com>2011-10-19 22:37:18 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-10-19 22:37:18 -0700
commit55f4bc5c3d1acfaa735b8b19cf34b6b68f6cfcca (patch)
tree699af111d9580cb63e00d88ea422b416c196cccd /media/libstagefright/OMXCodec.cpp
parent8888a75f01d904541e409e858d23e4150ace34b6 (diff)
parentb1d666f5cb555d135eb69e005e88a03330bbb54c (diff)
downloadframeworks_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-xmedia/libstagefright/OMXCodec.cpp21
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;
}