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 20c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin#include <utils/Mutex.h> 21c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin#include <camera/ICameraService.h> 22c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 23c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkinstruct camera_frame_metadata; 24c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 25c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkinnamespace android { 26c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 27c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkinstruct CameraInfo { 28c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin /** 29c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * The direction that the camera faces to. It should be CAMERA_FACING_BACK 30c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * or CAMERA_FACING_FRONT. 31c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin */ 32c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin int facing; 33c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 34c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin /** 35c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * The orientation of the camera image. The value is the angle that the 36c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * camera image needs to be rotated clockwise so it shows correctly on the 37c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * display in its natural orientation. It should be 0, 90, 180, or 270. 38c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * 39c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * For example, suppose a device has a naturally tall screen. The 40c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * back-facing camera sensor is mounted in landscape. You are looking at 41c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * the screen. If the top side of the camera sensor is aligned with the 42c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * right edge of the screen in natural orientation, the value should be 43c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * 90. If the top side of a front-facing camera sensor is aligned with the 44c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin * right of the screen, the value should be 270. 45c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin */ 46c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin int orientation; 47c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin}; 48c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 49c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkintemplate <typename TCam> 50c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkinstruct CameraTraits { 51c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin}; 52c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 53c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkintemplate <typename TCam, typename TCamTraits = CameraTraits<TCam> > 54c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkinclass CameraBase : public IBinder::DeathRecipient 55c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin{ 56c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkinpublic: 570f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk typedef typename TCamTraits::TCamListener TCamListener; 580f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk typedef typename TCamTraits::TCamUser TCamUser; 590f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk typedef typename TCamTraits::TCamCallbacks TCamCallbacks; 600f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk typedef typename TCamTraits::TCamConnectService TCamConnectService; 61c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 62c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin static sp<TCam> connect(int cameraId, 63c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin const String16& clientPackageName, 64c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin int clientUid); 65c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin virtual void disconnect(); 66c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 67c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin void setListener(const sp<TCamListener>& listener); 68c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 69c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin static int getNumberOfCameras(); 70c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 71c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin static status_t getCameraInfo(int cameraId, 72c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin /*out*/ 73c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin struct CameraInfo* cameraInfo); 74c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 75bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin static status_t addServiceListener( 76bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin const sp<ICameraServiceListener>& listener); 77bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 78bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin static status_t removeServiceListener( 79bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin const sp<ICameraServiceListener>& listener); 80bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 81c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin sp<TCamUser> remote(); 82c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 83c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin // Status is set to 'UNKNOWN_ERROR' after successful (re)connection 84c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin status_t getStatus(); 85c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 86c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkinprotected: 87c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin CameraBase(int cameraId); 88c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin virtual ~CameraBase(); 89c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 90c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin //////////////////////////////////////////////////////// 91c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin // TCamCallbacks implementation 92c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin //////////////////////////////////////////////////////// 93c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin virtual void notifyCallback(int32_t msgType, int32_t ext, 94c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin int32_t ext2); 95c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 96c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin //////////////////////////////////////////////////////// 97c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin // Common instance variables 98c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin //////////////////////////////////////////////////////// 99c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin Mutex mLock; 100c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 101c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin virtual void binderDied(const wp<IBinder>& who); 102c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 103c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin // helper function to obtain camera service handle 104c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin static const sp<ICameraService>& getCameraService(); 105c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 106c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin sp<TCamUser> mCamera; 107c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin status_t mStatus; 108c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 109c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin sp<TCamListener> mListener; 110c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 111c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin const int mCameraId; 112c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 113fa4cf9d310685b4c25877cba772ff7da84caf517Igor Murashkin typedef CameraBase<TCam> CameraBaseT; 114c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin}; 115c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 116c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin}; // namespace android 117c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 118c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin#endif 119