Fixes a race condition between entering ERROR state and initial buffer submit.
diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp
index 91db766..eaad4fc 100644
--- a/media/libstagefright/OMXCodec.cpp
+++ b/media/libstagefright/OMXCodec.cpp
@@ -1272,7 +1272,7 @@
}
void OMXCodec::drainInputBuffers() {
- CHECK_EQ(mState, EXECUTING);
+ CHECK(mState == EXECUTING || mState == RECONFIGURING);
Vector<BufferInfo> *buffers = &mPortBuffers[kPortIndexInput];
for (size_t i = 0; i < buffers->size(); ++i) {
@@ -1716,15 +1716,20 @@
Mutex::Autolock autoLock(mLock);
+ if (mState != EXECUTING && mState != RECONFIGURING) {
+ return UNKNOWN_ERROR;
+ }
+
if (mInitialBufferSubmit) {
mInitialBufferSubmit = false;
drainInputBuffers();
- fillOutputBuffers();
- }
- if (mState != EXECUTING && mState != RECONFIGURING) {
- return UNKNOWN_ERROR;
+ if (mState == EXECUTING) {
+ // Otherwise mState == RECONFIGURING and this code will trigger
+ // after the output port is reenabled.
+ fillOutputBuffers();
+ }
}
int64_t seekTimeUs;