mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 11:36:00 +00:00
Camera: add OFFLINE_PROCESSING APIs
Also a typo fix in metadata doc. Test: N/A. New API skeleton, no implementation yet. Bug: 135142453 Change-Id: I4852ee28242afabe81b02cfef39994c5d2705359
This commit is contained in:
24
camera/device/3.6/Android.bp
Normal file
24
camera/device/3.6/Android.bp
Normal file
@@ -0,0 +1,24 @@
|
||||
// This file is autogenerated by hidl-gen -Landroidbp.
|
||||
|
||||
hidl_interface {
|
||||
name: "android.hardware.camera.device@3.6",
|
||||
root: "android.hardware",
|
||||
vndk: {
|
||||
enabled: true,
|
||||
},
|
||||
srcs: [
|
||||
"types.hal",
|
||||
"ICameraDeviceSession.hal",
|
||||
"ICameraOfflineSession.hal",
|
||||
],
|
||||
interfaces: [
|
||||
"android.hardware.camera.common@1.0",
|
||||
"android.hardware.camera.device@3.2",
|
||||
"android.hardware.camera.device@3.3",
|
||||
"android.hardware.camera.device@3.4",
|
||||
"android.hardware.camera.device@3.5",
|
||||
"android.hardware.graphics.common@1.0",
|
||||
"android.hidl.base@1.0",
|
||||
],
|
||||
gen_java: false,
|
||||
}
|
||||
132
camera/device/3.6/ICameraDeviceSession.hal
Normal file
132
camera/device/3.6/ICameraDeviceSession.hal
Normal file
@@ -0,0 +1,132 @@
|
||||
/*
|
||||
* Copyright (C) 2019 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.hardware.camera.device@3.6;
|
||||
|
||||
import android.hardware.camera.common@1.0::Status;
|
||||
import @3.5::ICameraDeviceSession;
|
||||
import @3.5::StreamConfiguration;
|
||||
import ICameraOfflineSession;
|
||||
|
||||
/**
|
||||
* Camera device active session interface.
|
||||
*
|
||||
* Obtained via ICameraDevice::open(), this interface contains the methods to
|
||||
* configure and request captures from an active camera device.
|
||||
*/
|
||||
interface ICameraDeviceSession extends @3.5::ICameraDeviceSession {
|
||||
/**
|
||||
* configureStreams_3_6:
|
||||
*
|
||||
* Identical to @3.5::ICameraDeviceSession.configureStreams, except that:
|
||||
*
|
||||
* - a boolean supportOffline is added to HalStreamConfiguration to indicate
|
||||
* if this stream can be switched to offline mode later.
|
||||
*
|
||||
* @return status Status code for the operation, one of:
|
||||
* OK:
|
||||
* On successful stream configuration.
|
||||
* INTERNAL_ERROR:
|
||||
* If there has been a fatal error and the device is no longer
|
||||
* operational. Only close() can be called successfully by the
|
||||
* framework after this error is returned.
|
||||
* ILLEGAL_ARGUMENT:
|
||||
* If the requested stream configuration is invalid. Some examples
|
||||
* of invalid stream configurations include:
|
||||
* - Including more than 1 INPUT stream
|
||||
* - Not including any OUTPUT streams
|
||||
* - Including streams with unsupported formats, or an unsupported
|
||||
* size for that format.
|
||||
* - Including too many output streams of a certain format.
|
||||
* - Unsupported rotation configuration
|
||||
* - Stream sizes/formats don't satisfy the
|
||||
* StreamConfigurationMode requirements
|
||||
* for non-NORMAL mode, or the requested operation_mode is not
|
||||
* supported by the HAL.
|
||||
* - Unsupported usage flag
|
||||
* The camera service cannot filter out all possible illegal stream
|
||||
* configurations, since some devices may support more simultaneous
|
||||
* streams or larger stream resolutions than the minimum required
|
||||
* for a given camera device hardware level. The HAL must return an
|
||||
* ILLEGAL_ARGUMENT for any unsupported stream set, and then be
|
||||
* ready to accept a future valid stream configuration in a later
|
||||
* configureStreams call.
|
||||
* @return halConfiguration The stream parameters desired by the HAL for
|
||||
* each stream, including maximum buffers, the usage flags, and the
|
||||
* override format.
|
||||
*/
|
||||
configureStreams_3_6(@3.5::StreamConfiguration requestedConfiguration)
|
||||
generates (Status status, HalStreamConfiguration halConfiguration);
|
||||
|
||||
/**
|
||||
* switchToOffline:
|
||||
*
|
||||
* Switch the current running session from actively streaming mode to the
|
||||
* offline mode. See ICameraOfflineSession for more details.
|
||||
*
|
||||
* The streamsToKeep argument contains list of streams IDs where application
|
||||
* still needs its output. For all streams application does not need anymore,
|
||||
* camera HAL can send ERROR_BUFFER to speed up the transition, or even send
|
||||
* ERROR_REQUEST if all output targets of a request is not needed. By the
|
||||
* time this call returns, camera HAL must have returned all buffers coming
|
||||
* from streams no longer needed and have erased buffer caches of such streams.
|
||||
*
|
||||
* For all requests that are going to be transferred to offline session,
|
||||
* the ICameraDeviceSession is responsible to capture all input buffers from
|
||||
* the image sensor before the switchToOffline call returns. Before
|
||||
* switchToOffline returns, camera HAL must have completed all requests not
|
||||
* switching to offline mode, and collected information on what streams and
|
||||
* requests are going to continue in the offline session, in the
|
||||
* offlineSessionInfo output argument.
|
||||
*
|
||||
* If there are no requests qualified to be transferred to offline session,
|
||||
* the camera HAL must return a null ICameraOfflineSession object with OK
|
||||
* status. In this scenario, the camera HAL still must flush all inflight
|
||||
* requests and unconfigure all streams before returning this call.
|
||||
*
|
||||
* After switchToOffline returns, the ICameraDeviceSession must be back to
|
||||
* unconfigured state as if it is just created and no streams are configured.
|
||||
* Also, camera HAL must not call any methods in ICameraDeviceCallback since
|
||||
* all unfinished requests are now transferred to the offline session.
|
||||
* After the call returns, camera service may then call close to close
|
||||
* the camera device, or call configureStream* again to reconfigure the
|
||||
* camera and then send new capture requests with processCaptureRequest. In
|
||||
* the latter case, it is legitimate for camera HAL to call methods in
|
||||
* ICameraDeviceCallback again in response to the newly submitted capture
|
||||
* requests.
|
||||
*
|
||||
* @return status Status code for the operation, one of:
|
||||
* OK:
|
||||
* On switching to offline session and unconfiguring streams
|
||||
* successfully.
|
||||
* ILLEGAL_ARGUMENT:
|
||||
* If camera does not support offline mode in any one of streams
|
||||
* in streamsToKeep argument. Note that the camera HAL must report
|
||||
* if a stream supports offline mode in HalStreamConfiguration
|
||||
* output of configureStreams_3_6 method. If all streams in
|
||||
* streamsToKeep argument support offline mode, then the camera HAL
|
||||
* must not return this error.
|
||||
*
|
||||
*
|
||||
* @return offlineSessionInfo Information on what streams and requests will
|
||||
* be transferred to offline session to continue processing.
|
||||
*
|
||||
* @return offlineSession The offline session object camera service will use
|
||||
* to interact with.
|
||||
*/
|
||||
switchToOffline(vec<int32_t> streamsToKeep) generates (Status status,
|
||||
CameraOfflineSessionInfo offlineSessionInfo, ICameraOfflineSession offlineSession);
|
||||
};
|
||||
80
camera/device/3.6/ICameraOfflineSession.hal
Normal file
80
camera/device/3.6/ICameraOfflineSession.hal
Normal file
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
* Copyright (C) 2019 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.hardware.camera.device@3.6;
|
||||
|
||||
import @3.5::ICameraDeviceCallback;
|
||||
|
||||
/**
|
||||
* Camera device offline session interface.
|
||||
*
|
||||
* Obtained via ICameraDeviceSession::switchToOffline(), this interface contains
|
||||
* the methods and callback interfaces that define how camera service interacts
|
||||
* with an offline session.
|
||||
*
|
||||
* An offline session contains some unfinished capture requests that were submitted
|
||||
* to the parent ICameraDeviceSession before calling switchToOffline, and is
|
||||
* responsible for delivering these capture results back to camera service regardless
|
||||
* of whether the parent camera device is still opened or not. An offline session must
|
||||
* not have access to the camera device's image sensor. During switchToOffline
|
||||
* call, camera HAL must capture all necessary frames from the image sensor that
|
||||
* is needed for completing the requests offline later.
|
||||
*/
|
||||
interface ICameraOfflineSession {
|
||||
/**
|
||||
* Set the callbacks for offline session to communicate with camera service.
|
||||
*
|
||||
* Offline session is responsible to store all callbacks the camera HAL
|
||||
* generated after the return of ICameraDeviceSession::switchToOffline, and
|
||||
* send them to camera service once this method is called.
|
||||
*
|
||||
* Camera service must not call this method more than once, so these
|
||||
* callbacks can be assumed to be constant after the first setCallback call.
|
||||
*/
|
||||
setCallback(ICameraDeviceCallback cb);
|
||||
|
||||
/**
|
||||
* getCaptureResultMetadataQueue:
|
||||
*
|
||||
* Retrieves the queue used along with
|
||||
* ICameraDeviceCallback#processCaptureResult.
|
||||
*
|
||||
* Clients to ICameraOfflineSession must:
|
||||
* - Call getCaptureRequestMetadataQueue to retrieve the fast message queue;
|
||||
* - In implementation of ICameraDeviceCallback, test whether
|
||||
* .fmqResultSize field is zero.
|
||||
* - If .fmqResultSize != 0, read result metadata from the fast message
|
||||
* queue;
|
||||
* - otherwise, read result metadata in CaptureResult.result.
|
||||
*
|
||||
* @return queue the queue that implementation writes result metadata to.
|
||||
*/
|
||||
getCaptureResultMetadataQueue() generates (fmq_sync<uint8_t> queue);
|
||||
|
||||
/**
|
||||
* Close the offline session and release all resources.
|
||||
*
|
||||
* Camera service may call this method before or after the offline session
|
||||
* has finished all requests it needs to handle. If there are still unfinished
|
||||
* requests when close is called, camera HAL must send ERROR_REQUEST for
|
||||
* all unfinished requests and return all buffers via
|
||||
* ICameraDeviceCallback#processCaptureResult or
|
||||
* ICameraDeviceCallback#returnStreamBuffers.
|
||||
* Also, all buffer caches maintained by the offline session must be erased
|
||||
* before the close call returns.
|
||||
*/
|
||||
close();
|
||||
};
|
||||
143
camera/device/3.6/types.hal
Normal file
143
camera/device/3.6/types.hal
Normal file
@@ -0,0 +1,143 @@
|
||||
/*
|
||||
* Copyright (C) 2019 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.hardware.camera.device@3.6;
|
||||
|
||||
import @3.2::BufferCache;
|
||||
import @3.4::HalStream;
|
||||
|
||||
/**
|
||||
* OfflineRequest:
|
||||
*
|
||||
* Information about a capture request being switched to offline mode via the
|
||||
* ICameraDeviceSession#switchToOffline method.
|
||||
*
|
||||
*/
|
||||
struct OfflineRequest {
|
||||
/**
|
||||
* Must match a inflight CaptureRequest sent by camera service
|
||||
*/
|
||||
uint32_t frameNumber;
|
||||
|
||||
/**
|
||||
* Stream IDs for outputs that will be returned via ICameraDeviceCallback.
|
||||
* The stream ID must be within one of offline stream listed in
|
||||
* CameraOfflineSessionInfo.
|
||||
* Camera service will validate these pending buffers are matching camera
|
||||
* service's record to make sure no buffers are leaked during the
|
||||
* switchToOffline call.
|
||||
*/
|
||||
vec<int32_t> pendingStreams;
|
||||
};
|
||||
|
||||
/**
|
||||
* OfflineStream:
|
||||
*
|
||||
* Information about a stream being switched to offline mode via the
|
||||
* ICameraDeviceSession#switchToOffline method.
|
||||
*
|
||||
*/
|
||||
struct OfflineStream {
|
||||
/**
|
||||
* IDs of a stream to be transferred to offline session.
|
||||
*
|
||||
* For devices that do not support HAL buffer management, this must be
|
||||
* one of stream ID listed in streamsToKeep argument of the
|
||||
* switchToOffline call.
|
||||
* For devices that support HAL buffer management, this could be any stream
|
||||
* that was configured right before calling switchToOffline.
|
||||
*/
|
||||
int32_t id;
|
||||
|
||||
/**
|
||||
* Number of outstanding buffers that will be returned via offline session
|
||||
*/
|
||||
uint32_t numOutstandingBuffers;
|
||||
|
||||
/**
|
||||
* Buffer ID of buffers currently cached between camera service and this
|
||||
* stream, which may or may not be owned by the camera HAL right now.
|
||||
* See StreamBuffer#bufferId for more details.
|
||||
*/
|
||||
vec<uint64_t> circulatingBufferIds;
|
||||
};
|
||||
|
||||
/**
|
||||
* CameraOfflineSessionInfo:
|
||||
*
|
||||
* Information about pending outputs that's being transferred to an offline
|
||||
* session from an active session using the
|
||||
* ICameraDeviceSession#switchToOffline method.
|
||||
*
|
||||
*/
|
||||
struct CameraOfflineSessionInfo {
|
||||
/**
|
||||
* Information on what streams will be preserved in offline session.
|
||||
* Streams not listed here will be removed by camera service after
|
||||
* switchToOffline call returns.
|
||||
*/
|
||||
vec<OfflineStream> offlineStreams;
|
||||
|
||||
/**
|
||||
* Information for requests that will be handled by offline session
|
||||
* Camera service will validate this matches what camera service has on
|
||||
* record.
|
||||
*/
|
||||
vec<OfflineRequest> offlineRequests;
|
||||
};
|
||||
|
||||
/**
|
||||
* HalStream:
|
||||
*
|
||||
* The camera HAL's response to each requested stream configuration.
|
||||
*
|
||||
* This version extends the @3.4 HalStream with the physicalCameraId
|
||||
* field
|
||||
*/
|
||||
struct HalStream {
|
||||
/**
|
||||
* The definition of HalStream from the prior version.
|
||||
*/
|
||||
@3.4::HalStream v3_4;
|
||||
|
||||
/**
|
||||
* Whether this stream can be switch to offline mode.
|
||||
*
|
||||
* For devices that does not support the OFFLINE_PROCESSING capability, this
|
||||
* fields will always be false.
|
||||
*
|
||||
* For devices support the OFFLINE_PROCESSING capability: any input stream
|
||||
* and any output stream that can be output of the input stream must set
|
||||
* this field to true. Also any stream of YUV420_888 format or JPEG format,
|
||||
* with CPU_READ usage flag, must set this field to true. All other streams
|
||||
* are up to camera HAL to advertise support or not, though it is not
|
||||
* recommended to list support for streams with hardware composer or video
|
||||
* encoder usage flags as these streams tend to be targeted continuously and
|
||||
* can lead to long latency when trying to switch to offline.
|
||||
*
|
||||
*/
|
||||
bool supportOffline;
|
||||
};
|
||||
|
||||
/**
|
||||
* HalStreamConfiguration:
|
||||
*
|
||||
* Identical to @3.4::HalStreamConfiguration, except that it contains @3.6::HalStream entries.
|
||||
*
|
||||
*/
|
||||
struct HalStreamConfiguration {
|
||||
vec<HalStream> streams;
|
||||
};
|
||||
@@ -410,7 +410,7 @@ enum CameraMetadataTag : uint32_t {
|
||||
*
|
||||
* <p>List of the maximum number of regions that can be used for metering in
|
||||
* auto-exposure (AE), auto-white balance (AWB), and auto-focus (AF);
|
||||
* this corresponds to the the maximum number of elements in
|
||||
* this corresponds to the maximum number of elements in
|
||||
* ANDROID_CONTROL_AE_REGIONS, ANDROID_CONTROL_AWB_REGIONS,
|
||||
* and ANDROID_CONTROL_AF_REGIONS.</p>
|
||||
*
|
||||
|
||||
@@ -16,4 +16,3 @@ hidl_interface {
|
||||
],
|
||||
gen_java: true,
|
||||
}
|
||||
|
||||
|
||||
@@ -71,4 +71,5 @@ enum CameraMetadataEnumAndroidControlBokehMode : uint32_t {
|
||||
enum CameraMetadataEnumAndroidRequestAvailableCapabilities :
|
||||
@3.4::CameraMetadataEnumAndroidRequestAvailableCapabilities {
|
||||
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SYSTEM_CAMERA,
|
||||
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_OFFLINE_PROCESSING,
|
||||
};
|
||||
|
||||
@@ -585,6 +585,8 @@ c3ec182ce325862b7d79e526f3e170c02cfee1497ed309d7c60d0de4ca636b0b android.hardwar
|
||||
f5bc6aa840db933cb9fd36668b06d3e2021cf5384bb70e459f22e2f2f921fba5 android.hardware.automotive.evs@1.0::IEvsEnumerator
|
||||
d3a344b7bd4c0d2658ae7209f55a979b8f53f361fd00f4fca29d5baa56d11fd2 android.hardware.automotive.evs@1.0::types
|
||||
2410dd02d67786a732d36e80b0f8ccf55086604ef37f9838e2013ff2c571e404 android.hardware.camera.device@3.5::types
|
||||
cd06a7911b9acd4a653bbf7133888878fbcb3f84be177c7a3f1becaae3d8618f android.hardware.camera.metadata@3.2::types
|
||||
2bdc6baf3f80f7a87fb5a5d03599e2ee37aadd3dbb107b7c9c060657702942a8 android.hardware.camera.metadata@3.5::types
|
||||
b69a7615c508acf5c5201efd1bfa3262167874fc3594e2db5a3ff93addd8ac75 android.hardware.keymaster@4.0::IKeymasterDevice
|
||||
eb2fa0c883c2185d514be0b84c179b283753ef0c1b77b45b4f359bd23bba8b75 android.hardware.neuralnetworks@1.0::IPreparedModel
|
||||
f1109cbb10297b7429a11fab42afa912710b303c9bf20bd5cdb8bd57b9c84186 android.hardware.neuralnetworks@1.0::types
|
||||
|
||||
Reference in New Issue
Block a user