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