summaryrefslogtreecommitdiffstats
path: root/camera/BaseCameraAdapter.cpp
diff options
context:
space:
mode:
authorEmilian Peev <epeev@mm-sol.com>2012-06-04 14:26:55 +0300
committerDaniel Levin <dendy@ti.com>2012-07-25 08:56:42 -0500
commit9ce01126cd53a6bfbe7169ab39c5b951a6e120a6 (patch)
treefa062e8ef58ae037aa843284afa15d1dadfc0c48 /camera/BaseCameraAdapter.cpp
parent248c9372a70a9679b9a165fb18ba90d41882b7c1 (diff)
downloadhardware_ti_omap4-9ce01126cd53a6bfbe7169ab39c5b951a6e120a6.zip
hardware_ti_omap4-9ce01126cd53a6bfbe7169ab39c5b951a6e120a6.tar.gz
hardware_ti_omap4-9ce01126cd53a6bfbe7169ab39c5b951a6e120a6.tar.bz2
CameraHal: Handles preview and snapshot buffers separately
- Hal should differentiate between preview and snapshot frames. The camera client can expect postview callbacks even if the preview frame notifications are internally disabled during image capture. Change-Id: I5ab7ecf51860989bf983e4dc116f6816ee57e8f7 Signed-off-by: Emilian Peev <epeev@mm-sol.com>
Diffstat (limited to 'camera/BaseCameraAdapter.cpp')
-rw-r--r--camera/BaseCameraAdapter.cpp27
1 files changed, 23 insertions, 4 deletions
diff --git a/camera/BaseCameraAdapter.cpp b/camera/BaseCameraAdapter.cpp
index 48f55a5..8da596e 100644
--- a/camera/BaseCameraAdapter.cpp
+++ b/camera/BaseCameraAdapter.cpp
@@ -110,6 +110,7 @@ BaseCameraAdapter::~BaseCameraAdapter()
mShutterSubscribers.clear();
mZoomSubscribers.clear();
mFaceSubscribers.clear();
+ mSnapshotSubscribers.clear();
LOG_FUNCTION_NAME_EXIT;
}
@@ -184,6 +185,9 @@ void BaseCameraAdapter::enableMsgType(int32_t msgs, frame_callback callback, eve
case CameraFrame::FRAME_DATA_SYNC:
mFrameDataSubscribers.add((int) cookie, callback);
break;
+ case CameraFrame::SNAPSHOT_FRAME:
+ mSnapshotSubscribers.add((int) cookie, callback);
+ break;
case CameraFrame::IMAGE_FRAME:
mImageSubscribers.add((int) cookie, callback);
break;
@@ -241,6 +245,9 @@ void BaseCameraAdapter::disableMsgType(int32_t msgs, void* cookie)
case CameraFrame::FRAME_DATA_SYNC:
mFrameDataSubscribers.removeItem((int) cookie);
break;
+ case CameraFrame::SNAPSHOT_FRAME:
+ mSnapshotSubscribers.removeItem((int) cookie);
+ break;
case CameraFrame::IMAGE_FRAME:
mImageSubscribers.removeItem((int) cookie);
break;
@@ -256,6 +263,7 @@ void BaseCameraAdapter::disableMsgType(int32_t msgs, void* cookie)
case CameraFrame::ALL_FRAMES:
mFrameSubscribers.removeItem((int) cookie);
mFrameDataSubscribers.removeItem((int) cookie);
+ mSnapshotSubscribers.removeItem((int) cookie);
mImageSubscribers.removeItem((int) cookie);
mRawSubscribers.removeItem((int) cookie);
mVideoSubscribers.removeItem((int) cookie);
@@ -423,6 +431,7 @@ status_t BaseCameraAdapter::sendCommand(CameraCommands operation, int value1, in
mPreviewBuffers = desc->mBuffers;
mPreviewBuffersLength = desc->mLength;
mPreviewBuffersAvailable.clear();
+ mSnapshotBuffersAvailable.clear();
for ( uint32_t i = 0 ; i < desc->mMaxQueueable ; i++ )
{
mPreviewBuffersAvailable.add(&mPreviewBuffers[i], 0);
@@ -1311,7 +1320,7 @@ status_t BaseCameraAdapter::sendFrameToSubscribers(CameraFrame *frame)
break;
case CameraFrame::SNAPSHOT_FRAME:
{
- ret = __sendFrameToSubscribers(frame, &mFrameSubscribers, CameraFrame::SNAPSHOT_FRAME);
+ ret = __sendFrameToSubscribers(frame, &mSnapshotSubscribers, CameraFrame::SNAPSHOT_FRAME);
}
break;
case CameraFrame::VIDEO_FRAME_SYNC:
@@ -1439,7 +1448,7 @@ int BaseCameraAdapter::setInitFrameRefCount(CameraBuffer * buf, unsigned int mas
break;
case CameraFrame::SNAPSHOT_FRAME:
{
- setFrameRefCount(buf, CameraFrame::SNAPSHOT_FRAME, mFrameSubscribers.size());
+ setFrameRefCount(buf, CameraFrame::SNAPSHOT_FRAME, mSnapshotSubscribers.size());
}
break;
case CameraFrame::VIDEO_FRAME_SYNC:
@@ -1483,9 +1492,14 @@ int BaseCameraAdapter::getFrameRefCount(CameraBuffer * frameBuf, CameraFrame::Fr
res = mCaptureBuffersAvailable.valueFor(frameBuf );
}
break;
- case CameraFrame::PREVIEW_FRAME_SYNC:
case CameraFrame::SNAPSHOT_FRAME:
{
+ Mutex::Autolock lock(mSnapshotBufferLock);
+ res = mSnapshotBuffersAvailable.valueFor( ( unsigned int ) frameBuf );
+ }
+ break;
+ case CameraFrame::PREVIEW_FRAME_SYNC:
+ {
Mutex::Autolock lock(mPreviewBufferLock);
res = mPreviewBuffersAvailable.valueFor(frameBuf );
}
@@ -1530,9 +1544,14 @@ void BaseCameraAdapter::setFrameRefCount(CameraBuffer * frameBuf, CameraFrame::F
mCaptureBuffersAvailable.replaceValueFor(frameBuf, refCount);
}
break;
- case CameraFrame::PREVIEW_FRAME_SYNC:
case CameraFrame::SNAPSHOT_FRAME:
{
+ Mutex::Autolock lock(mSnapshotBufferLock);
+ mSnapshotBuffersAvailable.replaceValueFor( ( unsigned int ) frameBuf, refCount);
+ }
+ break;
+ case CameraFrame::PREVIEW_FRAME_SYNC:
+ {
Mutex::Autolock lock(mPreviewBufferLock);
mPreviewBuffersAvailable.replaceValueFor(frameBuf, refCount);
}