From 41152efd144ccf70c380d5c9a32105c02a039f43 Mon Sep 17 00:00:00 2001 From: James Dong Date: Mon, 20 Dec 2010 21:29:12 -0800 Subject: Add more debugging code to track down hang during video recording bug - 3276561 Change-Id: I1e02590b23031f29bcbfc4a1064f039ed80cb862 --- media/libstagefright/CameraSource.cpp | 15 +++++++++++---- media/libstagefright/OMXCodec.cpp | 10 +++++++++- 2 files changed, 20 insertions(+), 5 deletions(-) (limited to 'media') 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) { -- cgit v1.1