summaryrefslogtreecommitdiffstats
path: root/camera/OMXCameraAdapter/OMXCapture.cpp
diff options
context:
space:
mode:
authorVladimir Petrov <vppetrov@mm-sol.com>2012-05-21 20:57:03 +0300
committerDaniel Levin <dendy@ti.com>2012-07-25 08:56:42 -0500
commit98b582d84092169335ed52e45a9fad4ce2f6c94e (patch)
tree875e74b0f76b953adb7a2958e3682e67a6c24fc2 /camera/OMXCameraAdapter/OMXCapture.cpp
parentfebd2a9115143c5181b952c20822488047e9bd0c (diff)
downloadhardware_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.cpp25
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++;
}