Camera.h revision e6615671a51c85f409c071f15babb76198f1ce92
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef ANDROID_HARDWARE_CAMERA_H
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define ANDROID_HARDWARE_CAMERA_H
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <utils/Timers.h>
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <camera/ICameraClient.h>
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android {
24b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A set of bit masks for specifying how the received preview frames are
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * handled before the previewCallback() call.
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The least significant 3 bits of an "int" value are used for this purpose:
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ..... 0 0 0
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *       ^ ^ ^
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *       | | |---------> determine whether the callback is enabled or not
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *       | |-----------> determine whether the callback is one-shot or not
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *       |-------------> determine whether the frame is copied out or not
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WARNING:
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When a frame is sent directly without copying, it is the frame receiver's
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * responsiblity to make sure that the frame data won't get corrupted by
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * subsequent preview frames filled by the camera. This flag is recommended
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * only when copying out data brings significant performance price and the
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * handling/processing of the received frame data is always faster than
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the preview frame rate so that data corruption won't occur.
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
45b8d81679553ee33f6ae5281310abf2effca4ffcdDianne Hackborn * For instance,
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1. 0x00 disables the callback. In this case, copy out and one shot bits
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *    are ignored.
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2. 0x01 enables a callback without copying out the received frames. A
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *    typical use case is the Camcorder application to avoid making costly
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *    frame copies.
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3. 0x05 is enabling a callback with frame copied out repeatedly. A typical
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *    use case is the Camera application.
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4. 0x07 is enabling a callback with frame copied out only once. A typical use
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *    case is the Barcode scanner application.
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define FRAME_CALLBACK_FLAG_ENABLE_MASK              0x01
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define FRAME_CALLBACK_FLAG_ONE_SHOT_MASK            0x02
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define FRAME_CALLBACK_FLAG_COPY_OUT_MASK            0x04
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// Typical use cases
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define FRAME_CALLBACK_FLAG_NOOP                     0x00
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define FRAME_CALLBACK_FLAG_CAMCORDER                0x01
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define FRAME_CALLBACK_FLAG_CAMERA                   0x05
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define FRAME_CALLBACK_FLAG_BARCODE_SCANNER          0x07
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6657f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad// msgType in notifyCallback and dataCallback functions
6757f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstadenum {
6857f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    CAMERA_MSG_ERROR            = 0x001,
6957f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    CAMERA_MSG_SHUTTER          = 0x002,
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    CAMERA_MSG_FOCUS            = 0x004,
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    CAMERA_MSG_ZOOM             = 0x008,
7271f2cf116aab893e224056c38ab146bd1538dd3eSteve Block    CAMERA_MSG_PREVIEW_FRAME    = 0x010,
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    CAMERA_MSG_VIDEO_FRAME      = 0x020,
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    CAMERA_MSG_POSTVIEW_FRAME   = 0x040,
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    CAMERA_MSG_RAW_IMAGE        = 0x080,
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    CAMERA_MSG_COMPRESSED_IMAGE = 0x100,
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    CAMERA_MSG_ALL_MSGS         = 0x1FF
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// cmdType in sendCommand functions
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectenum {
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    CAMERA_CMD_START_SMOOTH_ZOOM     = 1,
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    CAMERA_CMD_STOP_SMOOTH_ZOOM      = 2,
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // Set the clockwise rotation of preview display (setPreviewDisplay) in
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // degrees. This affects the preview frames and the picture displayed after
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // snapshot. This method is useful for portrait mode applications. Note that
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // preview display of front-facing cameras is flipped horizontally before
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // the rotation, that is, the image is reflected along the central vertical
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // axis of the camera sensor. So the users can see themselves as looking
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // into a mirror.
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // This does not affect the order of byte array of CAMERA_MSG_PREVIEW_FRAME,
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // CAMERA_MSG_VIDEO_FRAME, CAMERA_MSG_POSTVIEW_FRAME, CAMERA_MSG_RAW_IMAGE,
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // or CAMERA_MSG_COMPRESSED_IMAGE. This is not allowed to be set during
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // preview.
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    CAMERA_CMD_SET_DISPLAY_ORIENTATION = 3,
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // cmdType to disable/enable shutter sound.
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // In sendCommand passing arg1 = 0 will disable,
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // while passing arg1 = 1 will enable the shutter sound.
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    CAMERA_CMD_ENABLE_SHUTTER_SOUND = 4,
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // cmdType to play recording sound.
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    CAMERA_CMD_PLAY_RECORDING_SOUND = 5,
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// camera fatal errors
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectenum {
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    CAMERA_ERROR_UNKNOWN  = 1,
1108564c8da817a845353d213acd8636b76f567b234Steve Block    CAMERA_ERROR_SERVER_DIED = 100
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectenum {
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    CAMERA_FACING_BACK = 0, /* The facing of the camera is opposite to that of the screen. */
1158564c8da817a845353d213acd8636b76f567b234Steve Block    CAMERA_FACING_FRONT = 1 /* The facing of the camera is the same as that of the screen. */
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct CameraInfo {
1198564c8da817a845353d213acd8636b76f567b234Steve Block
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The direction that the camera faces to. It should be
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * CAMERA_FACING_BACK or CAMERA_FACING_FRONT.
1238564c8da817a845353d213acd8636b76f567b234Steve Block     */
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int facing;
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The orientation of the camera image. The value is the angle that the
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * camera image needs to be rotated clockwise so it shows correctly on
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the display in its natural orientation. It should be 0, 90, 180, or 270.
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * For example, suppose a device has a naturally tall screen. The
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * back-facing camera sensor is mounted in landscape. You are looking at
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the screen. If the top side of the camera sensor is aligned with the
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * right edge of the screen in natural orientation, the value should be
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * 90. If the top side of a front-facing camera sensor is aligned with
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the right of the screen, the value should be 270.
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int orientation;
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass ICameraService;
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass ICamera;
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass Surface;
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass Mutex;
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass String8;
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ref-counted object for callbacks
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass CameraListener: virtual public RefBase
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic:
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual void notify(int32_t msgType, int32_t ext1, int32_t ext2) = 0;
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual void postData(int32_t msgType, const sp<IMemory>& dataPtr) = 0;
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual void postDataTimestamp(nsecs_t timestamp, int32_t msgType, const sp<IMemory>& dataPtr) = 0;
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass Camera : public BnCameraClient, public IBinder::DeathRecipient
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic:
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // construct a camera client from an existing remote
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static  sp<Camera>  create(const sp<ICamera>& camera);
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static  int32_t     getNumberOfCameras();
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static  status_t    getCameraInfo(int cameraId,
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                      struct CameraInfo* cameraInfo);
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static  sp<Camera>  connect(int cameraId);
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        ~Camera();
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            void        init();
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t    reconnect();
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            void        disconnect();
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t    lock();
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t    unlock();
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t    getStatus() { return mStatus; }
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // pass the buffered Surface to the camera service
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t    setPreviewDisplay(const sp<Surface>& surface);
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // start preview mode, must call setPreviewDisplay first
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t    startPreview();
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // stop preview mode
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            void        stopPreview();
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1844df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            // get preview state
1854df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            bool        previewEnabled();
1864df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // start recording mode, must call setPreviewDisplay first
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t    startRecording();
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // stop recording mode
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            void        stopRecording();
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // get recording state
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            bool        recordingEnabled();
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // release a recording frame
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            void        releaseRecordingFrame(const sp<IMemory>& mem);
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // autoFocus - status returned from callback
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t    autoFocus();
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // cancel auto focus
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t    cancelAutoFocus();
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // take a picture - picture returned from callback
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t    takePicture();
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // set preview/capture parameters - key/value pairs
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t    setParameters(const String8& params);
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // get preview/capture parameters - key/value pairs
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String8     getParameters() const;
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // send command to camera driver
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t    sendCommand(int32_t cmd, int32_t arg1, int32_t arg2);
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // return the total number of available video buffers.
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int32_t     getNumberOfVideoBuffers() const;
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // return the individual video buffer corresponding to the given index.
22157f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad            sp<IMemory> getVideoBuffer(int32_t index) const;
22257f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad
22357f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad            // tell camera hal to store meta data or real YUV in video buffers.
2246c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn            status_t    storeMetaDataInBuffers(bool enabled);
22557f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad
22657f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad            void        setListener(const sp<CameraListener>& listener);
22757f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad            void        setPreviewCallbackFlags(int preview_callback_flag);
2288564c8da817a845353d213acd8636b76f567b234Steve Block
22957f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    // ICameraClient interface
23057f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    virtual void        notifyCallback(int32_t msgType, int32_t ext, int32_t ext2);
23157f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    virtual void        dataCallback(int32_t msgType, const sp<IMemory>& dataPtr);
23257f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    virtual void        dataCallbackTimestamp(nsecs_t timestamp, int32_t msgType, const sp<IMemory>& dataPtr);
23357f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad
23457f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    sp<ICamera>         remote();
23557f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad
23657f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstadprivate:
23757f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad                        Camera();
23857f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad                        Camera(const Camera&);
23957f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad                        Camera& operator=(const Camera);
24057f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad                        virtual void binderDied(const wp<IBinder>& who);
24157f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad
24257f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad            class DeathNotifier: public IBinder::DeathRecipient
24357f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad            {
24457f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad            public:
24557f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad                DeathNotifier() {
24657f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad                }
24757f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad
24857f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad                virtual void binderDied(const wp<IBinder>& who);
2498564c8da817a845353d213acd8636b76f567b234Steve Block            };
25057f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad
25157f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad            static sp<DeathNotifier> mDeathNotifier;
25257f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad
2536c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn            // helper function to obtain camera service handle
25457f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad            static const sp<ICameraService>& getCameraService();
25557f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad
25657f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad            sp<ICamera>         mCamera;
25757f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad            status_t            mStatus;
25857f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad
25957f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad            sp<CameraListener>  mListener;
26057f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad
26157f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad            friend class DeathNotifier;
2628564c8da817a845353d213acd8636b76f567b234Steve Block
2636c997a9e880e08c354ffd809bd62df9e25e9c4d4Dianne Hackborn            static  Mutex               mLock;
26457f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad            static  sp<ICameraService>  mCameraService;
26557f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad
26657f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad};
26757f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad
26857f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad}; // namespace android
26957f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad
27057f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad#endif
27157f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad