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