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