Temporarily unlock our mutex while fetching a buffer from the upstream source.
diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp
index eaad4fc..3a065ae 100644
--- a/media/libstagefright/OMXCodec.cpp
+++ b/media/libstagefright/OMXCodec.cpp
@@ -1321,6 +1321,10 @@
         return;
     }
 
+    // We're going to temporarily give up the lock while reading data
+    // from the source. A certain client unfortunately chose to have the
+    // thread supplying input data and reading output data be the same...
+
     MediaBuffer *srcBuffer;
     status_t err;
     if (mSeekTimeUs >= 0) {
@@ -1328,10 +1332,13 @@
         options.setSeekTo(mSeekTimeUs);
         mSeekTimeUs = -1;
 
+        mLock.unlock();
         err = mSource->read(&srcBuffer, &options);
     } else {
+        mLock.unlock();
         err = mSource->read(&srcBuffer);
     }
+    mLock.lock();
 
     OMX_U32 flags = OMX_BUFFERFLAG_ENDOFFRAME;
     OMX_TICKS timestamp = 0;