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> 233cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#include <binder/IMemory.h> 24d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala#include <binder/Status.h> 253cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#include <utils/String8.h> 263cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 273cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopiannamespace android { 283cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 298ba01021b573889802e67e029225a96f0dfa471aAndy McFaddenclass IGraphicBufferProducer; 30df712ea86e6350f7005a02ab0e1c60c28a343ed0Mathias Agopianclass Surface; 313cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 32d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalanamespace hardware { 33d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 34d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalaclass ICameraClient; 35d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 36f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvalaclass ICamera: public android::IInterface 373cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{ 38bef3f23f16f2fc575b3f425febcfcc436a7db70fIgor Murashkin /** 39bef3f23f16f2fc575b3f425febcfcc436a7db70fIgor Murashkin * Keep up-to-date with ICamera.aidl in frameworks/base 40bef3f23f16f2fc575b3f425febcfcc436a7db70fIgor Murashkin */ 413cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianpublic: 428cca0750a84c2d97224c0cfef7cf255308ee80b3Chien-Yu Chen enum { 438cca0750a84c2d97224c0cfef7cf255308ee80b3Chien-Yu Chen // Pass real YUV data in video buffers through ICameraClient.dataCallbackTimestamp(). 448cca0750a84c2d97224c0cfef7cf255308ee80b3Chien-Yu Chen VIDEO_BUFFER_MODE_DATA_CALLBACK_YUV = 0, 458cca0750a84c2d97224c0cfef7cf255308ee80b3Chien-Yu Chen // Pass metadata in video buffers through ICameraClient.dataCallbackTimestamp(). 468cca0750a84c2d97224c0cfef7cf255308ee80b3Chien-Yu Chen VIDEO_BUFFER_MODE_DATA_CALLBACK_METADATA = 1, 478cca0750a84c2d97224c0cfef7cf255308ee80b3Chien-Yu Chen // Pass video buffers through IGraphicBufferProducer set with setVideoTarget(). 488cca0750a84c2d97224c0cfef7cf255308ee80b3Chien-Yu Chen VIDEO_BUFFER_MODE_BUFFER_QUEUE = 2, 498cca0750a84c2d97224c0cfef7cf255308ee80b3Chien-Yu Chen }; 508cca0750a84c2d97224c0cfef7cf255308ee80b3Chien-Yu Chen 513cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian DECLARE_META_INTERFACE(Camera); 523cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 53d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala virtual binder::Status disconnect() = 0; 543cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 553cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // connect new client with existing camera remote 563cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual status_t connect(const sp<ICameraClient>& client) = 0; 573cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 583cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // prevent other processes from using this ICamera interface 593cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual status_t lock() = 0; 603cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 613cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // allow other processes to use this ICamera interface 623cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual status_t unlock() = 0; 633cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 648ba01021b573889802e67e029225a96f0dfa471aAndy McFadden // pass the buffered IGraphicBufferProducer to the camera service 651ce7c34e67c2cf58dd88c31f36f4bd62e375f7f0Eino-Ville Talvala virtual status_t setPreviewTarget( 668ba01021b573889802e67e029225a96f0dfa471aAndy McFadden const sp<IGraphicBufferProducer>& bufferProducer) = 0; 67bfa33aae4f54c0020a0568b16a3acb7b30b6ca3dJamie Gennis 683cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // set the preview callback flag to affect how the received frames from 693ee3550a2f529cbf56d87d8503f59a8f45dccf32Eino-Ville Talvala // preview are handled. Enabling preview callback flags disables any active 703ee3550a2f529cbf56d87d8503f59a8f45dccf32Eino-Ville Talvala // preview callback surface set by setPreviewCallbackTarget(). 713cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual void setPreviewCallbackFlag(int flag) = 0; 723ee3550a2f529cbf56d87d8503f59a8f45dccf32Eino-Ville Talvala // set a buffer interface to use for client-received preview frames instead 733ee3550a2f529cbf56d87d8503f59a8f45dccf32Eino-Ville Talvala // of preview callback buffers. Passing a valid interface here disables any 743ee3550a2f529cbf56d87d8503f59a8f45dccf32Eino-Ville Talvala // active preview callbacks set by setPreviewCallbackFlag(). Passing NULL 753ee3550a2f529cbf56d87d8503f59a8f45dccf32Eino-Ville Talvala // disables the use of the callback target. 763ee3550a2f529cbf56d87d8503f59a8f45dccf32Eino-Ville Talvala virtual status_t setPreviewCallbackTarget( 773ee3550a2f529cbf56d87d8503f59a8f45dccf32Eino-Ville Talvala const sp<IGraphicBufferProducer>& callbackProducer) = 0; 783cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 791ce7c34e67c2cf58dd88c31f36f4bd62e375f7f0Eino-Ville Talvala // start preview mode, must call setPreviewTarget first 803cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual status_t startPreview() = 0; 813cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 823cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // stop preview mode 833cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual void stopPreview() = 0; 843cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 853cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // get preview state 863cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual bool previewEnabled() = 0; 873cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 883cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // start recording mode 893cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual status_t startRecording() = 0; 903cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 913cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // stop recording mode 92e468ac57f6e8afc6078c76d4eb1ac327112a3de0James Dong virtual void stopRecording() = 0; 933cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 943cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // get recording state 953cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual bool recordingEnabled() = 0; 963cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 972d13b1d3eeaba31d8c15acc6037fd68b150a9a66Chien-Yu Chen // Release a recording frame that was received via ICameraClient::dataCallbackTimestamp. 983cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual void releaseRecordingFrame(const sp<IMemory>& mem) = 0; 993cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 1002d13b1d3eeaba31d8c15acc6037fd68b150a9a66Chien-Yu Chen // Release a recording frame handle that was received via 1012d13b1d3eeaba31d8c15acc6037fd68b150a9a66Chien-Yu Chen // ICameraClient::recordingFrameHandleCallbackTimestamp. 1022d13b1d3eeaba31d8c15acc6037fd68b150a9a66Chien-Yu Chen virtual void releaseRecordingFrameHandle(native_handle_t *handle) = 0; 1032d13b1d3eeaba31d8c15acc6037fd68b150a9a66Chien-Yu Chen 104b5df547bce900fa5764d735bee304e79c001d60dYin-Chia Yeh // Release a batch of recording frame handles that was received via 105b5df547bce900fa5764d735bee304e79c001d60dYin-Chia Yeh // ICameraClient::recordingFrameHandleCallbackTimestampBatch 106b5df547bce900fa5764d735bee304e79c001d60dYin-Chia Yeh virtual void releaseRecordingFrameHandleBatch( 107b5df547bce900fa5764d735bee304e79c001d60dYin-Chia Yeh const std::vector<native_handle_t*>& handles) = 0; 108b5df547bce900fa5764d735bee304e79c001d60dYin-Chia Yeh 1093cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // auto focus 1103cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual status_t autoFocus() = 0; 1113cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 1123cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // cancel auto focus 1133cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual status_t cancelAutoFocus() = 0; 1143cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 115e468ac57f6e8afc6078c76d4eb1ac327112a3de0James Dong /* 116e468ac57f6e8afc6078c76d4eb1ac327112a3de0James Dong * take a picture. 117e468ac57f6e8afc6078c76d4eb1ac327112a3de0James Dong * @param msgType the message type an application selectively turn on/off 118e468ac57f6e8afc6078c76d4eb1ac327112a3de0James Dong * on a photo-by-photo basis. The supported message types are: 119e468ac57f6e8afc6078c76d4eb1ac327112a3de0James Dong * CAMERA_MSG_SHUTTER, CAMERA_MSG_RAW_IMAGE, CAMERA_MSG_COMPRESSED_IMAGE, 120e468ac57f6e8afc6078c76d4eb1ac327112a3de0James Dong * and CAMERA_MSG_POSTVIEW_FRAME. Any other message types will be ignored. 121e468ac57f6e8afc6078c76d4eb1ac327112a3de0James Dong */ 122e468ac57f6e8afc6078c76d4eb1ac327112a3de0James Dong virtual status_t takePicture(int msgType) = 0; 1233cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 1243cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // set preview/capture parameters - key/value pairs 1253cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual status_t setParameters(const String8& params) = 0; 1263cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 1273cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // get preview/capture parameters - key/value pairs 1283cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual String8 getParameters() const = 0; 1293cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 1303cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian // send command to camera driver 1313cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual status_t sendCommand(int32_t cmd, int32_t arg1, int32_t arg2) = 0; 132e2ad6734eccc4b9ea7857c747ff9469a9c11ba09James Dong 1338cca0750a84c2d97224c0cfef7cf255308ee80b3Chien-Yu Chen 1348cca0750a84c2d97224c0cfef7cf255308ee80b3Chien-Yu Chen // Tell camera how to pass video buffers. videoBufferMode is one of VIDEO_BUFFER_MODE_*. 1358cca0750a84c2d97224c0cfef7cf255308ee80b3Chien-Yu Chen // Returns OK if the specified video buffer mode is supported. If videoBufferMode is 1368cca0750a84c2d97224c0cfef7cf255308ee80b3Chien-Yu Chen // VIDEO_BUFFER_MODE_BUFFER_QUEUE, setVideoTarget() must be called before starting video 1378cca0750a84c2d97224c0cfef7cf255308ee80b3Chien-Yu Chen // recording. 1388cca0750a84c2d97224c0cfef7cf255308ee80b3Chien-Yu Chen virtual status_t setVideoBufferMode(int32_t videoBufferMode) = 0; 1398cca0750a84c2d97224c0cfef7cf255308ee80b3Chien-Yu Chen 1408cca0750a84c2d97224c0cfef7cf255308ee80b3Chien-Yu Chen // Set the video buffer producer for camera to use in VIDEO_BUFFER_MODE_BUFFER_QUEUE mode. 1418cca0750a84c2d97224c0cfef7cf255308ee80b3Chien-Yu Chen virtual status_t setVideoTarget( 1428cca0750a84c2d97224c0cfef7cf255308ee80b3Chien-Yu Chen const sp<IGraphicBufferProducer>& bufferProducer) = 0; 1433cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}; 1443cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 1453cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian// ---------------------------------------------------------------------------- 1463cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 147f51fca277eb5b86bd0b2e3fc90ecb2b63089de29Eino-Ville Talvalaclass BnCamera: public android::BnInterface<ICamera> 1483cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{ 1493cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianpublic: 1503cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian virtual status_t onTransact( uint32_t code, 1513cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian const Parcel& data, 1523cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian Parcel* reply, 1533cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian uint32_t flags = 0); 1543cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}; 1553cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 156d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala} // namespace hardware 157d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala} // namespace android 1583cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 1593cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#endif 160