13cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian/* 23cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian * Copyright (C) 2008 The Android Open Source Project 33cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian * 43cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 53cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian * you may not use this file except in compliance with the License. 63cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian * You may obtain a copy of the License at 73cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian * 83cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 93cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian * 103cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian * Unless required by applicable law or agreed to in writing, software 113cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 123cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian * See the License for the specific language governing permissions and 143cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian * limitations under the License. 153cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian */ 163cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 173cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#ifndef ANDROID_HARDWARE_ICAMERASERVICE_H 183cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#define ANDROID_HARDWARE_ICAMERASERVICE_H 193cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 203cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#include <utils/RefBase.h> 213cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#include <binder/IInterface.h> 223cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#include <binder/Parcel.h> 233cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 243cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopiannamespace android { 253cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 26c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkinclass ICamera; 27c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkinclass ICameraClient; 28c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkinclass IProCameraUser; 29c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkinclass IProCameraCallbacks; 30bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkinclass ICameraServiceListener; 31e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkinclass ICameraDeviceUser; 32e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkinclass ICameraDeviceCallbacks; 332b59be89dc245b6e2475d9e8b0c5f2392370e71eZhijun Heclass CameraMetadata; 34d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunkclass VendorTagDescriptor; 3565d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkinclass String16; 36c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin 373cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianclass ICameraService : public IInterface 383cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{ 393cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianpublic: 40bef3f23f16f2fc575b3f425febcfcc436a7db70fIgor Murashkin /** 41bef3f23f16f2fc575b3f425febcfcc436a7db70fIgor Murashkin * Keep up-to-date with ICameraService.aidl in frameworks/base 42bef3f23f16f2fc575b3f425febcfcc436a7db70fIgor Murashkin */ 433cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian enum { 4435a055b8bfc6f3cbea409b2897caf936654519cbChih-Chung Chang GET_NUMBER_OF_CAMERAS = IBinder::FIRST_CALL_TRANSACTION, 45ddbdb35d176266b5ab64c30178f5cb76c5b1b4b4Chih-Chung Chang GET_CAMERA_INFO, 46634a51509ee50475f3e9f8ccf897e90fc72ded31Igor Murashkin CONNECT, 47bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin CONNECT_PRO, 48e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin CONNECT_DEVICE, 49bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin ADD_LISTENER, 50bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin REMOVE_LISTENER, 512b59be89dc245b6e2475d9e8b0c5f2392370e71eZhijun He GET_CAMERA_CHARACTERISTICS, 52d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk GET_CAMERA_VENDOR_TAG_DESCRIPTOR, 5365d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin GET_LEGACY_PARAMETERS, 5465d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin SUPPORTS_CAMERA_API, 55b10cdadf0fb945e23ca77008d4af76584bd0e39aZhijun He CONNECT_LEGACY, 563cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian }; 573cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 58ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala enum { 59ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala USE_CALLING_UID = -1 60ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala }; 61ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala 6265d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin enum { 6365d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin API_VERSION_1 = 1, 6465d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin API_VERSION_2 = 2, 6565d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin }; 6665d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin 67b10cdadf0fb945e23ca77008d4af76584bd0e39aZhijun He enum { 68b10cdadf0fb945e23ca77008d4af76584bd0e39aZhijun He CAMERA_HAL_API_VERSION_UNSPECIFIED = -1 69b10cdadf0fb945e23ca77008d4af76584bd0e39aZhijun He }; 70b10cdadf0fb945e23ca77008d4af76584bd0e39aZhijun He 713cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianpublic: 723cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian DECLARE_META_INTERFACE(CameraService); 733cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 74bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin virtual int32_t getNumberOfCameras() = 0; 75bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin virtual status_t getCameraInfo(int cameraId, 76e1445da74730473a66a3ae8414e940aebfe6585dIgor Murashkin /*out*/ 77e1445da74730473a66a3ae8414e940aebfe6585dIgor Murashkin struct CameraInfo* cameraInfo) = 0; 78bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 792b59be89dc245b6e2475d9e8b0c5f2392370e71eZhijun He virtual status_t getCameraCharacteristics(int cameraId, 80e1445da74730473a66a3ae8414e940aebfe6585dIgor Murashkin /*out*/ 81e1445da74730473a66a3ae8414e940aebfe6585dIgor Murashkin CameraMetadata* cameraInfo) = 0; 822b59be89dc245b6e2475d9e8b0c5f2392370e71eZhijun He 83e1445da74730473a66a3ae8414e940aebfe6585dIgor Murashkin virtual status_t getCameraVendorTagDescriptor( 84e1445da74730473a66a3ae8414e940aebfe6585dIgor Murashkin /*out*/ 85e1445da74730473a66a3ae8414e940aebfe6585dIgor Murashkin sp<VendorTagDescriptor>& desc) = 0; 86d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk 87bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin // Returns 'OK' if operation succeeded 88bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin // - Errors: ALREADY_EXISTS if the listener was already added 89bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin virtual status_t addListener(const sp<ICameraServiceListener>& listener) 90bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin = 0; 91bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin // Returns 'OK' if operation succeeded 92bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin // - Errors: BAD_VALUE if specified listener was not in the listener list 93bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin virtual status_t removeListener(const sp<ICameraServiceListener>& listener) 94bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin = 0; 95ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala /** 96ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala * clientPackageName and clientUid are used for permissions checking. if 97ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala * clientUid == USE_CALLING_UID, then the calling UID is used instead. Only 98ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala * trusted callers can set a clientUid other than USE_CALLING_UID. 99ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala */ 1000f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk virtual status_t connect(const sp<ICameraClient>& cameraClient, 101ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala int cameraId, 102ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala const String16& clientPackageName, 1030f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk int clientUid, 1040f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk /*out*/ 1050f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk sp<ICamera>& device) = 0; 106634a51509ee50475f3e9f8ccf897e90fc72ded31Igor Murashkin 1070f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk virtual status_t connectPro(const sp<IProCameraCallbacks>& cameraCb, 108c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin int cameraId, 109c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin const String16& clientPackageName, 1100f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk int clientUid, 1110f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk /*out*/ 1120f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk sp<IProCameraUser>& device) = 0; 113e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 1140f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk virtual status_t connectDevice( 115e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin const sp<ICameraDeviceCallbacks>& cameraCb, 116e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin int cameraId, 117e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin const String16& clientPackageName, 1180f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk int clientUid, 1190f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk /*out*/ 1200f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk sp<ICameraDeviceUser>& device) = 0; 12165d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin 12265d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin virtual status_t getLegacyParameters( 12365d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin int cameraId, 12465d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin /*out*/ 12565d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin String16* parameters) = 0; 12665d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin 12765d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin /** 12865d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin * Returns OK if device supports camera2 api, 12965d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin * returns -EOPNOTSUPP if it doesn't. 13065d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin */ 13165d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin virtual status_t supportsCameraApi( 13265d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin int cameraId, int apiVersion) = 0; 133b10cdadf0fb945e23ca77008d4af76584bd0e39aZhijun He 134b10cdadf0fb945e23ca77008d4af76584bd0e39aZhijun He /** 135b10cdadf0fb945e23ca77008d4af76584bd0e39aZhijun He * Connect the device as a legacy device for a given HAL version. 136b10cdadf0fb945e23ca77008d4af76584bd0e39aZhijun He * For halVersion, use CAMERA_API_DEVICE_VERSION_* for a particular 137b10cdadf0fb945e23ca77008d4af76584bd0e39aZhijun He * version, or CAMERA_HAL_API_VERSION_UNSPECIFIED for a service-selected version. 138b10cdadf0fb945e23ca77008d4af76584bd0e39aZhijun He */ 139b10cdadf0fb945e23ca77008d4af76584bd0e39aZhijun He virtual status_t connectLegacy(const sp<ICameraClient>& cameraClient, 140b10cdadf0fb945e23ca77008d4af76584bd0e39aZhijun He int cameraId, int halVersion, 141b10cdadf0fb945e23ca77008d4af76584bd0e39aZhijun He const String16& clientPackageName, 142b10cdadf0fb945e23ca77008d4af76584bd0e39aZhijun He int clientUid, 143b10cdadf0fb945e23ca77008d4af76584bd0e39aZhijun He /*out*/ 144b10cdadf0fb945e23ca77008d4af76584bd0e39aZhijun He sp<ICamera>& device) = 0; 1453cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}; 1463cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 1473cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian// ---------------------------------------------------------------------------- 1483cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 1493cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianclass BnCameraService: public BnInterface<ICameraService> 1503cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{ 1513cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianpublic: 1523cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual status_t onTransact( uint32_t code, 1533cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian const Parcel& data, 1543cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian Parcel* reply, 1553cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian uint32_t flags = 0); 1563cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}; 1573cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 1583cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}; // namespace android 1593cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 1603cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#endif 161