1/* 2 * Copyright (C) 2019 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package [email protected]; 18 19import [email protected]::Status; 20import @3.5::ICameraDeviceSession; 21import @3.5::StreamConfiguration; 22import ICameraOfflineSession; 23 24/** 25 * Camera device active session interface. 26 * 27 * Obtained via ICameraDevice::open(), this interface contains the methods to 28 * configure and request captures from an active camera device. 29 */ 30interface ICameraDeviceSession extends @3.5::ICameraDeviceSession { 31 /** 32 * configureStreams_3_6: 33 * 34 * Identical to @3.5::ICameraDeviceSession.configureStreams, except that: 35 * 36 * - a boolean supportOffline is added to HalStreamConfiguration to indicate 37 * if this stream can be switched to offline mode later. 38 * 39 * @return status Status code for the operation, one of: 40 * OK: 41 * On successful stream configuration. 42 * INTERNAL_ERROR: 43 * If there has been a fatal error and the device is no longer 44 * operational. Only close() can be called successfully by the 45 * framework after this error is returned. 46 * ILLEGAL_ARGUMENT: 47 * If the requested stream configuration is invalid. Some examples 48 * of invalid stream configurations include: 49 * - Including more than 1 INPUT stream 50 * - Not including any OUTPUT streams 51 * - Including streams with unsupported formats, or an unsupported 52 * size for that format. 53 * - Including too many output streams of a certain format. 54 * - Unsupported rotation configuration 55 * - Stream sizes/formats don't satisfy the 56 * StreamConfigurationMode requirements 57 * for non-NORMAL mode, or the requested operation_mode is not 58 * supported by the HAL. 59 * - Unsupported usage flag 60 * The camera service cannot filter out all possible illegal stream 61 * configurations, since some devices may support more simultaneous 62 * streams or larger stream resolutions than the minimum required 63 * for a given camera device hardware level. The HAL must return an 64 * ILLEGAL_ARGUMENT for any unsupported stream set, and then be 65 * ready to accept a future valid stream configuration in a later 66 * configureStreams call. 67 * @return halConfiguration The stream parameters desired by the HAL for 68 * each stream, including maximum buffers, the usage flags, and the 69 * override format. 70 */ 71 configureStreams_3_6(@3.5::StreamConfiguration requestedConfiguration) 72 generates (Status status, HalStreamConfiguration halConfiguration); 73 74 /** 75 * switchToOffline: 76 * 77 * Switch the current running session from actively streaming mode to the 78 * offline mode. See ICameraOfflineSession for more details. 79 * 80 * The streamsToKeep argument contains list of streams IDs where application 81 * still needs its output. For all streams application does not need anymore, 82 * camera HAL can send ERROR_BUFFER to speed up the transition, or even send 83 * ERROR_REQUEST if all output targets of a request is not needed. By the 84 * time this call returns, camera HAL must have returned all buffers coming 85 * from streams no longer needed and have erased buffer caches of such streams. 86 * 87 * For all requests that are going to be transferred to offline session, 88 * the ICameraDeviceSession is responsible to capture all input buffers from 89 * the image sensor before the switchToOffline call returns. Before 90 * switchToOffline returns, camera HAL must have completed all requests not 91 * switching to offline mode, and collected information on what streams and 92 * requests are going to continue in the offline session, in the 93 * offlineSessionInfo output argument. 94 * 95 * If there are no requests qualified to be transferred to offline session, 96 * the camera HAL must return a null ICameraOfflineSession object with OK 97 * status. In this scenario, the camera HAL still must flush all inflight 98 * requests and unconfigure all streams before returning this call. 99 * 100 * After switchToOffline returns, the ICameraDeviceSession must be back to 101 * unconfigured state as if it is just created and no streams are configured. 102 * Also, camera HAL must not call any methods in ICameraDeviceCallback since 103 * all unfinished requests are now transferred to the offline session. 104 * After the call returns, camera service may then call close to close 105 * the camera device, or call configureStream* again to reconfigure the 106 * camera and then send new capture requests with processCaptureRequest. In 107 * the latter case, it is legitimate for camera HAL to call methods in 108 * ICameraDeviceCallback again in response to the newly submitted capture 109 * requests. 110 * 111 * @return status Status code for the operation, one of: 112 * OK: 113 * On switching to offline session and unconfiguring streams 114 * successfully. 115 * ILLEGAL_ARGUMENT: 116 * If camera does not support offline mode in any one of streams 117 * in streamsToKeep argument. Note that the camera HAL must report 118 * if a stream supports offline mode in HalStreamConfiguration 119 * output of configureStreams_3_6 method. If all streams in 120 * streamsToKeep argument support offline mode, then the camera HAL 121 * must not return this error. 122 * 123 * 124 * @return offlineSessionInfo Information on what streams and requests will 125 * be transferred to offline session to continue processing. 126 * 127 * @return offlineSession The offline session object camera service will use 128 * to interact with. 129 */ 130 switchToOffline(vec<int32_t> streamsToKeep) generates (Status status, 131 CameraOfflineSessionInfo offlineSessionInfo, ICameraOfflineSession offlineSession); 132}; 133