From f091e833d339d344fbc4815bcc87ce97d8535cd8 Mon Sep 17 00:00:00 2001 From: Chih-Chung Chang Date: Fri, 22 Jan 2010 17:49:48 -0800 Subject: [PATCH] Add support for setting camera display orientation. --- camera/libcameraservice/CameraService.cpp | 32 +++++++++++++++++------ include/ui/Camera.h | 2 +- include/ui/CameraParameters.h | 9 ------- libs/ui/CameraParameters.cpp | 20 -------------- 4 files changed, 25 insertions(+), 38 deletions(-) diff --git a/camera/libcameraservice/CameraService.cpp b/camera/libcameraservice/CameraService.cpp index a8e217e4e..81d60dc5d 100644 --- a/camera/libcameraservice/CameraService.cpp +++ b/camera/libcameraservice/CameraService.cpp @@ -1191,14 +1191,6 @@ status_t CameraService::Client::setParameters(const String8& params) CameraParameters p(params); - // The orientation parameter is actually for CameraService, not for the camera driver. - if (p.getOrientation() == CameraParameters::CAMERA_ORIENTATION_PORTRAIT) { - LOGV("portrait mode"); - mOrientation = ISurface::BufferHeap::ROT_90; - } else { - mOrientation = 0; - } - return mHardware->setParameters(p); } @@ -1224,6 +1216,30 @@ status_t CameraService::Client::sendCommand(int32_t cmd, int32_t arg1, int32_t a status_t result = checkPid(); if (result != NO_ERROR) return result; + if (cmd == CAMERA_CMD_SET_DISPLAY_ORIENTATION) { + // The orientation cannot be set during preview. + if (mHardware->previewEnabled()) { + return INVALID_OPERATION; + } + switch (arg1) { + case 0: + mOrientation = ISurface::BufferHeap::ROT_0; + break; + case 90: + mOrientation = ISurface::BufferHeap::ROT_90; + break; + case 180: + mOrientation = ISurface::BufferHeap::ROT_180; + break; + case 270: + mOrientation = ISurface::BufferHeap::ROT_270; + break; + default: + return BAD_VALUE; + } + return OK; + } + if (mHardware == 0) { LOGE("mHardware is NULL, returning."); return INVALID_OPERATION; diff --git a/include/ui/Camera.h b/include/ui/Camera.h index 5219772a1..c506fb895 100644 --- a/include/ui/Camera.h +++ b/include/ui/Camera.h @@ -82,6 +82,7 @@ enum { enum { CAMERA_CMD_START_SMOOTH_ZOOM = 1, CAMERA_CMD_STOP_SMOOTH_ZOOM = 2, + CAMERA_CMD_SET_DISPLAY_ORIENTATION = 3, }; // camera fatal errors @@ -209,4 +210,3 @@ private: }; // namespace android #endif - diff --git a/include/ui/CameraParameters.h b/include/ui/CameraParameters.h index a5ea133be..cae06761a 100644 --- a/include/ui/CameraParameters.h +++ b/include/ui/CameraParameters.h @@ -29,12 +29,6 @@ public: CameraParameters(const String8 ¶ms) { unflatten(params); } ~CameraParameters(); - enum { - CAMERA_ORIENTATION_UNKNOWN = 0, - CAMERA_ORIENTATION_PORTRAIT = 1, - CAMERA_ORIENTATION_LANDSCAPE = 2, - }; - String8 flatten() const; void unflatten(const String8 ¶ms); @@ -63,9 +57,6 @@ public: void setPictureFormat(const char *format); const char *getPictureFormat() const; - int getOrientation() const; - void setOrientation(int orientation); - void dump() const; status_t dump(int fd, const Vector& args) const; diff --git a/libs/ui/CameraParameters.cpp b/libs/ui/CameraParameters.cpp index 2e0409bc6..a94f6b9e4 100644 --- a/libs/ui/CameraParameters.cpp +++ b/libs/ui/CameraParameters.cpp @@ -121,9 +121,6 @@ const char CameraParameters::FOCUS_MODE_INFINITY[] = "infinity"; const char CameraParameters::FOCUS_MODE_MACRO[] = "macro"; const char CameraParameters::FOCUS_MODE_FIXED[] = "fixed"; -static const char* portrait = "portrait"; -static const char* landscape = "landscape"; - CameraParameters::CameraParameters() : mMap() { @@ -282,23 +279,6 @@ void CameraParameters::setPreviewFormat(const char *format) set(KEY_PREVIEW_FORMAT, format); } -int CameraParameters::getOrientation() const -{ - const char* orientation = get("orientation"); - if (orientation && !strcmp(orientation, portrait)) - return CAMERA_ORIENTATION_PORTRAIT; - return CAMERA_ORIENTATION_LANDSCAPE; -} - -void CameraParameters::setOrientation(int orientation) -{ - if (orientation == CAMERA_ORIENTATION_PORTRAIT) { - set("orientation", portrait); - } else { - set("orientation", landscape); - } -} - const char *CameraParameters::getPreviewFormat() const { return get(KEY_PREVIEW_FORMAT);