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