diff options
author | Steve Kondik <shade@chemlab.org> | 2010-11-11 23:48:22 -0500 |
---|---|---|
committer | Steve Kondik <shade@chemlab.org> | 2010-11-12 00:43:16 -0500 |
commit | 65fd231adb19aad0df924c2578e2882d05e19e61 (patch) | |
tree | eeb0f7bf96904d31cfe2f03137f0176375e593b9 /camera | |
parent | aad9f21a435605402b94a52cab555fde0c66c78d (diff) | |
download | frameworks_base-65fd231adb19aad0df924c2578e2882d05e19e61.zip frameworks_base-65fd231adb19aad0df924c2578e2882d05e19e61.tar.gz frameworks_base-65fd231adb19aad0df924c2578e2882d05e19e61.tar.bz2 |
cameraservice: Use default overlay format unless flag set.
Also destroy previous overlay and handle NULL instance.
Define BOARD_OVERLAY_FORMAT_YCbCr_420_SP for 7X30.
Change-Id: Ib2ca5e17aecd8d19841c0357594b3c4fed0a01d6
Diffstat (limited to 'camera')
-rw-r--r-- | camera/libcameraservice/Android.mk | 4 | ||||
-rw-r--r--[-rwxr-xr-x] | camera/libcameraservice/CameraService.cpp | 32 | ||||
-rw-r--r-- | camera/libcameraservice/CameraService.h | 2 |
3 files changed, 37 insertions, 1 deletions
diff --git a/camera/libcameraservice/Android.mk b/camera/libcameraservice/Android.mk index 09494ea..4eb95f0 100644 --- a/camera/libcameraservice/Android.mk +++ b/camera/libcameraservice/Android.mk @@ -68,6 +68,10 @@ ifeq ($(TARGET_SIMULATOR),true) LOCAL_CFLAGS += -DSINGLE_PROCESS endif +ifeq ($(BOARD_OVERLAY_FORMAT_YCbCr_420_SP),true) +LOCAL_CFLAGS += -DUSE_OVERLAY_FORMAT_YCbCr_420_SP +endif + ifeq ($(USE_CAMERA_STUB), true) LOCAL_STATIC_LIBRARIES += libcamerastub LOCAL_CFLAGS += -include CameraHardwareStub.h diff --git a/camera/libcameraservice/CameraService.cpp b/camera/libcameraservice/CameraService.cpp index d390466..259ceed 100755..100644 --- a/camera/libcameraservice/CameraService.cpp +++ b/camera/libcameraservice/CameraService.cpp @@ -158,11 +158,13 @@ sp<ICamera> CameraService::connect(const sp<ICameraClient>& cameraClient) // create a new Client object client = new Client(this, cameraClient, callingPid); mClient = client; +#ifdef USE_OVERLAY_FORMAT_YCbCr_420_SP if (client->mHardware == NULL) { client = NULL; mClient = NULL; return client; } +#endif #if DEBUG_CLIENT_REFERENCES // Enable tracking for this object, and track increments and decrements of // the refcount. @@ -244,7 +246,9 @@ CameraService::Client::Client(const sp<CameraService>& cameraService, mCameraClient = cameraClient; mClientPid = clientPid; mHardware = openCameraHardware(); +#ifdef USE_OVERLAY_FORMAT_YCbCr_420_SP if (mHardware != NULL) { +#endif mUseOverlay = mHardware->useOverlay(); mHardware->setCallbacks(notifyCallback, @@ -266,7 +270,9 @@ CameraService::Client::Client(const sp<CameraService>& cameraService, mPreviewCallbackFlag = FRAME_CALLBACK_FLAG_NOOP; mOrientation = 0; cameraService->incUsers(); +#ifdef USE_OVERLAY_FORMAT_YCbCr_420_SP } +#endif LOGV("Client::Client X (pid %d)", callingPid); } @@ -446,10 +452,12 @@ void CameraService::Client::disconnect() // Release the held overlay resources. if (mUseOverlay) { +#ifdef USE_OVERLAY_FORMAT_YCbCr_420_SP /* Release previous overlay handle */ if (mOverlay != NULL) { mOverlay->destroy(); } +#endif mOverlayRef = 0; } mHardware.clear(); @@ -492,9 +500,13 @@ status_t CameraService::Client::setPreviewDisplay(const sp<ISurface>& surface) // buffers now. if (mHardware->previewEnabled() || mUseOverlay) { if (mUseOverlay) { +#ifdef USE_OVERLAY_FORMAT_YCbCr_420_SP if (mSurface != NULL) { result = setOverlay(); } +#else + result = setOverlay(); +#endif } else if (mSurface != 0) { result = registerPreviewBuffers(); } @@ -603,9 +615,11 @@ status_t CameraService::Client::setOverlay() sp<Overlay> dummy; mHardware->setOverlay( dummy ); mOverlayRef = 0; +#ifdef USE_OVERLAY_FORMAT_YCbCr_420_SP if (mOverlay != NULL) { mOverlay->destroy(); } +#endif } status_t ret = NO_ERROR; @@ -619,7 +633,12 @@ status_t CameraService::Client::setOverlay() // wait in the createOverlay call if the previous overlay is in the // process of being destroyed. for (int retry = 0; retry < 50; ++retry) { - mOverlayRef = mSurface->createOverlay(w, h, OVERLAY_FORMAT_YCbCr_420_SP, + mOverlayRef = mSurface->createOverlay(w, h, +#ifdef USE_OVERLAY_FORMAT_YCbCr_420_SP + OVERLAY_FORMAT_YCbCr_420_SP, +#else + OVERLAY_FORMAT_DEFAULT, +#endif mOrientation); if (mOverlayRef != NULL) break; LOGW("Overlay create failed - retrying"); @@ -630,8 +649,12 @@ status_t CameraService::Client::setOverlay() LOGE("Overlay Creation Failed!"); return -EINVAL; } +#ifdef USE_OVERLAY_FORMAT_YCbCr_420_SP mOverlay = new Overlay(mOverlayRef); ret = mHardware->setOverlay(mOverlay); +#else + ret = mHardware->setOverlay(new Overlay(mOverlayRef)); +#endif } } else { ret = mHardware->setOverlay(NULL); @@ -693,8 +716,13 @@ status_t CameraService::Client::startPreviewMode() if (mSurface != 0) { ret = setOverlay(); } +#ifdef USE_OVERLAY_FORMAT_YCbCr_420_SP ret = mHardware->startPreview(); +#endif if (ret != NO_ERROR) return ret; +#ifndef USE_OVERLAY_FORMAT_YCbCr_420_SP + ret = mHardware->startPreview(); +#endif } else { mHardware->enableMsgType(CAMERA_MSG_PREVIEW_FRAME); ret = mHardware->startPreview(); @@ -770,9 +798,11 @@ void CameraService::Client::stopPreview() if (mSurface != 0 && !mUseOverlay) { mSurface->unregisterBuffers(); +#ifdef USE_OVERLAY_FORMAT_YCbCr_420_SP } else { mOverlayW = 0; mOverlayH = 0; +#endif } } diff --git a/camera/libcameraservice/CameraService.h b/camera/libcameraservice/CameraService.h index 7a04fb1..08dae31 100644 --- a/camera/libcameraservice/CameraService.h +++ b/camera/libcameraservice/CameraService.h @@ -200,7 +200,9 @@ private: bool mUseOverlay; sp<OverlayRef> mOverlayRef; +#ifdef USE_OVERLAY_FORMAT_YCbCr_420_SP sp<Overlay> mOverlay; +#endif int mOverlayW; int mOverlayH; |