summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortbalden <illespal@gmail.com>2013-03-23 23:06:45 +0100
committertbalden <illespal@gmail.com>2013-04-14 11:01:38 +0200
commitff2064e7dcad3c85005fc4564e04fde184240df9 (patch)
tree52dd63087c9954b038196439420e91c843dcab8c
parent203e28ca88001f2a0f4db7a3018977c687333941 (diff)
downloadframeworks_av-ff2064e7dcad3c85005fc4564e04fde184240df9.zip
frameworks_av-ff2064e7dcad3c85005fc4564e04fde184240df9.tar.gz
frameworks_av-ff2064e7dcad3c85005fc4564e04fde184240df9.tar.bz2
Camera: QCOM legacy definitions,HTC cam switch,NO_UPDATE_PREVIEW
Updating Camera parameters, and service with several compatibility patches: 1., QCOM legacy CameraParameters and functions: Adding these will make ICS qcomm camera blobs work on JB 4.2. Use BOARD_USES_QCOM_LEGACY_CAM_PARAMS := true in BoardConfig to use this. Also fixes the problem of legacy qcom camera blobs with recent libcameraservice QCOM_HARDWARE changes, where the orientation is messed up on first preview: the fix is leaving out setPreviewWindow(window) for legacy qcomm cam blobs. 2., Also adding NO_UPDATE_PREVIEW flag for legacy purposes. 3., Adding adding the set orientation patch: Always set buffers orientation when setting the qcom camera preview window Fixes the rotated preview on TouchPad https://github.com/CyanogenMod/android_frameworks_base/commit/1a8e41a3c7434737db89b604352575f8b3109e7a 4., camera: Full support for HTC camera switch 5., Adding more parameters for HTC Explorer Change-Id: I2bfc72b8ef027665356788f1db7f96b31d037dbe
-rw-r--r--camera/Android.mk3
-rw-r--r--camera/CameraParameters.cpp47
-rw-r--r--include/camera/CameraParameters.h42
-rw-r--r--services/camera/libcameraservice/Android.mk8
-rw-r--r--services/camera/libcameraservice/CameraClient.cpp7
-rw-r--r--services/camera/libcameraservice/CameraService.cpp24
6 files changed, 131 insertions, 0 deletions
diff --git a/camera/Android.mk b/camera/Android.mk
index 9f60da2..3b52b4a 100644
--- a/camera/Android.mk
+++ b/camera/Android.mk
@@ -25,6 +25,9 @@ endif
ifeq ($(BOARD_USES_QCOM_HARDWARE),true)
LOCAL_CFLAGS += -DQCOM_HARDWARE
endif
+ifeq ($(BOARD_USES_QCOM_LEGACY_CAM_PARAMS),true)
+ LOCAL_CFLAGS += -DQCOM_LEGACY_CAM_PARAMS
+endif
LOCAL_MODULE:= libcamera_client
diff --git a/camera/CameraParameters.cpp b/camera/CameraParameters.cpp
index f41be22..eedf8f4 100644
--- a/camera/CameraParameters.cpp
+++ b/camera/CameraParameters.cpp
@@ -40,6 +40,28 @@ const char CameraParameters::KEY_PREVIEW_FRAME_RATE_MODE[] = "preview-frame-rate
const char CameraParameters::KEY_SUPPORTED_PREVIEW_FRAME_RATE_MODES[] = "preview-frame-rate-modes";
const char CameraParameters::KEY_PREVIEW_FRAME_RATE_AUTO_MODE[] = "frame-rate-auto";
const char CameraParameters::KEY_PREVIEW_FRAME_RATE_FIXED_MODE[] = "frame-rate-fixed";
+#ifdef QCOM_LEGACY_CAM_PARAMS
+//Values for Continuous AF
+const char CameraParameters::CAF_OFF[] = "caf-off";
+const char CameraParameters::CAF_ON[] = "caf-on";
+//Same, for CodeAurora-based blobs
+const char CameraParameters::CAPTURE_MODE_NORMAL[] = "normal";
+const char CameraParameters::CAPTURE_MODE_BURST[] = "burst";
+const char CameraParameters::CAPTURE_MODE_CONTI_BURST[] = "contiburst";
+const char CameraParameters::CAPTURE_MODE_HDR[] = "hdr";
+const char CameraParameters::CAPTURE_MODE_HJR[] = "hjr";
+const char CameraParameters::CAPTURE_MODE_PANORAMA[] = "panorama";
+const char CameraParameters::CONTINUOUS_AF_OFF[] = "caf-off";
+const char CameraParameters::CONTINUOUS_AF_ON[] = "caf-on";
+const char CameraParameters::KEY_CONTINUOUS_AF[] = "continuous-af";
+const char CameraParameters::KEY_CAF[] = "continuous-af";
+const char CameraParameters::KEY_CAPTURE_MODE[] = "capture-mode";
+const char CameraParameters::KEY_PICTURE_COUNT[] = "picture-count";
+const char CameraParameters::KEY_MAX_BURST_PICTURE_COUNT[] = "max-burst-picture-count";
+const char CameraParameters::KEY_SUPPORTED_CONTINUOUS_AF[] = "continuous-af-mode";
+const char CameraParameters::KEY_SUPPORTED_CAF[] = "continuous-af-values";
+const char CameraParameters::KEY_SUPPORTED_CAPTURE_MODES[] = "capture-mode-values";
+#endif
#endif
const char CameraParameters::KEY_PICTURE_SIZE[] = "picture-size";
const char CameraParameters::KEY_SUPPORTED_PICTURE_SIZES[] = "picture-size-values";
@@ -266,6 +288,9 @@ const char CameraParameters::FOCUS_MODE_EDOF[] = "edof";
const char CameraParameters::FOCUS_MODE_CONTINUOUS_VIDEO[] = "continuous-video";
const char CameraParameters::FOCUS_MODE_CONTINUOUS_PICTURE[] = "continuous-picture";
#if defined(QCOM_HARDWARE)
+#ifdef QCOM_LEGACY_CAM_PARAMS
+const char CameraParameters::FOCUS_MODE_CONTINUOUS_CAMERA[] = "continuous-camera";
+#endif
const char CameraParameters::FOCUS_MODE_NORMAL[] = "normal";
@@ -309,11 +334,26 @@ const char CameraParameters::SKIN_TONE_ENHANCEMENT_ENABLE[] = "enable";
const char CameraParameters::SKIN_TONE_ENHANCEMENT_DISABLE[] = "disable";
const char CameraParameters::KEY_SHARPNESS[] = "sharpness";
+#ifdef QCOM_LEGACY_CAM_PARAMS
+const char CameraParameters::KEY_MAX_SHARPNESS[] = "sharpness-max";
+const char CameraParameters::KEY_MIN_SHARPNESS[] = "sharpness-min";
+#else
const char CameraParameters::KEY_MAX_SHARPNESS[] = "max-sharpness";
+#endif
const char CameraParameters::KEY_CONTRAST[] = "contrast";
+#ifdef QCOM_LEGACY_CAM_PARAMS
+const char CameraParameters::KEY_MAX_CONTRAST[] = "contrast-max";
+const char CameraParameters::KEY_MIN_CONTRAST[] = "contrast-min";
+#else
const char CameraParameters::KEY_MAX_CONTRAST[] = "max-contrast";
+#endif
const char CameraParameters::KEY_SATURATION[] = "saturation";
+#ifdef QCOM_LEGACY_CAM_PARAMS
+const char CameraParameters::KEY_MAX_SATURATION[] = "saturation-max";
+const char CameraParameters::KEY_MIN_SATURATION[] = "saturation-min";
+#else
const char CameraParameters::KEY_MAX_SATURATION[] = "max-saturation";
+#endif
//Values for DENOISE
const char CameraParameters::DENOISE_OFF[] = "denoise-off";
@@ -613,6 +653,13 @@ void CameraParameters::getSupportedPreviewSizes(Vector<Size> &sizes) const
}
#ifdef QCOM_HARDWARE
+#ifdef QCOM_LEGACY_CAM_PARAMS
+void CameraParameters::setPostviewSize(int width, int height)
+{
+ // dummy
+}
+#endif
+
void CameraParameters::getSupportedHfrSizes(Vector<Size> &sizes) const
{
const char *hfrSizesStr = get(KEY_SUPPORTED_HFR_SIZES);
diff --git a/include/camera/CameraParameters.h b/include/camera/CameraParameters.h
index 21e907e..eb74d09 100644
--- a/include/camera/CameraParameters.h
+++ b/include/camera/CameraParameters.h
@@ -182,6 +182,20 @@ public:
static const char KEY_SUPPORTED_PREVIEW_FRAME_RATE_MODES[];
static const char KEY_PREVIEW_FRAME_RATE_AUTO_MODE[];
static const char KEY_PREVIEW_FRAME_RATE_FIXED_MODE[];
+#ifdef QCOM_LEGACY_CAM_PARAMS
+ static const char KEY_CAPTURE_MODE[];
+ static const char KEY_SUPPORTED_CAPTURE_MODES[];
+ static const char KEY_PICTURE_COUNT[];
+ static const char KEY_MAX_BURST_PICTURE_COUNT[];
+ static const char KEY_SUPPORTED_CONTINUOUS_AF[];
+ static const char KEY_SUPPORTED_CAF[];
+ static const char CAPTURE_MODE_NORMAL[];
+ static const char CAPTURE_MODE_BURST[];
+ static const char CAPTURE_MODE_CONTI_BURST[];
+ static const char CAPTURE_MODE_HDR[];
+ static const char CAPTURE_MODE_HJR[];
+ static const char CAPTURE_MODE_PANORAMA[];
+#endif
#endif
// The dimensions for captured pictures in pixels (width x height).
// Example value: "1024x768". Read/write.
@@ -825,6 +839,22 @@ public:
static const char FOCUS_MODE_CONTINUOUS_PICTURE[];
#ifdef QCOM_HARDWARE
+#ifdef QCOM_LEGACY_CAM_PARAMS
+ static const char FOCUS_MODE_CONTINUOUS_CAMERA[];
+
+ // Values for Continuous AF
+ static const char CAF_OFF[] ;
+ static const char CAF_ON[] ;
+ // Proprietaries from CodeAurora use these...
+ static const char CONTINUOUS_AF_OFF[] ;
+ static const char CONTINUOUS_AF_ON[] ;
+ static const char KEY_CONTINUOUS_AF[] ;
+ static const char KEY_CAF[] ;
+ static const char KEY_TAKING_PICTURE_ZOOM[];
+ static const char KEY_PANORAMA_MODE[];
+ static const char PANORAMA_MODE_NOT_INPROGRESS[];
+ static const char PANORAMA_MODE_INPROGRESS[];
+#endif
// Normal focus mode. Applications should call
// CameraHardwareInterface.autoFocus to start the focus in this mode.
static const char FOCUS_MODE_NORMAL[];
@@ -848,10 +878,19 @@ public:
static const char KEY_SHARPNESS[];
static const char KEY_MAX_SHARPNESS[];
+#ifdef QCOM_LEGACY_CAM_PARAMS
+ static const char KEY_MIN_SHARPNESS[];
+#endif
static const char KEY_CONTRAST[];
static const char KEY_MAX_CONTRAST[];
+#ifdef QCOM_LEGACY_CAM_PARAMS
+ static const char KEY_MIN_CONTRAST[];
+#endif
static const char KEY_SATURATION[];
static const char KEY_MAX_SATURATION[];
+#ifdef QCOM_LEGACY_CAM_PARAMS
+ static const char KEY_MIN_SATURATION[];
+#endif
static const char KEY_HISTOGRAM[] ;
static const char KEY_SUPPORTED_HISTOGRAM_MODES[] ;
@@ -922,6 +961,9 @@ public:
int getOrientation() const;
void setOrientation(int orientation);
void setPreviewFpsRange(int minFPS,int maxFPS);
+#ifdef QCOM_LEGACY_CAM_PARAMS
+ void setPostviewSize(int x, int y);
+#endif
void getSupportedHfrSizes(Vector<Size> &sizes) const;
#endif
diff --git a/services/camera/libcameraservice/Android.mk b/services/camera/libcameraservice/Android.mk
index eff47c8..3e2ac14 100644
--- a/services/camera/libcameraservice/Android.mk
+++ b/services/camera/libcameraservice/Android.mk
@@ -40,6 +40,14 @@ LOCAL_C_INCLUDES += \
system/media/camera/include \
external/jpeg
+ifeq ($(BOARD_USES_QCOM_LEGACY_CAM_PARAMS),true)
+ LOCAL_CFLAGS += -DQCOM_LEGACY_CAM_PARAMS
+endif
+
+ifeq ($(BOARD_HAVE_HTC_FFC), true)
+LOCAL_CFLAGS += -DBOARD_HAVE_HTC_FFC
+endif
+
LOCAL_MODULE:= libcameraservice
include $(BUILD_SHARED_LIBRARY)
diff --git a/services/camera/libcameraservice/CameraClient.cpp b/services/camera/libcameraservice/CameraClient.cpp
index 1cdb938..967562d 100644
--- a/services/camera/libcameraservice/CameraClient.cpp
+++ b/services/camera/libcameraservice/CameraClient.cpp
@@ -251,8 +251,10 @@ void CameraClient::disconnect() {
// Release the held ANativeWindow resources.
if (mPreviewWindow != 0) {
#ifdef QCOM_HARDWARE
+#ifndef NO_UPDATE_PREVIEW
mHardware->setPreviewWindow(0);
#endif
+#endif
disconnectWindow(mPreviewWindow);
mPreviewWindow = 0;
#ifndef QCOM_HARDWARE
@@ -297,9 +299,14 @@ status_t CameraClient::setPreviewWindow(const sp<IBinder>& binder,
result = mHardware->setPreviewWindow(window);
}
#ifdef QCOM_HARDWARE
+#ifndef NO_UPDATE_PREVIEW
} else {
+ if (window != 0) {
+ native_window_set_buffers_transform(window.get(), mOrientation);
+ }
result = mHardware->setPreviewWindow(window);
#endif
+#endif
}
if (result == NO_ERROR) {
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp
index d8365eb..387a784 100644
--- a/services/camera/libcameraservice/CameraService.cpp
+++ b/services/camera/libcameraservice/CameraService.cpp
@@ -21,6 +21,8 @@
#include <stdio.h>
#include <sys/types.h>
#include <pthread.h>
+#include <unistd.h>
+#include <fcntl.h>
#include <binder/IPCThreadState.h>
#include <binder/IServiceManager.h>
@@ -68,6 +70,24 @@ static int getCallingUid() {
// ----------------------------------------------------------------------------
+#if defined(BOARD_HAVE_HTC_FFC)
+#define HTC_SWITCH_CAMERA_FILE_PATH "/sys/android_camera2/htcwc"
+static void htcCameraSwitch(int cameraId)
+{
+ char buffer[16];
+ int fd;
+
+ if (access(HTC_SWITCH_CAMERA_FILE_PATH, W_OK) == 0) {
+ snprintf(buffer, sizeof(buffer), "%d", cameraId);
+
+ fd = open(HTC_SWITCH_CAMERA_FILE_PATH, O_WRONLY);
+ write(fd, buffer, strlen(buffer));
+ close(fd);
+ }
+}
+#endif
+
+
// This is ugly and only safe if we never re-create the CameraService, but
// should be ok for now.
static CameraService *gCameraService;
@@ -158,6 +178,10 @@ sp<ICamera> CameraService::connect(
return NULL;
}
+#if defined(BOARD_HAVE_HTC_FFC)
+ htcCameraSwitch(cameraId);
+#endif
+
Mutex::Autolock lock(mServiceLock);
if (mClient[cameraId] != 0) {
client = mClient[cameraId].promote();