IProCameraUser.h revision d127c2c8a8b68dae2f8743c310c2547e8f46d967
1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch/*
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Copyright (C) 2013 The Android Open Source Project
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Licensed under the Apache License, Version 2.0 (the "License");
5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * you may not use this file except in compliance with the License.
6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * You may obtain a copy of the License at
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) *      http://www.apache.org/licenses/LICENSE-2.0
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Unless required by applicable law or agreed to in writing, software
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * distributed under the License is distributed on an "AS IS" BASIS,
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * See the License for the specific language governing permissions and
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * limitations under the License.
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef ANDROID_HARDWARE_IPROCAMERAUSER_H
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define ANDROID_HARDWARE_IPROCAMERAUSER_H
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <utils/RefBase.h>
21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include <binder/IInterface.h>
22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include <binder/Parcel.h>
23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include <binder/IMemory.h>
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <utils/String8.h>
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <camera/IProCameraCallbacks.h>
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)struct camera_metadata;
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace android {
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class IProCameraUserClient;
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class IGraphicBufferProducer;
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Surface;
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class IProCameraUser: public IInterface
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)public:
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    DECLARE_META_INTERFACE(ProCameraUser);
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    virtual void            disconnect() = 0;
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // connect to the service, given a callbacks listener
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    virtual status_t        connect(const sp<IProCameraCallbacks>& callbacks)
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                                            = 0;
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * Locking
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     **/
49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    virtual status_t        exclusiveTryLock() = 0;
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    virtual status_t        exclusiveLock() = 0;
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    virtual status_t        exclusiveUnlock() = 0;
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    virtual bool            hasExclusiveLock() = 0;
54
55    /**
56     * Request Handling
57     **/
58
59    // Note that the callee gets a copy of the metadata.
60    virtual int             submitRequest(struct camera_metadata* metadata,
61                                          bool streaming = false) = 0;
62    virtual status_t        cancelRequest(int requestId) = 0;
63
64    virtual status_t        requestStream(int streamId) = 0;
65    virtual status_t        cancelStream(int streamId) = 0;
66    virtual status_t        createStream(
67                                      int width, int height, int format,
68                                      const sp<IGraphicBufferProducer>& bufferProducer,
69                                      /*out*/
70                                      int* streamId) = 0;
71
72    // Create a request object from a template.
73    virtual status_t        createDefaultRequest(int templateId,
74                                                 /*out*/
75                                                 camera_metadata** request)
76                                                                           = 0;
77
78    // Get static camera metadata
79    virtual status_t        getCameraInfo(int cameraId,
80                                          /*out*/
81                                          camera_metadata** info) = 0;
82
83};
84
85// ----------------------------------------------------------------------------
86
87class BnProCameraUser: public BnInterface<IProCameraUser>
88{
89public:
90    virtual status_t    onTransact( uint32_t code,
91                                    const Parcel& data,
92                                    Parcel* reply,
93                                    uint32_t flags = 0);
94};
95
96}; // namespace android
97
98#endif
99