ICamera.h revision e468ac57f6e8afc6078c76d4eb1ac327112a3de0
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_ICAMERA_H 183cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#define ANDROID_HARDWARE_ICAMERA_H 193cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 203cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#include <utils/RefBase.h> 213cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#include <binder/IInterface.h> 223cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#include <binder/Parcel.h> 234b79168835965cf0fc41ebe2a367e22b4cb20d08Jamie Gennis#include <surfaceflinger/Surface.h> 243cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#include <binder/IMemory.h> 253cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#include <utils/String8.h> 263cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#include <camera/Camera.h> 27bfa33aae4f54c0020a0568b16a3acb7b30b6ca3dJamie Gennis#include <gui/ISurfaceTexture.h> 283cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 293cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopiannamespace android { 303cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 313cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianclass ICameraClient; 323cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 333cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianclass ICamera: public IInterface 343cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{ 353cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianpublic: 363cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian DECLARE_META_INTERFACE(Camera); 373cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 383cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual void disconnect() = 0; 393cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 403cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // connect new client with existing camera remote 413cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual status_t connect(const sp<ICameraClient>& client) = 0; 423cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 433cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // prevent other processes from using this ICamera interface 443cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual status_t lock() = 0; 453cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 463cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // allow other processes to use this ICamera interface 473cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual status_t unlock() = 0; 483cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 494b79168835965cf0fc41ebe2a367e22b4cb20d08Jamie Gennis // pass the buffered Surface to the camera service 504b79168835965cf0fc41ebe2a367e22b4cb20d08Jamie Gennis virtual status_t setPreviewDisplay(const sp<Surface>& surface) = 0; 513cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 52bfa33aae4f54c0020a0568b16a3acb7b30b6ca3dJamie Gennis // pass the buffered ISurfaceTexture to the camera service 53bfa33aae4f54c0020a0568b16a3acb7b30b6ca3dJamie Gennis virtual status_t setPreviewTexture( 54bfa33aae4f54c0020a0568b16a3acb7b30b6ca3dJamie Gennis const sp<ISurfaceTexture>& surfaceTexture) = 0; 55bfa33aae4f54c0020a0568b16a3acb7b30b6ca3dJamie Gennis 563cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // set the preview callback flag to affect how the received frames from 573cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // preview are handled. 583cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual void setPreviewCallbackFlag(int flag) = 0; 593cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 603cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // start preview mode, must call setPreviewDisplay first 613cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual status_t startPreview() = 0; 623cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 633cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // stop preview mode 643cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual void stopPreview() = 0; 653cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 663cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // get preview state 673cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual bool previewEnabled() = 0; 683cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 693cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // start recording mode 703cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual status_t startRecording() = 0; 713cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 723cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // stop recording mode 73e468ac57f6e8afc6078c76d4eb1ac327112a3de0James Dong virtual void stopRecording() = 0; 743cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 753cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // get recording state 763cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual bool recordingEnabled() = 0; 773cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 783cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // release a recording frame 793cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual void releaseRecordingFrame(const sp<IMemory>& mem) = 0; 803cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 813cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // auto focus 823cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual status_t autoFocus() = 0; 833cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 843cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // cancel auto focus 853cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual status_t cancelAutoFocus() = 0; 863cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 87e468ac57f6e8afc6078c76d4eb1ac327112a3de0James Dong /* 88e468ac57f6e8afc6078c76d4eb1ac327112a3de0James Dong * take a picture. 89e468ac57f6e8afc6078c76d4eb1ac327112a3de0James Dong * @param msgType the message type an application selectively turn on/off 90e468ac57f6e8afc6078c76d4eb1ac327112a3de0James Dong * on a photo-by-photo basis. The supported message types are: 91e468ac57f6e8afc6078c76d4eb1ac327112a3de0James Dong * CAMERA_MSG_SHUTTER, CAMERA_MSG_RAW_IMAGE, CAMERA_MSG_COMPRESSED_IMAGE, 92e468ac57f6e8afc6078c76d4eb1ac327112a3de0James Dong * and CAMERA_MSG_POSTVIEW_FRAME. Any other message types will be ignored. 93e468ac57f6e8afc6078c76d4eb1ac327112a3de0James Dong */ 94e468ac57f6e8afc6078c76d4eb1ac327112a3de0James Dong virtual status_t takePicture(int msgType) = 0; 953cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 963cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // set preview/capture parameters - key/value pairs 973cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual status_t setParameters(const String8& params) = 0; 983cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 993cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // get preview/capture parameters - key/value pairs 1003cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual String8 getParameters() const = 0; 1013cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 1023cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // send command to camera driver 1033cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual status_t sendCommand(int32_t cmd, int32_t arg1, int32_t arg2) = 0; 104e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong 105e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong // return the total number of available video buffers 106e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong virtual int32_t getNumberOfVideoBuffers() const = 0; 107e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong 108e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong // return the individual video buffer corresponding to the given index. 109e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong virtual sp<IMemory> getVideoBuffer(int32_t index) const = 0; 110e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong 111e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong // tell the camera hal to store meta data or real YUV data in video buffers. 112e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong virtual status_t storeMetaDataInBuffers(bool enabled) = 0; 1133cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}; 1143cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 1153cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian// ---------------------------------------------------------------------------- 1163cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 1173cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianclass BnCamera: public BnInterface<ICamera> 1183cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{ 1193cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianpublic: 1203cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual status_t onTransact( uint32_t code, 1213cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian const Parcel& data, 1223cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian Parcel* reply, 1233cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian uint32_t flags = 0); 1243cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}; 1253cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 1263cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}; // namespace android 1273cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 1283cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#endif 129