1e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin/*
2e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * Copyright (C) 2013 The Android Open Source Project
3e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin *
4e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * Licensed under the Apache License, Version 2.0 (the "License");
5e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * you may not use this file except in compliance with the License.
6e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * You may obtain a copy of the License at
7e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin *
8e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin *      http://www.apache.org/licenses/LICENSE-2.0
9e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin *
10e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * Unless required by applicable law or agreed to in writing, software
11e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * distributed under the License is distributed on an "AS IS" BASIS,
12e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * See the License for the specific language governing permissions and
14e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * limitations under the License.
15e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin */
16e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
17e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin#ifndef ANDROID_HARDWARE_PHOTOGRAPHY_ICAMERADEVICEUSER_H
18e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin#define ANDROID_HARDWARE_PHOTOGRAPHY_ICAMERADEVICEUSER_H
19e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
20e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin#include <binder/IInterface.h>
21e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin#include <binder/Parcel.h>
22cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei#include <utils/List.h>
23e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
24e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkinstruct camera_metadata;
25e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
26e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkinnamespace android {
27e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
28e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkinclass ICameraDeviceUserClient;
29e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkinclass IGraphicBufferProducer;
30e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkinclass Surface;
31e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkinclass CaptureRequest;
32e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkinclass CameraMetadata;
33e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
342d6bb3f9e3e7cc1c7debbbe3d74bf9c70b6f39d4Jianing Weienum {
352d6bb3f9e3e7cc1c7debbbe3d74bf9c70b6f39d4Jianing Wei    NO_IN_FLIGHT_REPEATING_FRAMES = -1,
362d6bb3f9e3e7cc1c7debbbe3d74bf9c70b6f39d4Jianing Wei};
372d6bb3f9e3e7cc1c7debbbe3d74bf9c70b6f39d4Jianing Wei
38e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkinclass ICameraDeviceUser : public IInterface
39e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin{
40e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin    /**
41e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin     * Keep up-to-date with ICameraDeviceUser.aidl in frameworks/base
42e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin     */
43e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkinpublic:
44e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin    DECLARE_META_INTERFACE(CameraDeviceUser);
45e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
46e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin    virtual void            disconnect() = 0;
47e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
48e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin    /**
49e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin     * Request Handling
50e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin     **/
51e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
52cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei    /**
53cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei     * For streaming requests, output lastFrameNumber is the last frame number
54cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei     * of the previous repeating request.
55cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei     * For non-streaming requests, output lastFrameNumber is the expected last
56cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei     * frame number of the current request.
57cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei     */
58e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin    virtual int             submitRequest(sp<CaptureRequest> request,
59cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei                                          bool streaming = false,
60cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei                                          /*out*/
61cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei                                          int64_t* lastFrameNumber = NULL) = 0;
62cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei
63cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei    /**
64cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei     * For streaming requests, output lastFrameNumber is the last frame number
65cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei     * of the previous repeating request.
66cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei     * For non-streaming requests, output lastFrameNumber is the expected last
67cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei     * frame number of the current request.
68cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei     */
69cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei    virtual int             submitRequestList(List<sp<CaptureRequest> > requestList,
70cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei                                              bool streaming = false,
71cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei                                              /*out*/
72cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei                                              int64_t* lastFrameNumber = NULL) = 0;
73cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei
74cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei    /**
75cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei     * Output lastFrameNumber is the last frame number of the previous repeating request.
76cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei     */
77cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei    virtual status_t        cancelRequest(int requestId,
78cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei                                          /*out*/
79cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei                                          int64_t* lastFrameNumber = NULL) = 0;
80e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
81b2119af7f4ced0ecfefd4c7388f86b4e3a3ea7d8Ruben Brunk    /**
82b2119af7f4ced0ecfefd4c7388f86b4e3a3ea7d8Ruben Brunk     * Begin the device configuration.
83b2119af7f4ced0ecfefd4c7388f86b4e3a3ea7d8Ruben Brunk     *
84b2119af7f4ced0ecfefd4c7388f86b4e3a3ea7d8Ruben Brunk     * <p>
85b2119af7f4ced0ecfefd4c7388f86b4e3a3ea7d8Ruben Brunk     * beginConfigure must be called before any call to deleteStream, createStream,
86b2119af7f4ced0ecfefd4c7388f86b4e3a3ea7d8Ruben Brunk     * or endConfigure.  It is not valid to call this when the device is not idle.
87b2119af7f4ced0ecfefd4c7388f86b4e3a3ea7d8Ruben Brunk     * <p>
88b2119af7f4ced0ecfefd4c7388f86b4e3a3ea7d8Ruben Brunk     */
89b2119af7f4ced0ecfefd4c7388f86b4e3a3ea7d8Ruben Brunk    virtual status_t        beginConfigure() = 0;
90b2119af7f4ced0ecfefd4c7388f86b4e3a3ea7d8Ruben Brunk
91b2119af7f4ced0ecfefd4c7388f86b4e3a3ea7d8Ruben Brunk    /**
92b2119af7f4ced0ecfefd4c7388f86b4e3a3ea7d8Ruben Brunk     * End the device configuration.
93b2119af7f4ced0ecfefd4c7388f86b4e3a3ea7d8Ruben Brunk     *
94b2119af7f4ced0ecfefd4c7388f86b4e3a3ea7d8Ruben Brunk     * <p>
95b2119af7f4ced0ecfefd4c7388f86b4e3a3ea7d8Ruben Brunk     * endConfigure must be called after stream configuration is complete (i.e. after
96b2119af7f4ced0ecfefd4c7388f86b4e3a3ea7d8Ruben Brunk     * a call to beginConfigure and subsequent createStream/deleteStream calls).  This
97b2119af7f4ced0ecfefd4c7388f86b4e3a3ea7d8Ruben Brunk     * must be called before any requests can be submitted.
98b2119af7f4ced0ecfefd4c7388f86b4e3a3ea7d8Ruben Brunk     * <p>
99b2119af7f4ced0ecfefd4c7388f86b4e3a3ea7d8Ruben Brunk     */
100b2119af7f4ced0ecfefd4c7388f86b4e3a3ea7d8Ruben Brunk    virtual status_t        endConfigure() = 0;
101b2119af7f4ced0ecfefd4c7388f86b4e3a3ea7d8Ruben Brunk
102e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin    virtual status_t        deleteStream(int streamId) = 0;
103e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin    virtual status_t        createStream(
104e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin            int width, int height, int format,
105e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin            const sp<IGraphicBufferProducer>& bufferProducer) = 0;
106e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
107e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin    // Create a request object from a template.
108e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin    virtual status_t        createDefaultRequest(int templateId,
109e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin                                                 /*out*/
110e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin                                                 CameraMetadata* request) = 0;
111e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin    // Get static camera metadata
112099b457f3203fa51387e21bd450495abb973ab31Igor Murashkin    virtual status_t        getCameraInfo(/*out*/
113099b457f3203fa51387e21bd450495abb973ab31Igor Murashkin                                          CameraMetadata* info) = 0;
114e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
1152ab500c632569e2f131a1a2288459933da70c4eeZhijun He    // Wait until all the submitted requests have finished processing
1162ab500c632569e2f131a1a2288459933da70c4eeZhijun He    virtual status_t        waitUntilIdle() =  0;
117abaa51d3ca31f0eda99e1d271e6dc64c877dbf58Eino-Ville Talvala
118cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei    /**
119cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei     * Flush all pending and in-progress work as quickly as possible.
120cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei     * Output lastFrameNumber is the last frame number of the previous repeating request.
121cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei     */
122cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei    virtual status_t        flush(/*out*/
123cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei                                  int64_t* lastFrameNumber = NULL) = 0;
124e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin};
125e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
126e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin// ----------------------------------------------------------------------------
127e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
128e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkinclass BnCameraDeviceUser: public BnInterface<ICameraDeviceUser>
129e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin{
130e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkinpublic:
131e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin    virtual status_t    onTransact( uint32_t code,
132e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin                                    const Parcel& data,
133e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin                                    Parcel* reply,
134e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin                                    uint32_t flags = 0);
135e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin};
136e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
137e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin}; // namespace android
138e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
139e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin#endif
140