1*4d7e907cSAndroid Build Coastguard Worker/* 2*4d7e907cSAndroid Build Coastguard Worker * Copyright (C) 2016 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 [email protected]::types; 20*4d7e907cSAndroid Build Coastguard Workerimport ICameraDeviceCallback; 21*4d7e907cSAndroid Build Coastguard Workerimport ICameraDevicePreviewCallback; 22*4d7e907cSAndroid Build Coastguard Worker 23*4d7e907cSAndroid Build Coastguard Worker/** 24*4d7e907cSAndroid Build Coastguard Worker * Camera device HAL, legacy version 25*4d7e907cSAndroid Build Coastguard Worker * 26*4d7e907cSAndroid Build Coastguard Worker * DEPRECATED. New devices are strongly recommended to use Camera HAL v3.2 or 27*4d7e907cSAndroid Build Coastguard Worker * newer. 28*4d7e907cSAndroid Build Coastguard Worker * 29*4d7e907cSAndroid Build Coastguard Worker * Supports the android.hardware.Camera API, and the android.hardware.camera2 30*4d7e907cSAndroid Build Coastguard Worker * API in LEGACY mode only. 31*4d7e907cSAndroid Build Coastguard Worker * 32*4d7e907cSAndroid Build Coastguard Worker * Will be removed in the Android P release. 33*4d7e907cSAndroid Build Coastguard Worker */ 34*4d7e907cSAndroid Build Coastguard Workerinterface ICameraDevice { 35*4d7e907cSAndroid Build Coastguard Worker 36*4d7e907cSAndroid Build Coastguard Worker /** 37*4d7e907cSAndroid Build Coastguard Worker * Get camera device resource cost information. 38*4d7e907cSAndroid Build Coastguard Worker * 39*4d7e907cSAndroid Build Coastguard Worker * This method may be called at any time, including before open() 40*4d7e907cSAndroid Build Coastguard Worker * 41*4d7e907cSAndroid Build Coastguard Worker * @return status Status code for the operation, one of: 42*4d7e907cSAndroid Build Coastguard Worker * OK: 43*4d7e907cSAndroid Build Coastguard Worker * On success. 44*4d7e907cSAndroid Build Coastguard Worker * INTERNAL_ERROR: 45*4d7e907cSAndroid Build Coastguard Worker * An unexpected internal camera HAL error occurred, and the 46*4d7e907cSAndroid Build Coastguard Worker * resource cost is not available. 47*4d7e907cSAndroid Build Coastguard Worker * CAMERA_DISCONNECTED: 48*4d7e907cSAndroid Build Coastguard Worker * An external camera device has been disconnected, and is no longer 49*4d7e907cSAndroid Build Coastguard Worker * available. This camera device interface is now stale, and a new 50*4d7e907cSAndroid Build Coastguard Worker * instance must be acquired if the device is reconnected. All 51*4d7e907cSAndroid Build Coastguard Worker * subsequent calls on this interface must return 52*4d7e907cSAndroid Build Coastguard Worker * CAMERA_DISCONNECTED. 53*4d7e907cSAndroid Build Coastguard Worker * @return resourceCost 54*4d7e907cSAndroid Build Coastguard Worker * The resources required to open this camera device, or unspecified 55*4d7e907cSAndroid Build Coastguard Worker * values if status is not OK. 56*4d7e907cSAndroid Build Coastguard Worker */ 57*4d7e907cSAndroid Build Coastguard Worker getResourceCost() generates (Status status, CameraResourceCost resourceCost); 58*4d7e907cSAndroid Build Coastguard Worker 59*4d7e907cSAndroid Build Coastguard Worker /** 60*4d7e907cSAndroid Build Coastguard Worker * Get basic camera information. 61*4d7e907cSAndroid Build Coastguard Worker * 62*4d7e907cSAndroid Build Coastguard Worker * This method may be called at any time, including before open() 63*4d7e907cSAndroid Build Coastguard Worker * 64*4d7e907cSAndroid Build Coastguard Worker * @return status Status code for the operation, one of: 65*4d7e907cSAndroid Build Coastguard Worker * OK: 66*4d7e907cSAndroid Build Coastguard Worker * On success. 67*4d7e907cSAndroid Build Coastguard Worker * INTERNAL_ERROR: 68*4d7e907cSAndroid Build Coastguard Worker * An unexpected internal camera HAL error occurred, and the 69*4d7e907cSAndroid Build Coastguard Worker * camera information is not available. 70*4d7e907cSAndroid Build Coastguard Worker * CAMERA_DISCONNECTED: 71*4d7e907cSAndroid Build Coastguard Worker * An external camera device has been disconnected, and is no longer 72*4d7e907cSAndroid Build Coastguard Worker * available. This camera device interface is now stale, and a new 73*4d7e907cSAndroid Build Coastguard Worker * instance must be acquired if the device is reconnected. All 74*4d7e907cSAndroid Build Coastguard Worker * subsequent calls on this interface must return 75*4d7e907cSAndroid Build Coastguard Worker * CAMERA_DISCONNECTED. 76*4d7e907cSAndroid Build Coastguard Worker * @return info Basic information about this camera device, or unspecified 77*4d7e907cSAndroid Build Coastguard Worker * values if status is not OK. 78*4d7e907cSAndroid Build Coastguard Worker */ 79*4d7e907cSAndroid Build Coastguard Worker getCameraInfo() generates (Status status, CameraInfo info); 80*4d7e907cSAndroid Build Coastguard Worker 81*4d7e907cSAndroid Build Coastguard Worker /** 82*4d7e907cSAndroid Build Coastguard Worker * setTorchMode: 83*4d7e907cSAndroid Build Coastguard Worker * 84*4d7e907cSAndroid Build Coastguard Worker * Turn on or off the torch mode of the flash unit associated with a given 85*4d7e907cSAndroid Build Coastguard Worker * camera ID. If the operation is successful, HAL must notify the framework 86*4d7e907cSAndroid Build Coastguard Worker * torch state by invoking 87*4d7e907cSAndroid Build Coastguard Worker * ICameraProviderCallback::torchModeStatusChange() with the new state. 88*4d7e907cSAndroid Build Coastguard Worker * 89*4d7e907cSAndroid Build Coastguard Worker * The camera device has a higher priority accessing the flash unit. When 90*4d7e907cSAndroid Build Coastguard Worker * there are any resource conflicts, such as when open() is called to fully 91*4d7e907cSAndroid Build Coastguard Worker * activate a camera device, the provider must notify the framework through 92*4d7e907cSAndroid Build Coastguard Worker * ICameraProviderCallback::torchModeStatusChange() that the torch mode has 93*4d7e907cSAndroid Build Coastguard Worker * been turned off and the torch mode state has become 94*4d7e907cSAndroid Build Coastguard Worker * TORCH_MODE_STATUS_NOT_AVAILABLE. When resources to turn on torch mode 95*4d7e907cSAndroid Build Coastguard Worker * become available again, the provider must notify the framework through 96*4d7e907cSAndroid Build Coastguard Worker * ICameraProviderCallback::torchModeStatusChange() that the torch mode 97*4d7e907cSAndroid Build Coastguard Worker * state has become TORCH_MODE_STATUS_AVAILABLE_OFF for set_torch_mode() to 98*4d7e907cSAndroid Build Coastguard Worker * be called. 99*4d7e907cSAndroid Build Coastguard Worker * 100*4d7e907cSAndroid Build Coastguard Worker * When the framework calls setTorchMode() to turn on the torch mode of a 101*4d7e907cSAndroid Build Coastguard Worker * flash unit, if HAL cannot keep multiple torch modes on simultaneously, 102*4d7e907cSAndroid Build Coastguard Worker * HAL must turn off the torch mode that was turned on by 103*4d7e907cSAndroid Build Coastguard Worker * a previous setTorchMode() call and notify the framework that the torch 104*4d7e907cSAndroid Build Coastguard Worker * mode state of that flash unit has become TORCH_MODE_STATUS_AVAILABLE_OFF. 105*4d7e907cSAndroid Build Coastguard Worker * 106*4d7e907cSAndroid Build Coastguard Worker * @param torchMode The new mode to set the device flash unit to. 107*4d7e907cSAndroid Build Coastguard Worker * 108*4d7e907cSAndroid Build Coastguard Worker * @return status Status code for the operation, one of: 109*4d7e907cSAndroid Build Coastguard Worker * OK: 110*4d7e907cSAndroid Build Coastguard Worker * On a successful change to the torch state. 111*4d7e907cSAndroid Build Coastguard Worker * INTERNAL_ERROR: 112*4d7e907cSAndroid Build Coastguard Worker * The flash unit cannot be operated due to an unexpected internal 113*4d7e907cSAndroid Build Coastguard Worker * error. 114*4d7e907cSAndroid Build Coastguard Worker * ILLEGAL_ARGUMENT: 115*4d7e907cSAndroid Build Coastguard Worker * The camera ID is unknown. 116*4d7e907cSAndroid Build Coastguard Worker * CAMERA_IN_USE: 117*4d7e907cSAndroid Build Coastguard Worker * This camera device has been opened, so the torch cannot be 118*4d7e907cSAndroid Build Coastguard Worker * controlled until it is closed. 119*4d7e907cSAndroid Build Coastguard Worker * MAX_CAMERAS_IN_USE: 120*4d7e907cSAndroid Build Coastguard Worker * Due to other camera devices being open, or due to other 121*4d7e907cSAndroid Build Coastguard Worker * resource constraints, the torch cannot be controlled currently. 122*4d7e907cSAndroid Build Coastguard Worker * METHOD_NOT_SUPPORTED: 123*4d7e907cSAndroid Build Coastguard Worker * This provider does not support direct operation of flashlight 124*4d7e907cSAndroid Build Coastguard Worker * torch mode. The framework must open the camera device and turn 125*4d7e907cSAndroid Build Coastguard Worker * the torch on through the device interface. 126*4d7e907cSAndroid Build Coastguard Worker * OPERATION_NOT_SUPPORTED: 127*4d7e907cSAndroid Build Coastguard Worker * This camera device does not have a flash unit. This must 128*4d7e907cSAndroid Build Coastguard Worker * be returned if and only if parameter key flash-mode-values is not present. 129*4d7e907cSAndroid Build Coastguard Worker * CAMERA_DISCONNECTED: 130*4d7e907cSAndroid Build Coastguard Worker * An external camera device has been disconnected, and is no longer 131*4d7e907cSAndroid Build Coastguard Worker * available. This camera device interface is now stale, and a new 132*4d7e907cSAndroid Build Coastguard Worker * instance must be acquired if the device is reconnected. All 133*4d7e907cSAndroid Build Coastguard Worker * subsequent calls on this interface must return 134*4d7e907cSAndroid Build Coastguard Worker * CAMERA_DISCONNECTED. 135*4d7e907cSAndroid Build Coastguard Worker * 136*4d7e907cSAndroid Build Coastguard Worker */ 137*4d7e907cSAndroid Build Coastguard Worker setTorchMode(TorchMode mode) generates (Status status); 138*4d7e907cSAndroid Build Coastguard Worker 139*4d7e907cSAndroid Build Coastguard Worker /** 140*4d7e907cSAndroid Build Coastguard Worker * Dump state of the camera hardware. 141*4d7e907cSAndroid Build Coastguard Worker * 142*4d7e907cSAndroid Build Coastguard Worker * This must be callable at any time, whether the device is open or not. 143*4d7e907cSAndroid Build Coastguard Worker * 144*4d7e907cSAndroid Build Coastguard Worker * @param fd A native handle with one valid file descriptor. The descriptor 145*4d7e907cSAndroid Build Coastguard Worker * must be able to be used with dprintf() or equivalent to dump the 146*4d7e907cSAndroid Build Coastguard Worker * state of this camera device into the camera service dumpsys output. 147*4d7e907cSAndroid Build Coastguard Worker * 148*4d7e907cSAndroid Build Coastguard Worker * @return status The status code for this operation. 149*4d7e907cSAndroid Build Coastguard Worker */ 150*4d7e907cSAndroid Build Coastguard Worker dumpState(handle fd) generates (Status status); 151*4d7e907cSAndroid Build Coastguard Worker 152*4d7e907cSAndroid Build Coastguard Worker /** 153*4d7e907cSAndroid Build Coastguard Worker * Open the camera device for active use. 154*4d7e907cSAndroid Build Coastguard Worker * 155*4d7e907cSAndroid Build Coastguard Worker * All methods besides getResourceCost(), getCameraInfo(), setTorchMode(), 156*4d7e907cSAndroid Build Coastguard Worker * and dump() must not be called unless open() has been called successfully, 157*4d7e907cSAndroid Build Coastguard Worker * and close() has not yet been called. 158*4d7e907cSAndroid Build Coastguard Worker * 159*4d7e907cSAndroid Build Coastguard Worker * @param callback Interface to invoke by the HAL for device callbacks. 160*4d7e907cSAndroid Build Coastguard Worker * @return status Status code for the operation, one of: 161*4d7e907cSAndroid Build Coastguard Worker * OK: 162*4d7e907cSAndroid Build Coastguard Worker * On a successful open of the camera device. 163*4d7e907cSAndroid Build Coastguard Worker * INTERNAL_ERROR: 164*4d7e907cSAndroid Build Coastguard Worker * The camera device cannot be opened due to an internal 165*4d7e907cSAndroid Build Coastguard Worker * error. 166*4d7e907cSAndroid Build Coastguard Worker * ILLEGAL_ARGUMENT: 167*4d7e907cSAndroid Build Coastguard Worker * The callback handle is invalid (for example, it is null). 168*4d7e907cSAndroid Build Coastguard Worker * CAMERA_IN_USE: 169*4d7e907cSAndroid Build Coastguard Worker * This camera device is already open. 170*4d7e907cSAndroid Build Coastguard Worker * MAX_CAMERAS_IN_USE: 171*4d7e907cSAndroid Build Coastguard Worker * The maximal number of camera devices that can be 172*4d7e907cSAndroid Build Coastguard Worker * opened concurrently were opened already. 173*4d7e907cSAndroid Build Coastguard Worker * CAMERA_DISCONNECTED: 174*4d7e907cSAndroid Build Coastguard Worker * This external camera device has been disconnected, and is no 175*4d7e907cSAndroid Build Coastguard Worker * longer available. This interface is now stale, and a new instance 176*4d7e907cSAndroid Build Coastguard Worker * must be acquired if the device is reconnected. All subsequent 177*4d7e907cSAndroid Build Coastguard Worker * calls on this interface must return CAMERA_DISCONNECTED. 178*4d7e907cSAndroid Build Coastguard Worker */ 179*4d7e907cSAndroid Build Coastguard Worker open(ICameraDeviceCallback callback) generates (Status status); 180*4d7e907cSAndroid Build Coastguard Worker 181*4d7e907cSAndroid Build Coastguard Worker 182*4d7e907cSAndroid Build Coastguard Worker /***** 183*4d7e907cSAndroid Build Coastguard Worker * All methods below this point must only be called between a successful 184*4d7e907cSAndroid Build Coastguard Worker * open() call and a close() call. 185*4d7e907cSAndroid Build Coastguard Worker */ 186*4d7e907cSAndroid Build Coastguard Worker 187*4d7e907cSAndroid Build Coastguard Worker /** Set the callback interface through which preview frames are sent */ 188*4d7e907cSAndroid Build Coastguard Worker setPreviewWindow(ICameraDevicePreviewCallback window) 189*4d7e907cSAndroid Build Coastguard Worker generates (Status status); 190*4d7e907cSAndroid Build Coastguard Worker 191*4d7e907cSAndroid Build Coastguard Worker /** 192*4d7e907cSAndroid Build Coastguard Worker * Enable a message, or set of messages. 193*4d7e907cSAndroid Build Coastguard Worker * 194*4d7e907cSAndroid Build Coastguard Worker * @param msgType The bitfield of messages to enable. 195*4d7e907cSAndroid Build Coastguard Worker */ 196*4d7e907cSAndroid Build Coastguard Worker enableMsgType(FrameCallbackFlags msgType); 197*4d7e907cSAndroid Build Coastguard Worker 198*4d7e907cSAndroid Build Coastguard Worker /** 199*4d7e907cSAndroid Build Coastguard Worker * Disable a message, or a set of messages. 200*4d7e907cSAndroid Build Coastguard Worker * 201*4d7e907cSAndroid Build Coastguard Worker * Once received a call to disableMsgType(CAMERA_MSG_VIDEO_FRAME), camera 202*4d7e907cSAndroid Build Coastguard Worker * HAL must not rely on its client to call releaseRecordingFrame() to 203*4d7e907cSAndroid Build Coastguard Worker * release video recording frames sent out by the cameral HAL before and 204*4d7e907cSAndroid Build Coastguard Worker * after the disableMsgType(CAMERA_MSG_VIDEO_FRAME) call. Camera HAL 205*4d7e907cSAndroid Build Coastguard Worker * clients must not modify/access any video recording frame after calling 206*4d7e907cSAndroid Build Coastguard Worker * disableMsgType(CAMERA_MSG_VIDEO_FRAME). 207*4d7e907cSAndroid Build Coastguard Worker * 208*4d7e907cSAndroid Build Coastguard Worker * @param msgType The bitfield of messages to disable. 209*4d7e907cSAndroid Build Coastguard Worker */ 210*4d7e907cSAndroid Build Coastguard Worker disableMsgType(FrameCallbackFlags msgType); 211*4d7e907cSAndroid Build Coastguard Worker 212*4d7e907cSAndroid Build Coastguard Worker /** 213*4d7e907cSAndroid Build Coastguard Worker * Query whether a message, or a set of messages, is enabled. Note that 214*4d7e907cSAndroid Build Coastguard Worker * this is operates as an AND, if any of the messages queried are off, this 215*4d7e907cSAndroid Build Coastguard Worker * must return false. 216*4d7e907cSAndroid Build Coastguard Worker * 217*4d7e907cSAndroid Build Coastguard Worker * @param msgType The bitfield of messages to query. 218*4d7e907cSAndroid Build Coastguard Worker * @return enabled Whether all the specified flags are enabled. 219*4d7e907cSAndroid Build Coastguard Worker */ 220*4d7e907cSAndroid Build Coastguard Worker msgTypeEnabled(FrameCallbackFlags msgType) generates (bool enabled); 221*4d7e907cSAndroid Build Coastguard Worker 222*4d7e907cSAndroid Build Coastguard Worker /** 223*4d7e907cSAndroid Build Coastguard Worker * Start preview mode. 224*4d7e907cSAndroid Build Coastguard Worker * 225*4d7e907cSAndroid Build Coastguard Worker * @return status The status code for this operation. 226*4d7e907cSAndroid Build Coastguard Worker */ 227*4d7e907cSAndroid Build Coastguard Worker startPreview() generates (Status status); 228*4d7e907cSAndroid Build Coastguard Worker 229*4d7e907cSAndroid Build Coastguard Worker /** 230*4d7e907cSAndroid Build Coastguard Worker * Stop a previously started preview. 231*4d7e907cSAndroid Build Coastguard Worker */ 232*4d7e907cSAndroid Build Coastguard Worker stopPreview(); 233*4d7e907cSAndroid Build Coastguard Worker 234*4d7e907cSAndroid Build Coastguard Worker /** 235*4d7e907cSAndroid Build Coastguard Worker * Returns true if preview is enabled. 236*4d7e907cSAndroid Build Coastguard Worker * 237*4d7e907cSAndroid Build Coastguard Worker * @return enabled Whether preview is currently enabled. 238*4d7e907cSAndroid Build Coastguard Worker */ 239*4d7e907cSAndroid Build Coastguard Worker previewEnabled() generates (bool enabled); 240*4d7e907cSAndroid Build Coastguard Worker 241*4d7e907cSAndroid Build Coastguard Worker /** 242*4d7e907cSAndroid Build Coastguard Worker * Request the camera HAL to store meta data or real YUV data in the video 243*4d7e907cSAndroid Build Coastguard Worker * buffers sent out via CAMERA_MSG_VIDEO_FRAME for a recording session. If 244*4d7e907cSAndroid Build Coastguard Worker * it is not called, the default camera HAL behavior is to store real YUV 245*4d7e907cSAndroid Build Coastguard Worker * data in the video buffers. 246*4d7e907cSAndroid Build Coastguard Worker * 247*4d7e907cSAndroid Build Coastguard Worker * This method must be called before startRecording() in order to be 248*4d7e907cSAndroid Build Coastguard Worker * effective. 249*4d7e907cSAndroid Build Coastguard Worker * 250*4d7e907cSAndroid Build Coastguard Worker * If meta data is stored in the video buffers, it is up to the receiver of 251*4d7e907cSAndroid Build Coastguard Worker * the video buffers to interpret the contents and to find the actual frame 252*4d7e907cSAndroid Build Coastguard Worker * data with the help of the meta data in the buffer. How this is done is 253*4d7e907cSAndroid Build Coastguard Worker * outside of the scope of this method. 254*4d7e907cSAndroid Build Coastguard Worker * 255*4d7e907cSAndroid Build Coastguard Worker * Some camera HALs may not support storing meta data in the video buffers, 256*4d7e907cSAndroid Build Coastguard Worker * but all camera HALs must support storing real YUV data in the video 257*4d7e907cSAndroid Build Coastguard Worker * buffers. If the camera HAL does not support storing the meta data in the 258*4d7e907cSAndroid Build Coastguard Worker * video buffers when it is requested to do do, INVALID_OPERATION must be 259*4d7e907cSAndroid Build Coastguard Worker * returned. It is very useful for the camera HAL to pass meta data rather 260*4d7e907cSAndroid Build Coastguard Worker * than the actual frame data directly to the video encoder, since the 261*4d7e907cSAndroid Build Coastguard Worker * amount of the uncompressed frame data can be very large if video size is 262*4d7e907cSAndroid Build Coastguard Worker * large. 263*4d7e907cSAndroid Build Coastguard Worker * 264*4d7e907cSAndroid Build Coastguard Worker * @param enable Set to true to instruct the camera HAL to store meta data 265*4d7e907cSAndroid Build Coastguard Worker * in the video buffers; false to instruct the camera HAL to store real 266*4d7e907cSAndroid Build Coastguard Worker * YUV data in the video buffers. 267*4d7e907cSAndroid Build Coastguard Worker * 268*4d7e907cSAndroid Build Coastguard Worker * @return status OK on success. 269*4d7e907cSAndroid Build Coastguard Worker */ 270*4d7e907cSAndroid Build Coastguard Worker storeMetaDataInBuffers(bool enable) generates (Status status); 271*4d7e907cSAndroid Build Coastguard Worker 272*4d7e907cSAndroid Build Coastguard Worker /** 273*4d7e907cSAndroid Build Coastguard Worker * Start record mode. 274*4d7e907cSAndroid Build Coastguard Worker * 275*4d7e907cSAndroid Build Coastguard Worker * When a record image is available, a CAMERA_MSG_VIDEO_FRAME message is 276*4d7e907cSAndroid Build Coastguard Worker * sent with the corresponding frame. Every record frame must be released by 277*4d7e907cSAndroid Build Coastguard Worker * a camera HAL client via releaseRecordingFrame() before the client calls 278*4d7e907cSAndroid Build Coastguard Worker * disableMsgType(CAMERA_MSG_VIDEO_FRAME). After the client calls 279*4d7e907cSAndroid Build Coastguard Worker * disableMsgType(CAMERA_MSG_VIDEO_FRAME), it is the camera HAL's 280*4d7e907cSAndroid Build Coastguard Worker * responsibility to manage the life-cycle of the video recording frames, 281*4d7e907cSAndroid Build Coastguard Worker * and the client must not modify/access any video recording frames. 282*4d7e907cSAndroid Build Coastguard Worker * 283*4d7e907cSAndroid Build Coastguard Worker * @return status The status code for the operation. 284*4d7e907cSAndroid Build Coastguard Worker */ 285*4d7e907cSAndroid Build Coastguard Worker startRecording() generates (Status status); 286*4d7e907cSAndroid Build Coastguard Worker 287*4d7e907cSAndroid Build Coastguard Worker /** 288*4d7e907cSAndroid Build Coastguard Worker * Stop a previously started recording. 289*4d7e907cSAndroid Build Coastguard Worker */ 290*4d7e907cSAndroid Build Coastguard Worker stopRecording(); 291*4d7e907cSAndroid Build Coastguard Worker 292*4d7e907cSAndroid Build Coastguard Worker /** 293*4d7e907cSAndroid Build Coastguard Worker * Returns true if recording is enabled. 294*4d7e907cSAndroid Build Coastguard Worker * 295*4d7e907cSAndroid Build Coastguard Worker * @return enabled True if recording is currently active. 296*4d7e907cSAndroid Build Coastguard Worker */ 297*4d7e907cSAndroid Build Coastguard Worker recordingEnabled() generates (bool enabled); 298*4d7e907cSAndroid Build Coastguard Worker 299*4d7e907cSAndroid Build Coastguard Worker /** 300*4d7e907cSAndroid Build Coastguard Worker * Release a record frame previously returned by CAMERA_MSG_VIDEO_FRAME in 301*4d7e907cSAndroid Build Coastguard Worker * dataCallbackTimestamp. 302*4d7e907cSAndroid Build Coastguard Worker * 303*4d7e907cSAndroid Build Coastguard Worker * It is camera HAL client's responsibility to release video recording 304*4d7e907cSAndroid Build Coastguard Worker * frames sent out by the camera HAL before the camera HAL receives a call 305*4d7e907cSAndroid Build Coastguard Worker * to disableMsgType(CAMERA_MSG_VIDEO_FRAME). After it receives the call to 306*4d7e907cSAndroid Build Coastguard Worker * disableMsgType(CAMERA_MSG_VIDEO_FRAME), it is the camera HAL's 307*4d7e907cSAndroid Build Coastguard Worker * responsibility to manage the life-cycle of the video recording frames. 308*4d7e907cSAndroid Build Coastguard Worker * 309*4d7e907cSAndroid Build Coastguard Worker * @param memId The memory buffer to release a recording frame from. 310*4d7e907cSAndroid Build Coastguard Worker * @param bufferIndex The specific buffer index to return to the HAL. 311*4d7e907cSAndroid Build Coastguard Worker */ 312*4d7e907cSAndroid Build Coastguard Worker releaseRecordingFrame(MemoryId memId, uint32_t bufferIndex); 313*4d7e907cSAndroid Build Coastguard Worker 314*4d7e907cSAndroid Build Coastguard Worker /** 315*4d7e907cSAndroid Build Coastguard Worker * Release a record frame previously returned by CAMERA_MSG_VIDEO_FRAME in 316*4d7e907cSAndroid Build Coastguard Worker * handleCallbackTimestamp. 317*4d7e907cSAndroid Build Coastguard Worker * 318*4d7e907cSAndroid Build Coastguard Worker * It is camera HAL client's responsibility to release video recording 319*4d7e907cSAndroid Build Coastguard Worker * frames sent out by the camera HAL before the camera HAL receives a call 320*4d7e907cSAndroid Build Coastguard Worker * to disableMsgType(CAMERA_MSG_VIDEO_FRAME). After it receives the call to 321*4d7e907cSAndroid Build Coastguard Worker * disableMsgType(CAMERA_MSG_VIDEO_FRAME), it is the camera HAL's 322*4d7e907cSAndroid Build Coastguard Worker * responsibility to manage the life-cycle of the video recording frames. 323*4d7e907cSAndroid Build Coastguard Worker * 324*4d7e907cSAndroid Build Coastguard Worker * @param memId The memory buffer to release a recording frame from. 325*4d7e907cSAndroid Build Coastguard Worker * @param bufferIndex The specific buffer index to return to the HAL. 326*4d7e907cSAndroid Build Coastguard Worker * @param frame The handle for a released video frame 327*4d7e907cSAndroid Build Coastguard Worker */ 328*4d7e907cSAndroid Build Coastguard Worker releaseRecordingFrameHandle(MemoryId memId, uint32_t bufferIndex, handle frame); 329*4d7e907cSAndroid Build Coastguard Worker 330*4d7e907cSAndroid Build Coastguard Worker /** 331*4d7e907cSAndroid Build Coastguard Worker * Release a batch of record frames previously returned by CAMERA_MSG_VIDEO_FRAME 332*4d7e907cSAndroid Build Coastguard Worker * in handleCallbackTimestampBatch. 333*4d7e907cSAndroid Build Coastguard Worker * 334*4d7e907cSAndroid Build Coastguard Worker * It is camera HAL client's responsibility to release video recording 335*4d7e907cSAndroid Build Coastguard Worker * frames sent out by the camera HAL before the camera HAL receives a call 336*4d7e907cSAndroid Build Coastguard Worker * to disableMsgType(CAMERA_MSG_VIDEO_FRAME). After it receives the call to 337*4d7e907cSAndroid Build Coastguard Worker * disableMsgType(CAMERA_MSG_VIDEO_FRAME), it is the camera HAL's 338*4d7e907cSAndroid Build Coastguard Worker * responsibility to manage the life-cycle of the video recording frames. 339*4d7e907cSAndroid Build Coastguard Worker * 340*4d7e907cSAndroid Build Coastguard Worker * @param batch A batch of recording frames to be released by camera HAL. 341*4d7e907cSAndroid Build Coastguard Worker */ 342*4d7e907cSAndroid Build Coastguard Worker releaseRecordingFrameHandleBatch(vec<VideoFrameMessage> batch); 343*4d7e907cSAndroid Build Coastguard Worker 344*4d7e907cSAndroid Build Coastguard Worker /** 345*4d7e907cSAndroid Build Coastguard Worker * Start auto focus. 346*4d7e907cSAndroid Build Coastguard Worker * 347*4d7e907cSAndroid Build Coastguard Worker * The notification callback routine is called with 348*4d7e907cSAndroid Build Coastguard Worker * CAMERA_MSG_FOCUS once when focusing is complete. autoFocus() can be 349*4d7e907cSAndroid Build Coastguard Worker * called again after that if another auto focus is needed. 350*4d7e907cSAndroid Build Coastguard Worker * 351*4d7e907cSAndroid Build Coastguard Worker * @return status The status code for this operation. 352*4d7e907cSAndroid Build Coastguard Worker */ 353*4d7e907cSAndroid Build Coastguard Worker autoFocus() generates (Status status); 354*4d7e907cSAndroid Build Coastguard Worker 355*4d7e907cSAndroid Build Coastguard Worker /** 356*4d7e907cSAndroid Build Coastguard Worker * Cancels auto-focus function. 357*4d7e907cSAndroid Build Coastguard Worker * 358*4d7e907cSAndroid Build Coastguard Worker * If the auto-focus is still in progress, this function must cancel 359*4d7e907cSAndroid Build Coastguard Worker * it. Whether the auto-focus is in progress or not, this function must 360*4d7e907cSAndroid Build Coastguard Worker * return the focus position to the default. If the camera does not support 361*4d7e907cSAndroid Build Coastguard Worker * auto-focus, this is a no-op. 362*4d7e907cSAndroid Build Coastguard Worker * 363*4d7e907cSAndroid Build Coastguard Worker * @return status The status code for this operation. 364*4d7e907cSAndroid Build Coastguard Worker */ 365*4d7e907cSAndroid Build Coastguard Worker cancelAutoFocus() generates (Status status); 366*4d7e907cSAndroid Build Coastguard Worker 367*4d7e907cSAndroid Build Coastguard Worker /** 368*4d7e907cSAndroid Build Coastguard Worker * Take a picture. 369*4d7e907cSAndroid Build Coastguard Worker * 370*4d7e907cSAndroid Build Coastguard Worker * @return status The status code for this operation. 371*4d7e907cSAndroid Build Coastguard Worker */ 372*4d7e907cSAndroid Build Coastguard Worker takePicture() generates (Status status); 373*4d7e907cSAndroid Build Coastguard Worker 374*4d7e907cSAndroid Build Coastguard Worker /** 375*4d7e907cSAndroid Build Coastguard Worker * Cancel a picture that was started with takePicture. Calling this method 376*4d7e907cSAndroid Build Coastguard Worker * when no picture is being taken is a no-op. 377*4d7e907cSAndroid Build Coastguard Worker * 378*4d7e907cSAndroid Build Coastguard Worker * @return status The status code for this operation. 379*4d7e907cSAndroid Build Coastguard Worker */ 380*4d7e907cSAndroid Build Coastguard Worker cancelPicture() generates (Status status); 381*4d7e907cSAndroid Build Coastguard Worker 382*4d7e907cSAndroid Build Coastguard Worker /** 383*4d7e907cSAndroid Build Coastguard Worker * Set the camera parameters. 384*4d7e907cSAndroid Build Coastguard Worker * 385*4d7e907cSAndroid Build Coastguard Worker * @param params The parameter string, consisting of 386*4d7e907cSAndroid Build Coastguard Worker * '<key1>=<value1>; ...;<keyN>=<valueN>'. 387*4d7e907cSAndroid Build Coastguard Worker * @return status The status code for this operation: 388*4d7e907cSAndroid Build Coastguard Worker * OK: Parameter update was successful 389*4d7e907cSAndroid Build Coastguard Worker * ILLEGAL_ARGUMENT: At least one parameter was invalid or not supported 390*4d7e907cSAndroid Build Coastguard Worker * 391*4d7e907cSAndroid Build Coastguard Worker */ 392*4d7e907cSAndroid Build Coastguard Worker setParameters(string params) generates (Status status); 393*4d7e907cSAndroid Build Coastguard Worker 394*4d7e907cSAndroid Build Coastguard Worker /** 395*4d7e907cSAndroid Build Coastguard Worker * Retrieve the camera parameters. 396*4d7e907cSAndroid Build Coastguard Worker */ 397*4d7e907cSAndroid Build Coastguard Worker getParameters() generates (string parms); 398*4d7e907cSAndroid Build Coastguard Worker 399*4d7e907cSAndroid Build Coastguard Worker /** 400*4d7e907cSAndroid Build Coastguard Worker * Send command to camera driver. 401*4d7e907cSAndroid Build Coastguard Worker * The meaning of the arguments is defined by the value of cmd, documented 402*4d7e907cSAndroid Build Coastguard Worker * in the CommandType definition. 403*4d7e907cSAndroid Build Coastguard Worker * 404*4d7e907cSAndroid Build Coastguard Worker * @param cmd The command to invoke. 405*4d7e907cSAndroid Build Coastguard Worker * @param arg1 The first argument for the command, if needed. 406*4d7e907cSAndroid Build Coastguard Worker * @param arg2 The second argument for the command, if needed. 407*4d7e907cSAndroid Build Coastguard Worker * 408*4d7e907cSAndroid Build Coastguard Worker * @return status The status code for this operation. 409*4d7e907cSAndroid Build Coastguard Worker */ 410*4d7e907cSAndroid Build Coastguard Worker sendCommand(CommandType cmd, int32_t arg1, int32_t arg2) 411*4d7e907cSAndroid Build Coastguard Worker generates (Status status); 412*4d7e907cSAndroid Build Coastguard Worker 413*4d7e907cSAndroid Build Coastguard Worker /** 414*4d7e907cSAndroid Build Coastguard Worker * Release the hardware resources owned by this object, shutting down the 415*4d7e907cSAndroid Build Coastguard Worker * camera device. 416*4d7e907cSAndroid Build Coastguard Worker */ 417*4d7e907cSAndroid Build Coastguard Worker close(); 418*4d7e907cSAndroid Build Coastguard Worker 419*4d7e907cSAndroid Build Coastguard Worker}; 420