ICameraService.h revision 65d14b9825311f9d1847cf282bd0419e71bac666
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,
553cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    };
563cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
57ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala    enum {
58ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala        USE_CALLING_UID = -1
59ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala    };
60ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala
6165d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin    enum {
6265d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin        API_VERSION_1 = 1,
6365d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin        API_VERSION_2 = 2,
6465d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin    };
6565d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin
663cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianpublic:
673cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    DECLARE_META_INTERFACE(CameraService);
683cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
69bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin    virtual int32_t  getNumberOfCameras() = 0;
70bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin    virtual status_t getCameraInfo(int cameraId,
71e1445da74730473a66a3ae8414e940aebfe6585dIgor Murashkin            /*out*/
72e1445da74730473a66a3ae8414e940aebfe6585dIgor Murashkin            struct CameraInfo* cameraInfo) = 0;
73bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin
742b59be89dc245b6e2475d9e8b0c5f2392370e71eZhijun He    virtual status_t getCameraCharacteristics(int cameraId,
75e1445da74730473a66a3ae8414e940aebfe6585dIgor Murashkin            /*out*/
76e1445da74730473a66a3ae8414e940aebfe6585dIgor Murashkin            CameraMetadata* cameraInfo) = 0;
772b59be89dc245b6e2475d9e8b0c5f2392370e71eZhijun He
78e1445da74730473a66a3ae8414e940aebfe6585dIgor Murashkin    virtual status_t getCameraVendorTagDescriptor(
79e1445da74730473a66a3ae8414e940aebfe6585dIgor Murashkin            /*out*/
80e1445da74730473a66a3ae8414e940aebfe6585dIgor Murashkin            sp<VendorTagDescriptor>& desc) = 0;
81d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk
82bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin    // Returns 'OK' if operation succeeded
83bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin    // - Errors: ALREADY_EXISTS if the listener was already added
84bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin    virtual status_t addListener(const sp<ICameraServiceListener>& listener)
85bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin                                                                            = 0;
86bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin    // Returns 'OK' if operation succeeded
87bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin    // - Errors: BAD_VALUE if specified listener was not in the listener list
88bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin    virtual status_t removeListener(const sp<ICameraServiceListener>& listener)
89bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin                                                                            = 0;
90ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala    /**
91ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala     * clientPackageName and clientUid are used for permissions checking.  if
92ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala     * clientUid == USE_CALLING_UID, then the calling UID is used instead. Only
93ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala     * trusted callers can set a clientUid other than USE_CALLING_UID.
94ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala     */
950f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk    virtual status_t connect(const sp<ICameraClient>& cameraClient,
96ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala            int cameraId,
97ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala            const String16& clientPackageName,
980f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk            int clientUid,
990f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk            /*out*/
1000f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk            sp<ICamera>& device) = 0;
101634a51509ee50475f3e9f8ccf897e90fc72ded31Igor Murashkin
1020f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk    virtual status_t connectPro(const sp<IProCameraCallbacks>& cameraCb,
103c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin            int cameraId,
104c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin            const String16& clientPackageName,
1050f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk            int clientUid,
1060f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk            /*out*/
1070f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk            sp<IProCameraUser>& device) = 0;
108e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
1090f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk    virtual status_t connectDevice(
110e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin            const sp<ICameraDeviceCallbacks>& cameraCb,
111e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin            int cameraId,
112e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin            const String16& clientPackageName,
1130f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk            int clientUid,
1140f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk            /*out*/
1150f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk            sp<ICameraDeviceUser>& device) = 0;
11665d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin
11765d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin    virtual status_t getLegacyParameters(
11865d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin            int cameraId,
11965d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin            /*out*/
12065d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin            String16* parameters) = 0;
12165d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin
12265d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin    /**
12365d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin     * Returns OK if device supports camera2 api,
12465d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin     * returns -EOPNOTSUPP if it doesn't.
12565d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin     */
12665d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin    virtual status_t supportsCameraApi(
12765d14b9825311f9d1847cf282bd0419e71bac666Igor Murashkin            int cameraId, int apiVersion) = 0;
1283cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian};
1293cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
1303cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian// ----------------------------------------------------------------------------
1313cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
1323cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianclass BnCameraService: public BnInterface<ICameraService>
1333cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{
1343cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianpublic:
1353cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    virtual status_t    onTransact( uint32_t code,
1363cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian                                    const Parcel& data,
1373cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian                                    Parcel* reply,
1383cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian                                    uint32_t flags = 0);
1393cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian};
1403cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
1413cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}; // namespace android
1423cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
1433cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#endif
144