diff options
author | x0118064 <saravanan.s@ti.com> | 2011-09-26 19:03:36 -0500 |
---|---|---|
committer | Ricardo Cerqueira <cyanogenmod@cerqueira.org> | 2012-11-26 14:35:22 +0000 |
commit | aa01a15ff23d0d7b33956a0bbbbf29ce5c53b0ec (patch) | |
tree | 6c67ced1e4b2ba82cbdc2523d06fb0489cc21e5f /services/camera | |
parent | a6c026ea48535a568173c6911fb413afa86db780 (diff) | |
download | frameworks_av-aa01a15ff23d0d7b33956a0bbbbf29ce5c53b0ec.zip frameworks_av-aa01a15ff23d0d7b33956a0bbbbf29ce5c53b0ec.tar.gz frameworks_av-aa01a15ff23d0d7b33956a0bbbbf29ce5c53b0ec.tar.bz2 |
CameraService: Add compatibility for OMAP ICS blobs
Workaround the conflict created by usage of the 0x800 enum
in JB (focus move) vs its OMAP usage in ICS (burst jpeg)
Originally:
CameraService: Adds support for burst compressed images
Signed-off-by: Emilian Peev <epeev@mm-sol.com>
Moved the changes under OMAP_ENHANCEMENT
Signed-off-by: Solaiyappan Saravanan <saravanan.s@ti.com>
Change-Id: I1f17675b2854793de83c2b7cdecafc039c46f355
CameraService: Adds support for burst compressed images
Depends on:
- http://review.omapzoom.org/#/c/24537/
- http://review.omapzoom.org/#/c/24538/
Change-Id: I1f17675b2854793de83c2b7cdecafc039c46f355
Signed-off-by: Solaiyappan Saravanan <saravanan.s@ti.com>
Signed-off-by: Emilian Peev <epeev@mm-sol.com>
Signed-off-by: Daniel Levin <dendy@ti.com>
Add CAMERA_MSG_RAW_BURST handling to CameraService
Change-Id: Id958836e726e9908f60311d5bfc6d26eb8298cea
Signed-off-by: Vladimir Petrov <vppetrov@mm-sol.com>
CameraService: Disable capture message types before stopping preview
If we try to stopPreview in the middle of capture, these
callbacks might occur. In this case, stopPreview will already be
holding mLock while the message handler will try to grab mLock.
Deadlock occurs if the stopPreview and message callback dependencies
are in the same thread.
Issue reproduced with Image Capture/Home Key scenario.
Port from GB: Issue is still reproducible (although extremely
rarely) in ICS.
Signed-off-by: Emilian Peev <epeev@mm-sol.com>
Signed-off-by: Jean Johnson <jean-johnson@ti.com>
Signed-off-by: Daniel Levin <dendy@ti.com>
Change-Id: I222d00f8bd69c11302a35610095efe0ddc49f876
Diffstat (limited to 'services/camera')
-rw-r--r-- | services/camera/libcameraservice/CameraClient.cpp | 47 | ||||
-rw-r--r-- | services/camera/libcameraservice/CameraClient.h | 3 |
2 files changed, 49 insertions, 1 deletions
diff --git a/services/camera/libcameraservice/CameraClient.cpp b/services/camera/libcameraservice/CameraClient.cpp index b930c02..669c3b5 100644 --- a/services/camera/libcameraservice/CameraClient.cpp +++ b/services/camera/libcameraservice/CameraClient.cpp @@ -84,7 +84,11 @@ status_t CameraClient::initialize(camera_module_t *module) { // Enable zoom, error, focus, and metadata messages by default enableMsgType(CAMERA_MSG_ERROR | CAMERA_MSG_ZOOM | CAMERA_MSG_FOCUS | - CAMERA_MSG_PREVIEW_METADATA | CAMERA_MSG_FOCUS_MOVE); + CAMERA_MSG_PREVIEW_METADATA +#ifndef OMAP_ICS_CAMERA + | CAMERA_MSG_FOCUS_MOVE +#endif + ); LOG1("CameraClient::initialize X (pid %d, id %d)", callingPid, mCameraId); return OK; @@ -393,6 +397,11 @@ status_t CameraClient::startPreviewMode() { native_window_set_buffers_transform(mPreviewWindow.get(), mOrientation); } + +#if defined(OMAP_ICS_CAMERA) || defined(OMAP_ENHANCEMENT_BURST_CAPTURE) + disableMsgType(CAMERA_MSG_COMPRESSED_BURST_IMAGE); +#endif + mHardware->setPreviewWindow(mPreviewWindow); result = mHardware->startPreview(); @@ -432,6 +441,16 @@ void CameraClient::stopPreview() { Mutex::Autolock lock(mLock); if (checkPidAndHardware() != NO_ERROR) return; +#ifdef OMAP_ENHANCEMENT + // According to framework documentation, preview needs + // to be started for image capture. This will make sure + // that image capture related messages get disabled if + // not done already in their respective handlers. + // If these messages come when in the midddle of + // stopping preview we will deadlock the system in + // lockIfMessageWanted(). + disableMsgType(CAMERA_MSG_POSTVIEW_FRAME); +#endif disableMsgType(CAMERA_MSG_PREVIEW_FRAME); mHardware->stopPreview(); @@ -527,8 +546,15 @@ status_t CameraClient::takePicture(int msgType) { CAMERA_MSG_POSTVIEW_FRAME | CAMERA_MSG_RAW_IMAGE | CAMERA_MSG_RAW_IMAGE_NOTIFY | +#if defined(OMAP_ICS_CAMERA) || defined(OMAP_ENHANCEMENT_BURST_CAPTURE) + CAMERA_MSG_RAW_BURST | +#endif CAMERA_MSG_COMPRESSED_IMAGE); +#if defined(OMAP_ICS_CAMERA) || defined(OMAP_ENHANCEMENT_BURST_CAPTURE) + picMsgType |= CAMERA_MSG_COMPRESSED_BURST_IMAGE; +#endif + enableMsgType(picMsgType); return mHardware->takePicture(); @@ -740,6 +766,11 @@ void CameraClient::dataCallback(int32_t msgType, case CAMERA_MSG_COMPRESSED_IMAGE: client->handleCompressedPicture(dataPtr); break; +#if defined(OMAP_ICS_CAMERA) || defined(OMAP_ENHANCEMENT_BURST_CAPTURE) + case CAMERA_MSG_COMPRESSED_BURST_IMAGE: + client->handleCompressedBurstPicture(dataPtr); + break; +#endif default: client->handleGenericData(msgType, dataPtr, metadata); break; @@ -869,6 +900,20 @@ void CameraClient::handleCompressedPicture(const sp<IMemory>& mem) { } } +#if defined(OMAP_ICS_CAMERA) || defined(OMAP_ENHANCEMENT_BURST_CAPTURE) +// burst picture callback - compressed picture ready +void CameraClient::handleCompressedBurstPicture(const sp<IMemory>& mem) { + // Don't disable this message type yet. In this mode takePicture() will + // get called only once. When burst finishes this message will get automatically + // disabled in the respective call for restarting the preview. + + sp<ICameraClient> c = mCameraClient; + mLock.unlock(); + if (c != 0) { + c->dataCallback(CAMERA_MSG_COMPRESSED_IMAGE, mem, NULL); + } +} +#endif void CameraClient::handleGenericNotify(int32_t msgType, int32_t ext1, int32_t ext2) { diff --git a/services/camera/libcameraservice/CameraClient.h b/services/camera/libcameraservice/CameraClient.h index 2f31c4e..9b10706 100644 --- a/services/camera/libcameraservice/CameraClient.h +++ b/services/camera/libcameraservice/CameraClient.h @@ -97,6 +97,9 @@ private: void handlePostview(const sp<IMemory>& mem); void handleRawPicture(const sp<IMemory>& mem); void handleCompressedPicture(const sp<IMemory>& mem); +#if defined(OMAP_ICS_CAMERA) || defined(OMAP_ENHANCEMENT_BURST_CAPTURE) + void handleCompressedBurstPicture(const sp<IMemory>& mem); +#endif void handleGenericNotify(int32_t msgType, int32_t ext1, int32_t ext2); void handleGenericData(int32_t msgType, const sp<IMemory>& dataPtr, camera_frame_metadata_t *metadata); |