1c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin/* 2c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * Copyright (C) 2013 The Android Open Source Project 3c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * 4c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * Licensed under the Apache License, Version 2.0 (the "License"); 5c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * you may not use this file except in compliance with the License. 6c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * You may obtain a copy of the License at 7c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * 8c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * http://www.apache.org/licenses/LICENSE-2.0 9c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * 10c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * Unless required by applicable law or agreed to in writing, software 11c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * distributed under the License is distributed on an "AS IS" BASIS, 12c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * See the License for the specific language governing permissions and 14c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * limitations under the License. 15c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin */ 16c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 17c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin#ifndef ANDROID_HARDWARE_CAMERA_BASE_H 18c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin#define ANDROID_HARDWARE_CAMERA_BASE_H 19c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 20f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala#include <android/hardware/ICameraServiceListener.h> 21f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala 22c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin#include <utils/Mutex.h> 23f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala#include <binder/BinderService.h> 24c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 25c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkinstruct camera_frame_metadata; 26c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 27c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkinnamespace android { 28c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 29d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalanamespace hardware { 30d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 31d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 32d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalaclass ICameraService; 33d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalaclass ICameraServiceListener; 34d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 35f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvalaenum { 36f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala /** The facing of the camera is opposite to that of the screen. */ 37f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala CAMERA_FACING_BACK = 0, 38f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala /** The facing of the camera is the same as that of the screen. */ 39f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala CAMERA_FACING_FRONT = 1, 40f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala}; 41f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala 42d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalastruct CameraInfo : public android::Parcelable { 43c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin /** 44c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * The direction that the camera faces to. It should be CAMERA_FACING_BACK 45c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * or CAMERA_FACING_FRONT. 46c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin */ 47c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin int facing; 48c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 49c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin /** 50c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * The orientation of the camera image. The value is the angle that the 51c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * camera image needs to be rotated clockwise so it shows correctly on the 52c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * display in its natural orientation. It should be 0, 90, 180, or 270. 53c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * 54c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * For example, suppose a device has a naturally tall screen. The 55c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * back-facing camera sensor is mounted in landscape. You are looking at 56c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * the screen. If the top side of the camera sensor is aligned with the 57c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * right edge of the screen in natural orientation, the value should be 58c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * 90. If the top side of a front-facing camera sensor is aligned with the 59c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * right of the screen, the value should be 270. 60c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin */ 61c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin int orientation; 62d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 63f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala virtual status_t writeToParcel(android::Parcel* parcel) const; 64f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala virtual status_t readFromParcel(const android::Parcel* parcel); 65d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 66c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin}; 67c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 68f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala/** 69f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala * Basic status information about a camera device - its name and its current 70f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala * state. 71f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala */ 72f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvalastruct CameraStatus : public android::Parcelable { 73f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala /** 74f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala * The name of the camera device 75f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala */ 76f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala String8 cameraId; 77f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala 78f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala /** 79f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala * Its current status, one of the ICameraService::STATUS_* fields 80f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala */ 81f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala int32_t status; 82f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala 83f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala virtual status_t writeToParcel(android::Parcel* parcel) const; 84f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala virtual status_t readFromParcel(const android::Parcel* parcel); 85f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala 86f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala CameraStatus(String8 id, int32_t s) : cameraId(id), status(s) {} 87f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala CameraStatus() : status(ICameraServiceListener::STATUS_PRESENT) {} 88f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala}; 89f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvala 90d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala} // namespace hardware 91d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 92d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalausing hardware::CameraInfo; 93d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 94d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 95c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkintemplate <typename TCam> 96c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkinstruct CameraTraits { 97c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin}; 98c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 99c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkintemplate <typename TCam, typename TCamTraits = CameraTraits<TCam> > 100c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkinclass CameraBase : public IBinder::DeathRecipient 101c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin{ 102c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkinpublic: 1030f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk typedef typename TCamTraits::TCamListener TCamListener; 1040f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk typedef typename TCamTraits::TCamUser TCamUser; 1050f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk typedef typename TCamTraits::TCamCallbacks TCamCallbacks; 1060f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk typedef typename TCamTraits::TCamConnectService TCamConnectService; 107c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 108c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin static sp<TCam> connect(int cameraId, 109c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin const String16& clientPackageName, 11098a668f6ea51e4d894d2ebb61a0e18287fb14008Chien-Yu Chen int clientUid, int clientPid); 111c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin virtual void disconnect(); 112c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 113c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin void setListener(const sp<TCamListener>& listener); 114c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 115c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin static int getNumberOfCameras(); 116c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 117c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin static status_t getCameraInfo(int cameraId, 118c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin /*out*/ 119d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala struct hardware::CameraInfo* cameraInfo); 120c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 121c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin sp<TCamUser> remote(); 122c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 123c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin // Status is set to 'UNKNOWN_ERROR' after successful (re)connection 124c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin status_t getStatus(); 125c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 126c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkinprotected: 127c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin CameraBase(int cameraId); 128c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin virtual ~CameraBase(); 129c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 130c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin //////////////////////////////////////////////////////// 131c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin // TCamCallbacks implementation 132c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin //////////////////////////////////////////////////////// 133c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin virtual void notifyCallback(int32_t msgType, int32_t ext, 134c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin int32_t ext2); 135c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 136c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin //////////////////////////////////////////////////////// 137c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin // Common instance variables 138c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin //////////////////////////////////////////////////////// 139c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin Mutex mLock; 140c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 141c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin virtual void binderDied(const wp<IBinder>& who); 142c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 143c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin // helper function to obtain camera service handle 144f86177dd930680bf939ef33b9977db27628d7affEino-Ville Talvala static const sp<::android::hardware::ICameraService> getCameraService(); 145c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 146c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin sp<TCamUser> mCamera; 147c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin status_t mStatus; 148c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 149c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin sp<TCamListener> mListener; 150c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 151c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin const int mCameraId; 152c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 153fa4cf9d310685b4c25877cba772ff7da84caf517Igor Murashkin typedef CameraBase<TCam> CameraBaseT; 154c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin}; 155c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 156c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin}; // namespace android 157c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 158c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin#endif 159