diff options
author | Ruben Brunk <rubenbrunk@google.com> | 2014-05-09 19:57:56 -0700 |
---|---|---|
committer | Ruben Brunk <rubenbrunk@google.com> | 2014-05-21 18:14:41 -0700 |
commit | b2119af7f4ced0ecfefd4c7388f86b4e3a3ea7d8 (patch) | |
tree | a97770362fc690d625a0383597cb057d48737876 /camera | |
parent | 7ac0039611ea7ea18f9545f96a8f5cb31dcdebe5 (diff) | |
download | frameworks_av-b2119af7f4ced0ecfefd4c7388f86b4e3a3ea7d8.zip frameworks_av-b2119af7f4ced0ecfefd4c7388f86b4e3a3ea7d8.tar.gz frameworks_av-b2119af7f4ced0ecfefd4c7388f86b4e3a3ea7d8.tar.bz2 |
camera2: Update CameraService for HAL1 shim.
Updates the camera service to handle shim connections.
Changes include:
- Adds begin/end configure binder calls.
- Adds cache for shim client static camera metadata.
- Implements basic getCameraCharacteristic functionality for shim clients.
Bug: 15116722
Bug: 15117269
Change-Id: I510c5888ca15f8e7d3b8ed1680ff1c7f8f514744
Diffstat (limited to 'camera')
-rw-r--r-- | camera/Android.mk | 2 | ||||
-rw-r--r-- | camera/CameraParameters.cpp | 42 | ||||
-rw-r--r-- | camera/camera2/ICameraDeviceUser.cpp | 36 |
3 files changed, 78 insertions, 2 deletions
diff --git a/camera/Android.mk b/camera/Android.mk index 5774b6f..c10e38a 100644 --- a/camera/Android.mk +++ b/camera/Android.mk @@ -50,7 +50,7 @@ LOCAL_SHARED_LIBRARIES := \ LOCAL_C_INCLUDES += \ system/media/camera/include \ - system/media/private/camera/include + system/media/private/camera/include \ LOCAL_MODULE:= libcamera_client diff --git a/camera/CameraParameters.cpp b/camera/CameraParameters.cpp index af091f4..161f842 100644 --- a/camera/CameraParameters.cpp +++ b/camera/CameraParameters.cpp @@ -21,6 +21,7 @@ #include <string.h> #include <stdlib.h> #include <camera/CameraParameters.h> +#include <system/graphics.h> namespace android { // Parameter keys to communicate between camera application and driver. @@ -483,4 +484,45 @@ status_t CameraParameters::dump(int fd, const Vector<String16>& args) const return NO_ERROR; } +void CameraParameters::getSupportedPreviewFormats(Vector<int>& formats) const { + const char* supportedPreviewFormats = + get(CameraParameters::KEY_SUPPORTED_PREVIEW_FORMATS); + + String8 fmtStr(supportedPreviewFormats); + char* prevFmts = fmtStr.lockBuffer(fmtStr.size()); + + char* savePtr; + char* fmt = strtok_r(prevFmts, ",", &savePtr); + while (fmt) { + int actual = previewFormatToEnum(fmt); + if (actual != -1) { + formats.add(actual); + } + fmt = strtok_r(NULL, ",", &savePtr); + } + fmtStr.unlockBuffer(fmtStr.size()); +} + + +int CameraParameters::previewFormatToEnum(const char* format) { + return + !format ? + HAL_PIXEL_FORMAT_YCrCb_420_SP : + !strcmp(format, PIXEL_FORMAT_YUV422SP) ? + HAL_PIXEL_FORMAT_YCbCr_422_SP : // NV16 + !strcmp(format, PIXEL_FORMAT_YUV420SP) ? + HAL_PIXEL_FORMAT_YCrCb_420_SP : // NV21 + !strcmp(format, PIXEL_FORMAT_YUV422I) ? + HAL_PIXEL_FORMAT_YCbCr_422_I : // YUY2 + !strcmp(format, PIXEL_FORMAT_YUV420P) ? + HAL_PIXEL_FORMAT_YV12 : // YV12 + !strcmp(format, PIXEL_FORMAT_RGB565) ? + HAL_PIXEL_FORMAT_RGB_565 : // RGB565 + !strcmp(format, PIXEL_FORMAT_RGBA8888) ? + HAL_PIXEL_FORMAT_RGBA_8888 : // RGB8888 + !strcmp(format, PIXEL_FORMAT_BAYER_RGGB) ? + HAL_PIXEL_FORMAT_RAW_SENSOR : // Raw sensor data + -1; +} + }; // namespace android diff --git a/camera/camera2/ICameraDeviceUser.cpp b/camera/camera2/ICameraDeviceUser.cpp index ad65955..89ea46d 100644 --- a/camera/camera2/ICameraDeviceUser.cpp +++ b/camera/camera2/ICameraDeviceUser.cpp @@ -42,7 +42,9 @@ enum { CREATE_DEFAULT_REQUEST, GET_CAMERA_INFO, WAIT_UNTIL_IDLE, - FLUSH + FLUSH, + BEGIN_CONFIGURE, + END_CONFIGURE }; namespace { @@ -283,6 +285,26 @@ public: return res; } + virtual status_t beginConfigure() + { + ALOGV("beginConfigure"); + Parcel data, reply; + data.writeInterfaceToken(ICameraDeviceUser::getInterfaceDescriptor()); + remote()->transact(BEGIN_CONFIGURE, data, &reply); + reply.readExceptionCode(); + return reply.readInt32(); + } + + virtual status_t endConfigure() + { + ALOGV("endConfigure"); + Parcel data, reply; + data.writeInterfaceToken(ICameraDeviceUser::getInterfaceDescriptor()); + remote()->transact(END_CONFIGURE, data, &reply); + reply.readExceptionCode(); + return reply.readInt32(); + } + private: @@ -456,6 +478,18 @@ status_t BnCameraDeviceUser::onTransact( reply->writeInt64(lastFrameNumber); return NO_ERROR; } + case BEGIN_CONFIGURE: { + CHECK_INTERFACE(ICameraDeviceUser, data, reply); + reply->writeNoException(); + reply->writeInt32(beginConfigure()); + return NO_ERROR; + } break; + case END_CONFIGURE: { + CHECK_INTERFACE(ICameraDeviceUser, data, reply); + reply->writeNoException(); + reply->writeInt32(endConfigure()); + return NO_ERROR; + } break; default: return BBinder::onTransact(code, data, reply, flags); } |