summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/omx
diff options
context:
space:
mode:
authorSteve Kondik <steve@cyngn.com>2015-11-16 14:35:33 -0800
committerSteve Kondik <steve@cyngn.com>2015-11-16 19:27:41 -0800
commit842f7df253913a11b6dbc705b83299c437edd4e3 (patch)
tree6cb7da0af2b2b7254d8e43c454cb881dfa15f206 /media/libstagefright/omx
parent8ab5ff0b3709976cde09362e7444d78d0a981dd3 (diff)
parent60282213a1194ee8753ac53b97fc7f7e36373e17 (diff)
downloadframeworks_av-842f7df253913a11b6dbc705b83299c437edd4e3.zip
frameworks_av-842f7df253913a11b6dbc705b83299c437edd4e3.tar.gz
frameworks_av-842f7df253913a11b6dbc705b83299c437edd4e3.tar.bz2
Merge branch 'LA.BF64.1.2.2_rb4.7' of git://codeaurora.org/platform/frameworks/av into cm-13.0
Change-Id: Ia41df61c3ccfeb809572b63a4b1a8ca6bd85dfb2
Diffstat (limited to 'media/libstagefright/omx')
-rw-r--r--media/libstagefright/omx/SimpleSoftOMXComponent.cpp44
1 files changed, 40 insertions, 4 deletions
diff --git a/media/libstagefright/omx/SimpleSoftOMXComponent.cpp b/media/libstagefright/omx/SimpleSoftOMXComponent.cpp
index e6a0c49..1fd0641 100644
--- a/media/libstagefright/omx/SimpleSoftOMXComponent.cpp
+++ b/media/libstagefright/omx/SimpleSoftOMXComponent.cpp
@@ -417,16 +417,43 @@ void SimpleSoftOMXComponent::onSendCommand(
}
}
+void SimpleSoftOMXComponent::onTransitionError() {
+ mState = OMX_StateInvalid;
+ mTargetState = OMX_StateInvalid;
+ notify(OMX_EventError, OMX_CommandStateSet, OMX_StateInvalid, 0);
+}
+
void SimpleSoftOMXComponent::onChangeState(OMX_STATETYPE state) {
+ bool skipTransitions = false;
+
// We shouldn't be in a state transition already.
- CHECK_EQ((int)mState, (int)mTargetState);
+ if (mState != mTargetState) {
+ // Workaround to prevent assertion
+ // XXX CHECK_EQ((int)mState, (int)mTargetState);
+ ALOGW("mState %d != mTargetState %d", mState, mTargetState);
+ skipTransitions = true;
+ onTransitionError();
+ }
switch (mState) {
case OMX_StateLoaded:
- CHECK_EQ((int)state, (int)OMX_StateIdle);
+ if (state != OMX_StateIdle) {
+ // Workaround to prevent assertion
+ // XXX CHECK_EQ((int)state, (int)OMX_StateIdle);
+ ALOGW("In OMX_StateLoaded, state %d != OMX_StateIdle", state);
+ skipTransitions = true;
+ onTransitionError();
+ }
break;
case OMX_StateIdle:
- CHECK(state == OMX_StateLoaded || state == OMX_StateExecuting);
+ if (!(state == OMX_StateLoaded || state == OMX_StateExecuting)) {
+ // Workaround to prevent assertion
+ // XXX CHECK(state == OMX_StateLoaded || state == OMX_StateExecuting);
+ ALOGW("In OMX_StateIdle, state %d != OMX_StateLoaded||OMX_StateExecuting",
+ state);
+ skipTransitions = true;
+ onTransitionError();
+ }
break;
case OMX_StateExecuting:
{
@@ -440,11 +467,20 @@ void SimpleSoftOMXComponent::onChangeState(OMX_STATETYPE state) {
notify(OMX_EventCmdComplete, OMX_CommandStateSet, state, NULL);
break;
}
-
+ case OMX_StateInvalid: {
+ ALOGW("In OMX_StateInvalid, ignore state transition to %d", state);
+ skipTransitions = true;
+ onTransitionError();
+ break;
+ }
default:
TRESPASS();
}
+ if (skipTransitions) {
+ return;
+ }
+
mTargetState = state;
checkTransitions();