diff options
author | Emilian Peev <epeev@mm-sol.com> | 2012-06-04 14:26:55 +0300 |
---|---|---|
committer | Daniel Levin <dendy@ti.com> | 2012-07-25 08:56:42 -0500 |
commit | 9ce01126cd53a6bfbe7169ab39c5b951a6e120a6 (patch) | |
tree | fa062e8ef58ae037aa843284afa15d1dadfc0c48 /camera/BaseCameraAdapter.cpp | |
parent | 248c9372a70a9679b9a165fb18ba90d41882b7c1 (diff) | |
download | hardware_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.cpp | 27 |
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); } |