diff options
author | Maarten Hooft <mthooft@google.com> | 2010-11-04 10:57:10 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2010-11-04 10:57:10 -0700 |
commit | 54ff5929060e88739e927a6db15bca16016cb4e9 (patch) | |
tree | 71167dbb1491bb21262b3b981d8c71032f4777f7 /libcamera | |
parent | e798cecd8dfdc61a7f1d5b3ab41ad9f89c714b43 (diff) | |
parent | a616e93b29f731fa4c706499a928e4a8d433396f (diff) | |
download | device_samsung_crespo-54ff5929060e88739e927a6db15bca16016cb4e9.zip device_samsung_crespo-54ff5929060e88739e927a6db15bca16016cb4e9.tar.gz device_samsung_crespo-54ff5929060e88739e927a6db15bca16016cb4e9.tar.bz2 |
am a616e93b: am f893585c: Merge "libcamera: for reliability" into gingerbread
* commit 'a616e93b29f731fa4c706499a928e4a8d433396f':
libcamera: for reliability
Diffstat (limited to 'libcamera')
-rw-r--r-- | libcamera/SecCamera.cpp | 4 | ||||
-rw-r--r-- | libcamera/SecCamera.h | 1 | ||||
-rw-r--r-- | libcamera/SecCameraHWInterface.cpp | 31 |
3 files changed, 28 insertions, 8 deletions
diff --git a/libcamera/SecCamera.cpp b/libcamera/SecCamera.cpp index 28cd65a..b71a2ce 100644 --- a/libcamera/SecCamera.cpp +++ b/libcamera/SecCamera.cpp @@ -1845,6 +1845,10 @@ int SecCamera::getSnapshotPixelFormat(void) return m_snapshot_v4lformat; } +int SecCamera::cancelPicture(void) +{ + return close_buffers(m_buffers_c); +} // ====================================================================== // Settings diff --git a/libcamera/SecCamera.h b/libcamera/SecCamera.h index 700b653..e1460b9 100644 --- a/libcamera/SecCamera.h +++ b/libcamera/SecCamera.h @@ -328,6 +328,7 @@ public: unsigned int getRecPhyAddrY(int); unsigned int getRecPhyAddrC(int); #endif + int cancelPicture(void); int flagPreviewStart(void); int getPreview(void); int setPreviewSize(int width, int height, int pixel_format); diff --git a/libcamera/SecCameraHWInterface.cpp b/libcamera/SecCameraHWInterface.cpp index 5b45654..0e2a418 100644 --- a/libcamera/SecCameraHWInterface.cpp +++ b/libcamera/SecCameraHWInterface.cpp @@ -732,6 +732,9 @@ void CameraHardwareSec::stopPreview() { LOGV("%s :", __func__); + if (!previewEnabled()) + return; + /* request that the preview thread exit. we can wait because we're * called by CameraServices with a lock but it has disabled all preview * related callbacks so previewThread should not invoke any callbacks. @@ -1129,11 +1132,12 @@ int CameraHardwareSec::pictureThread() if(isLSISensor) { LOGI("== Camera Sensor Detect %s - Samsung LSI SOC 5M ==\n", mCameraSensorName); // LSI 5M SOC - SplitFrame(jpeg_data, SecCamera::getInterleaveDataSize(), + if (!SplitFrame(jpeg_data, SecCamera::getInterleaveDataSize(), SecCamera::getJpegLineLength(), mPostViewWidth * 2, mPostViewWidth, JpegHeap->base(), &JpegImageSize, - PostviewHeap->base(), &mPostViewSize); + PostviewHeap->base(), &mPostViewSize)) + return UNKNOWN_ERROR; } else { LOGI("== Camera Sensor Detect %s Sony SOC 5M ==\n", mCameraSensorName); decodeInterleaveData(jpeg_data, SecCamera::getInterleaveDataSize(), mPostViewWidth, mPostViewHeight, @@ -1265,6 +1269,10 @@ status_t CameraHardwareSec::takePicture() status_t CameraHardwareSec::cancelPicture() { + mPictureThread->requestExitAndWait(); + + mSecCamera->cancelPicture(); + LOGW("%s : not supported, just returning NO_ERROR", __func__); return NO_ERROR; } @@ -1347,14 +1355,22 @@ bool CameraHardwareSec::SplitFrame(unsigned char *pFrame, int dwSize, while (pSrc < pSrcEnd) { // Check video start marker if (CheckVideoStartMarker(pSrc)) { + int copyLength; + + if (pSrc + dwVideoLineLength <= pSrcEnd) + copyLength = dwVideoLineLength; + else + copyLength = pSrcEnd - pSrc - VIDEO_COMMENT_MARKER_LENGTH; + // Copy video data if (pV) { - memcpy(pV, pSrc + VIDEO_COMMENT_MARKER_LENGTH, dwVideoLineLength); - pV += dwVideoLineLength; - dwVSize += dwVideoLineLength; + memcpy(pV, pSrc + VIDEO_COMMENT_MARKER_LENGTH, copyLength); + pV += copyLength; + dwVSize += copyLength; } - pSrc += dwVideoLineLength + VIDEO_COMMENT_MARKER_LENGTH; - } else { + + pSrc += copyLength + VIDEO_COMMENT_MARKER_LENGTH; + } else { // Copy pure JPEG data int size = 0; int dwCopyBufLen = dwJPEGLineLength <= pSrcEnd-pSrc ? dwJPEGLineLength : pSrcEnd - pSrc; @@ -1379,7 +1395,6 @@ bool CameraHardwareSec::SplitFrame(unsigned char *pFrame, int dwSize, pJ += dwCopyBufLen; pSrc += dwCopyBufLen; } - if (isFinishJpeg) break; } |