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