1*4d7e907cSAndroid Build Coastguard Worker/* 2*4d7e907cSAndroid Build Coastguard Worker * Copyright (C) 2019 The Android Open Source Project 3*4d7e907cSAndroid Build Coastguard Worker * 4*4d7e907cSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*4d7e907cSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*4d7e907cSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*4d7e907cSAndroid Build Coastguard Worker * 8*4d7e907cSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*4d7e907cSAndroid Build Coastguard Worker * 10*4d7e907cSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*4d7e907cSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*4d7e907cSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*4d7e907cSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*4d7e907cSAndroid Build Coastguard Worker * limitations under the License. 15*4d7e907cSAndroid Build Coastguard Worker */ 16*4d7e907cSAndroid Build Coastguard Worker 17*4d7e907cSAndroid Build Coastguard Workerpackage [email protected]; 18*4d7e907cSAndroid Build Coastguard Worker 19*4d7e907cSAndroid Build Coastguard Workerimport @1.0::IEvsCamera; 20*4d7e907cSAndroid Build Coastguard Workerimport @1.0::IEvsDisplay; 21*4d7e907cSAndroid Build Coastguard Workerimport @1.0::EvsResult; 22*4d7e907cSAndroid Build Coastguard Workerimport IEvsCameraStream; 23*4d7e907cSAndroid Build Coastguard Worker 24*4d7e907cSAndroid Build Coastguard Worker/** 25*4d7e907cSAndroid Build Coastguard Worker * Represents a single camera and is the primary interface for capturing images. 26*4d7e907cSAndroid Build Coastguard Worker */ 27*4d7e907cSAndroid Build Coastguard Workerinterface IEvsCamera extends @1.0::IEvsCamera { 28*4d7e907cSAndroid Build Coastguard Worker /** 29*4d7e907cSAndroid Build Coastguard Worker * Returns the description of this camera. 30*4d7e907cSAndroid Build Coastguard Worker * 31*4d7e907cSAndroid Build Coastguard Worker * @return info The description of this camera. This must be the same value as 32*4d7e907cSAndroid Build Coastguard Worker * reported by EvsEnumerator::getCameraList_1_1(). 33*4d7e907cSAndroid Build Coastguard Worker */ 34*4d7e907cSAndroid Build Coastguard Worker getCameraInfo_1_1() generates (CameraDesc info); 35*4d7e907cSAndroid Build Coastguard Worker 36*4d7e907cSAndroid Build Coastguard Worker /** 37*4d7e907cSAndroid Build Coastguard Worker * Returns the description of the physical camera device that backs this 38*4d7e907cSAndroid Build Coastguard Worker * logical camera. 39*4d7e907cSAndroid Build Coastguard Worker * 40*4d7e907cSAndroid Build Coastguard Worker * If a requested device does not either exist or back this logical device, 41*4d7e907cSAndroid Build Coastguard Worker * this method returns a null camera descriptor. And, if this is called on 42*4d7e907cSAndroid Build Coastguard Worker * a physical camera device, this method is the same as getCameraInfo_1_1() 43*4d7e907cSAndroid Build Coastguard Worker * method if a given device ID is matched. Otherwise, this will return a 44*4d7e907cSAndroid Build Coastguard Worker * null camera descriptor. 45*4d7e907cSAndroid Build Coastguard Worker * 46*4d7e907cSAndroid Build Coastguard Worker * @param deviceId Physical camera device identifier string. 47*4d7e907cSAndroid Build Coastguard Worker * @return info The description of a member physical camera device. 48*4d7e907cSAndroid Build Coastguard Worker * This must be the same value as reported by 49*4d7e907cSAndroid Build Coastguard Worker * EvsEnumerator::getCameraList_1_1(). 50*4d7e907cSAndroid Build Coastguard Worker */ 51*4d7e907cSAndroid Build Coastguard Worker getPhysicalCameraInfo(string deviceId) generates (CameraDesc info); 52*4d7e907cSAndroid Build Coastguard Worker 53*4d7e907cSAndroid Build Coastguard Worker /** 54*4d7e907cSAndroid Build Coastguard Worker * Requests to pause EVS camera stream events. 55*4d7e907cSAndroid Build Coastguard Worker * 56*4d7e907cSAndroid Build Coastguard Worker * Like stopVideoStream(), events may continue to arrive for some time 57*4d7e907cSAndroid Build Coastguard Worker * after this call returns. Delivered frame buffers must be returned. 58*4d7e907cSAndroid Build Coastguard Worker * 59*4d7e907cSAndroid Build Coastguard Worker * @return result EvsResult::OK is returned if this call is successful. 60*4d7e907cSAndroid Build Coastguard Worker */ 61*4d7e907cSAndroid Build Coastguard Worker pauseVideoStream() generates (EvsResult result); 62*4d7e907cSAndroid Build Coastguard Worker 63*4d7e907cSAndroid Build Coastguard Worker /** 64*4d7e907cSAndroid Build Coastguard Worker * Requests to resume EVS camera stream. 65*4d7e907cSAndroid Build Coastguard Worker * 66*4d7e907cSAndroid Build Coastguard Worker * @return result EvsResult::OK is returned if this call is successful. 67*4d7e907cSAndroid Build Coastguard Worker */ 68*4d7e907cSAndroid Build Coastguard Worker resumeVideoStream() generates (EvsResult result); 69*4d7e907cSAndroid Build Coastguard Worker 70*4d7e907cSAndroid Build Coastguard Worker /** 71*4d7e907cSAndroid Build Coastguard Worker * Returns frame that were delivered by to the IEvsCameraStream. 72*4d7e907cSAndroid Build Coastguard Worker * 73*4d7e907cSAndroid Build Coastguard Worker * When done consuming a frame delivered to the IEvsCameraStream 74*4d7e907cSAndroid Build Coastguard Worker * interface, it must be returned to the IEvsCamera for reuse. 75*4d7e907cSAndroid Build Coastguard Worker * A small, finite number of buffers are available (possibly as small 76*4d7e907cSAndroid Build Coastguard Worker * as one), and if the supply is exhausted, no further frames may be 77*4d7e907cSAndroid Build Coastguard Worker * delivered until a buffer is returned. 78*4d7e907cSAndroid Build Coastguard Worker * 79*4d7e907cSAndroid Build Coastguard Worker * @param buffer Buffers to be returned. 80*4d7e907cSAndroid Build Coastguard Worker * @return result Return EvsResult::OK if this call is successful. 81*4d7e907cSAndroid Build Coastguard Worker */ 82*4d7e907cSAndroid Build Coastguard Worker doneWithFrame_1_1(vec<BufferDesc> buffer) generates (EvsResult result); 83*4d7e907cSAndroid Build Coastguard Worker 84*4d7e907cSAndroid Build Coastguard Worker /** 85*4d7e907cSAndroid Build Coastguard Worker * Requests to be a master client. 86*4d7e907cSAndroid Build Coastguard Worker * 87*4d7e907cSAndroid Build Coastguard Worker * When multiple clients subscribe to a single camera hardware and one of 88*4d7e907cSAndroid Build Coastguard Worker * them adjusts a camera parameter such as the contrast, it may disturb 89*4d7e907cSAndroid Build Coastguard Worker * other clients' operations. Therefore, the client must call this method 90*4d7e907cSAndroid Build Coastguard Worker * to be a master client. Once it becomes a master, it will be able to 91*4d7e907cSAndroid Build Coastguard Worker * change camera parameters until either it dies or explicitly gives up the 92*4d7e907cSAndroid Build Coastguard Worker * role. 93*4d7e907cSAndroid Build Coastguard Worker * 94*4d7e907cSAndroid Build Coastguard Worker * @return result EvsResult::OK if a master role is granted. 95*4d7e907cSAndroid Build Coastguard Worker * EvsResult::OWNERSHIP_LOST if there is already a 96*4d7e907cSAndroid Build Coastguard Worker * master client. 97*4d7e907cSAndroid Build Coastguard Worker */ 98*4d7e907cSAndroid Build Coastguard Worker setMaster() generates (EvsResult result); 99*4d7e907cSAndroid Build Coastguard Worker 100*4d7e907cSAndroid Build Coastguard Worker /** 101*4d7e907cSAndroid Build Coastguard Worker * Sets to be a master client forcibly. 102*4d7e907cSAndroid Build Coastguard Worker * 103*4d7e907cSAndroid Build Coastguard Worker * The client, which owns the display, has a high priority and can take over 104*4d7e907cSAndroid Build Coastguard Worker * a master role from other clients without the display. 105*4d7e907cSAndroid Build Coastguard Worker * 106*4d7e907cSAndroid Build Coastguard Worker * @param display IEvsDisplay handle. If a given display is in either 107*4d7e907cSAndroid Build Coastguard Worker * NOT_VISIBLE, VISIBLE_ON_NEXT_FRAME, or VISIBLE state, the 108*4d7e907cSAndroid Build Coastguard Worker * calling client is considered as the high priority client 109*4d7e907cSAndroid Build Coastguard Worker * and therefore allowed to take over a master role from 110*4d7e907cSAndroid Build Coastguard Worker * existing master client. 111*4d7e907cSAndroid Build Coastguard Worker * 112*4d7e907cSAndroid Build Coastguard Worker * @return result EvsResult::OK if a master role is granted. 113*4d7e907cSAndroid Build Coastguard Worker * EvsResult::INVALID_ARG if a given display handle is null 114*4d7e907cSAndroid Build Coastguard Worker * or in valid states. 115*4d7e907cSAndroid Build Coastguard Worker */ 116*4d7e907cSAndroid Build Coastguard Worker forceMaster(IEvsDisplay display) generates (EvsResult result); 117*4d7e907cSAndroid Build Coastguard Worker 118*4d7e907cSAndroid Build Coastguard Worker /** 119*4d7e907cSAndroid Build Coastguard Worker * Retires from a master client role. 120*4d7e907cSAndroid Build Coastguard Worker * 121*4d7e907cSAndroid Build Coastguard Worker * @return result EvsResult::OK if this call is successful. 122*4d7e907cSAndroid Build Coastguard Worker * EvsResult::INVALID_ARG if the caller client is not a 123*4d7e907cSAndroid Build Coastguard Worker * master client. 124*4d7e907cSAndroid Build Coastguard Worker */ 125*4d7e907cSAndroid Build Coastguard Worker unsetMaster() generates (EvsResult result); 126*4d7e907cSAndroid Build Coastguard Worker 127*4d7e907cSAndroid Build Coastguard Worker /** 128*4d7e907cSAndroid Build Coastguard Worker * Retrieves a list of parameters this camera supports. 129*4d7e907cSAndroid Build Coastguard Worker * 130*4d7e907cSAndroid Build Coastguard Worker * @return params A list of CameraParam that this camera supports. 131*4d7e907cSAndroid Build Coastguard Worker */ 132*4d7e907cSAndroid Build Coastguard Worker getParameterList() generates (vec<CameraParam> params); 133*4d7e907cSAndroid Build Coastguard Worker 134*4d7e907cSAndroid Build Coastguard Worker /** 135*4d7e907cSAndroid Build Coastguard Worker * Requests a valid value range of a camera parameter 136*4d7e907cSAndroid Build Coastguard Worker * 137*4d7e907cSAndroid Build Coastguard Worker * @param id The identifier of camera parameter, CameraParam enum. 138*4d7e907cSAndroid Build Coastguard Worker * 139*4d7e907cSAndroid Build Coastguard Worker * @return min The lower bound of valid parameter value range. 140*4d7e907cSAndroid Build Coastguard Worker * @return max The upper bound of valid parameter value range. 141*4d7e907cSAndroid Build Coastguard Worker * @return step The resolution of values in valid range. 142*4d7e907cSAndroid Build Coastguard Worker */ 143*4d7e907cSAndroid Build Coastguard Worker getIntParameterRange(CameraParam id) 144*4d7e907cSAndroid Build Coastguard Worker generates (int32_t min, int32_t max, int32_t step); 145*4d7e907cSAndroid Build Coastguard Worker 146*4d7e907cSAndroid Build Coastguard Worker /** 147*4d7e907cSAndroid Build Coastguard Worker * Requests to set a camera parameter. 148*4d7e907cSAndroid Build Coastguard Worker * 149*4d7e907cSAndroid Build Coastguard Worker * Only a request from the master client will be processed successfully. 150*4d7e907cSAndroid Build Coastguard Worker * When this method is called on a logical camera device, it will be forwarded 151*4d7e907cSAndroid Build Coastguard Worker * to each physical device and, if it fails to program any physical device, 152*4d7e907cSAndroid Build Coastguard Worker * it will return an error code with the same number of effective values as 153*4d7e907cSAndroid Build Coastguard Worker * the number of backing camera devices. 154*4d7e907cSAndroid Build Coastguard Worker * 155*4d7e907cSAndroid Build Coastguard Worker * @param id The identifier of camera parameter, CameraParam enum. 156*4d7e907cSAndroid Build Coastguard Worker * value A desired parameter value. 157*4d7e907cSAndroid Build Coastguard Worker * @return result EvsResult::OK if it succeeds to set a parameter. 158*4d7e907cSAndroid Build Coastguard Worker * EvsResult::INVALID_ARG if either the request is 159*4d7e907cSAndroid Build Coastguard Worker * not made by a master client, or a requested 160*4d7e907cSAndroid Build Coastguard Worker * parameter is not supported. 161*4d7e907cSAndroid Build Coastguard Worker * EvsResult::UNDERLYING_SERVICE_ERROR if it fails to 162*4d7e907cSAndroid Build Coastguard Worker * program a value by any other reason. 163*4d7e907cSAndroid Build Coastguard Worker * effectiveValue Programmed parameter values. This may differ 164*4d7e907cSAndroid Build Coastguard Worker * from what the client gives if, for example, the 165*4d7e907cSAndroid Build Coastguard Worker * driver does not support a target parameter. 166*4d7e907cSAndroid Build Coastguard Worker */ 167*4d7e907cSAndroid Build Coastguard Worker setIntParameter(CameraParam id, int32_t value) 168*4d7e907cSAndroid Build Coastguard Worker generates (EvsResult result, vec<int32_t> effectiveValue); 169*4d7e907cSAndroid Build Coastguard Worker 170*4d7e907cSAndroid Build Coastguard Worker /** 171*4d7e907cSAndroid Build Coastguard Worker * Retrieves values of given camera parameter. 172*4d7e907cSAndroid Build Coastguard Worker * 173*4d7e907cSAndroid Build Coastguard Worker * @param id The identifier of camera parameter, CameraParam enum. 174*4d7e907cSAndroid Build Coastguard Worker * @return result EvsResult::OK if it succeeds to read a parameter. 175*4d7e907cSAndroid Build Coastguard Worker * EvsResult::INVALID_ARG if either a requested parameter is 176*4d7e907cSAndroid Build Coastguard Worker * not supported. 177*4d7e907cSAndroid Build Coastguard Worker * value Values of requested camera parameter, the same number of 178*4d7e907cSAndroid Build Coastguard Worker * values as backing camera devices. 179*4d7e907cSAndroid Build Coastguard Worker */ 180*4d7e907cSAndroid Build Coastguard Worker getIntParameter(CameraParam id) generates(EvsResult result, vec<int32_t> value); 181*4d7e907cSAndroid Build Coastguard Worker 182*4d7e907cSAndroid Build Coastguard Worker /** 183*4d7e907cSAndroid Build Coastguard Worker * Request driver specific information from the HAL implementation. 184*4d7e907cSAndroid Build Coastguard Worker * 185*4d7e907cSAndroid Build Coastguard Worker * The values allowed for opaqueIdentifier are driver specific, 186*4d7e907cSAndroid Build Coastguard Worker * but no value passed in may crash the driver. The driver should 187*4d7e907cSAndroid Build Coastguard Worker * return EvsResult::INVALID_ARG for any unrecognized opaqueIdentifier. 188*4d7e907cSAndroid Build Coastguard Worker * 189*4d7e907cSAndroid Build Coastguard Worker * @param opaqueIdentifier An unique identifier of the information to 190*4d7e907cSAndroid Build Coastguard Worker * request. 191*4d7e907cSAndroid Build Coastguard Worker * @return result EvsResult::OK if the driver recognizes a given 192*4d7e907cSAndroid Build Coastguard Worker * identifier. 193*4d7e907cSAndroid Build Coastguard Worker * EvsResult::INVALID_ARG, otherwise. 194*4d7e907cSAndroid Build Coastguard Worker * @return value Requested information. Zero-size vector is 195*4d7e907cSAndroid Build Coastguard Worker * returned if the driver does not recognize a 196*4d7e907cSAndroid Build Coastguard Worker * given identifier. 197*4d7e907cSAndroid Build Coastguard Worker */ 198*4d7e907cSAndroid Build Coastguard Worker getExtendedInfo_1_1(uint32_t opaqueIdentifier) 199*4d7e907cSAndroid Build Coastguard Worker generates (EvsResult result, vec<uint8_t> value); 200*4d7e907cSAndroid Build Coastguard Worker 201*4d7e907cSAndroid Build Coastguard Worker /** 202*4d7e907cSAndroid Build Coastguard Worker * Send a driver specific value to the HAL implementation. 203*4d7e907cSAndroid Build Coastguard Worker * 204*4d7e907cSAndroid Build Coastguard Worker * This extension is provided to facilitate car specific 205*4d7e907cSAndroid Build Coastguard Worker * extensions, but no HAL implementation may require this call 206*4d7e907cSAndroid Build Coastguard Worker * in order to function in a default state. 207*4d7e907cSAndroid Build Coastguard Worker * INVALID_ARG is returned if the opaqueValue is not meaningful to 208*4d7e907cSAndroid Build Coastguard Worker * the driver implementation. 209*4d7e907cSAndroid Build Coastguard Worker * 210*4d7e907cSAndroid Build Coastguard Worker * @param opaqueIdentifier An unique identifier of the information to 211*4d7e907cSAndroid Build Coastguard Worker * program. 212*4d7e907cSAndroid Build Coastguard Worker * opaqueValue A value to program. 213*4d7e907cSAndroid Build Coastguard Worker * @return result EvsResult::OK is returned if this call is successful. 214*4d7e907cSAndroid Build Coastguard Worker * EvsResult::INVALID_ARG, otherwise. 215*4d7e907cSAndroid Build Coastguard Worker */ 216*4d7e907cSAndroid Build Coastguard Worker setExtendedInfo_1_1(uint32_t opaqueIdentifier, vec<uint8_t> opaqueValue) 217*4d7e907cSAndroid Build Coastguard Worker generates (EvsResult result); 218*4d7e907cSAndroid Build Coastguard Worker 219*4d7e907cSAndroid Build Coastguard Worker /** 220*4d7e907cSAndroid Build Coastguard Worker * Import external buffers to capture frames 221*4d7e907cSAndroid Build Coastguard Worker * 222*4d7e907cSAndroid Build Coastguard Worker * This API must be called with a physical camera device identifier. 223*4d7e907cSAndroid Build Coastguard Worker * 224*4d7e907cSAndroid Build Coastguard Worker * @param buffers A list of buffers allocated by the caller. EvsCamera 225*4d7e907cSAndroid Build Coastguard Worker * will use these buffers to capture frames, in addition to 226*4d7e907cSAndroid Build Coastguard Worker * other buffers already in its buffer pool. 227*4d7e907cSAndroid Build Coastguard Worker * @return result EvsResult::OK if it succeeds to import buffers. 228*4d7e907cSAndroid Build Coastguard Worker * EvsResult::UNDERLYING_SERVICE_ERROR if this is called 229*4d7e907cSAndroid Build Coastguard Worker * for logical camera devices or EVS fails to import 230*4d7e907cSAndroid Build Coastguard Worker * buffers. 231*4d7e907cSAndroid Build Coastguard Worker * delta The amount of buffer pool size changes after importing 232*4d7e907cSAndroid Build Coastguard Worker * given buffers. 233*4d7e907cSAndroid Build Coastguard Worker */ 234*4d7e907cSAndroid Build Coastguard Worker importExternalBuffers(vec<BufferDesc> buffers) 235*4d7e907cSAndroid Build Coastguard Worker generates (EvsResult result, int32_t delta); 236*4d7e907cSAndroid Build Coastguard Worker}; 237