summaryrefslogtreecommitdiffstats
path: root/camera
diff options
context:
space:
mode:
authorSteve Kondik <shade@chemlab.org>2010-11-11 23:48:22 -0500
committerSteve Kondik <shade@chemlab.org>2010-11-12 00:43:16 -0500
commit65fd231adb19aad0df924c2578e2882d05e19e61 (patch)
treeeeb0f7bf96904d31cfe2f03137f0176375e593b9 /camera
parentaad9f21a435605402b94a52cab555fde0c66c78d (diff)
downloadframeworks_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.mk4
-rw-r--r--[-rwxr-xr-x]camera/libcameraservice/CameraService.cpp32
-rw-r--r--camera/libcameraservice/CameraService.h2
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;