diff options
author | Vladimir Petrov <vppetrov@mm-sol.com> | 2012-05-21 20:57:03 +0300 |
---|---|---|
committer | Daniel Levin <dendy@ti.com> | 2012-07-25 08:56:42 -0500 |
commit | 98b582d84092169335ed52e45a9fad4ce2f6c94e (patch) | |
tree | 875e74b0f76b953adb7a2958e3682e67a6c24fc2 /camera/OMXCameraAdapter/OMXCapture.cpp | |
parent | febd2a9115143c5181b952c20822488047e9bd0c (diff) | |
download | hardware_ti_omap4-98b582d84092169335ed52e45a9fad4ce2f6c94e.zip hardware_ti_omap4-98b582d84092169335ed52e45a9fad4ce2f6c94e.tar.gz hardware_ti_omap4-98b582d84092169335ed52e45a9fad4ce2f6c94e.tar.bz2 |
CameraHal: Proper buffer tracking with Shot config flush
Reset buffer tracking if application sends
flush shot config queue shot parameter.
Avoid queuing too many capture buffers to DOMX Camera.
Change-Id: I0a6c1a38ea8ab75c1176d84fc4e3ccdb36521d8c
Signed-off-by: Vladimir Petrov <vppetrov@mm-sol.com>
Diffstat (limited to 'camera/OMXCameraAdapter/OMXCapture.cpp')
-rw-r--r-- | camera/OMXCameraAdapter/OMXCapture.cpp | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/camera/OMXCameraAdapter/OMXCapture.cpp b/camera/OMXCameraAdapter/OMXCapture.cpp index 07d4a99..f52804c 100644 --- a/camera/OMXCameraAdapter/OMXCapture.cpp +++ b/camera/OMXCameraAdapter/OMXCapture.cpp @@ -1167,11 +1167,27 @@ status_t OMXCameraAdapter::startImageCapture(bool bracketing, CachedCaptureParam // accumulating shots if ((ret == NO_ERROR) && (mBurstFramesQueued > 0)) { int index = 0; + int queued = 0; Mutex::Autolock lock(mBurstLock); - mCapturedFrames += mBurstFrames; - mBurstFramesAccum += mBurstFrames; - while ((mBurstFramesQueued < mBurstFramesAccum) && (index < capData->mNumBufs)) { + if (capParams->mFlushShotConfigQueue) { + // reset shot queue + mCapturedFrames = mBurstFrames; + mBurstFramesAccum = mBurstFrames; + mBurstFramesQueued = 0; + for ( int index = 0 ; index < capData->mNumBufs ; index++ ) { + if (OMXCameraPortParameters::FILL == capData->mStatus[index]) { + mBurstFramesQueued++; + } + } + } else { + mCapturedFrames += mBurstFrames; + mBurstFramesAccum += mBurstFrames; + } + + while ((mBurstFramesQueued < mBurstFramesAccum) && + (index < capData->mNumBufs) && + (queued < capData->mMaxQueueable)) { if (capData->mStatus[index] == OMXCameraPortParameters::IDLE) { CAMHAL_LOGDB("Queuing buffer on Capture port - %p", capData->mBufferHeader[index]->pBuffer); @@ -1180,6 +1196,9 @@ status_t OMXCameraAdapter::startImageCapture(bool bracketing, CachedCaptureParam (OMX_BUFFERHEADERTYPE*)capData->mBufferHeader[index]); GOTO_EXIT_IF((eError!=OMX_ErrorNone), eError); mBurstFramesQueued++; + queued++; + } else if (OMXCameraPortParameters::FILL == capData->mStatus[index]) { + queued++; } index++; } |