diff options
author | James Dong <jdong@google.com> | 2010-12-20 21:29:12 -0800 |
---|---|---|
committer | James Dong <jdong@google.com> | 2010-12-21 10:17:53 -0800 |
commit | 7455630fff59ac1b68d67077aba360056ca88ece (patch) | |
tree | 03f0bd66394fe53385c5a4da671881d0c1de1516 | |
parent | 41e7e6f9339cd9181df26ca96f0ac133371bc524 (diff) | |
download | frameworks_base-7455630fff59ac1b68d67077aba360056ca88ece.zip frameworks_base-7455630fff59ac1b68d67077aba360056ca88ece.tar.gz frameworks_base-7455630fff59ac1b68d67077aba360056ca88ece.tar.bz2 |
Add more debugging code to track down hang during video recording
bug - 3276561
Change-Id: I1e02590b23031f29bcbfc4a1064f039ed80cb862
-rw-r--r-- | media/libstagefright/CameraSource.cpp | 15 | ||||
-rw-r--r-- | media/libstagefright/OMXCodec.cpp | 10 |
2 files changed, 20 insertions, 5 deletions
diff --git a/media/libstagefright/CameraSource.cpp b/media/libstagefright/CameraSource.cpp index 2f3353b..b1c6b18 100644 --- a/media/libstagefright/CameraSource.cpp +++ b/media/libstagefright/CameraSource.cpp @@ -573,7 +573,7 @@ void CameraSource::releaseCamera() { } status_t CameraSource::stop() { - LOGV("stop"); + LOGD("stop: E"); Mutex::Autolock autoLock(mLock); mStarted = false; mFrameAvailableCondition.signal(); @@ -581,9 +581,11 @@ status_t CameraSource::stop() { int64_t token = IPCThreadState::self()->clearCallingIdentity(); releaseQueuedFrames(); while (!mFramesBeingEncoded.empty()) { - LOGI("Waiting for outstanding frames being encoded: %d", + if (NO_ERROR != + mFrameCompleteCondition.waitRelative(mLock, 3000000000LL)) { + LOGW("Timed out waiting for outstanding frames being encoded: %d", mFramesBeingEncoded.size()); - mFrameCompleteCondition.wait(mLock); + } } stopCameraRecording(); releaseCamera(); @@ -601,6 +603,7 @@ status_t CameraSource::stop() { } CHECK_EQ(mNumFramesReceived, mNumFramesEncoded + mNumFramesDropped); + LOGD("stop: X"); return OK; } @@ -666,7 +669,11 @@ status_t CameraSource::read( { Mutex::Autolock autoLock(mLock); while (mStarted && mFramesReceived.empty()) { - mFrameAvailableCondition.wait(mLock); + if (NO_ERROR != + mFrameAvailableCondition.waitRelative(mLock, 3000000000LL)) { + LOGW("Timed out waiting for incoming camera video frames: %lld us", + mLastFrameTimestampUs); + } } if (!mStarted) { return OK; diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp index 352f9fb..f63774a 100644 --- a/media/libstagefright/OMXCodec.cpp +++ b/media/libstagefright/OMXCodec.cpp @@ -3361,7 +3361,15 @@ status_t OMXCodec::read( } while (mState != ERROR && !mNoMoreOutputData && mFilledBuffers.empty()) { - mBufferFilled.wait(mLock); + if (mIsEncoder) { + if (NO_ERROR != mBufferFilled.waitRelative(mLock, 3000000000LL)) { + LOGW("Timed out waiting for buffers from video encoder: %d/%d", + countBuffersWeOwn(mPortBuffers[kPortIndexInput]), + countBuffersWeOwn(mPortBuffers[kPortIndexOutput])); + } + } else { + mBufferFilled.wait(mLock); + } } if (mState == ERROR) { |