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