| <html devsite> | |
| <head> | |
| <title>Metadata and Controls</title> | |
| <meta name="project_path" value="/_project.yaml" /> | |
| <meta name="book_path" value="/_book.yaml" /> | |
| </head> | |
| <body> | |
| <!-- | |
| Copyright 2017 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. | |
| --> | |
| <h2 id="metadata">Metadata support</h2> | |
| <p> To support the saving of raw image files by the Android framework, substantial | |
| metadata is required about the sensor's characteristics. This includes | |
| information such as color spaces and lens shading functions.</p> | |
| <p>Most of this information is a static property of the camera subsystem and can | |
| therefore be queried before configuring any output pipelines or submitting any | |
| requests. The new camera APIs greatly expand the information provided by the | |
| getCameraInfo() method to provide this information to the application.</p> | |
| <p>In addition, manual control of the camera subsystem requires feedback from the | |
| assorted devices about their current state, and the actual parameters used in | |
| capturing a given frame. The actual values of the controls (exposure time, frame | |
| duration, and sensitivity) as actually used by the hardware must be included in | |
| the output metadata. This is essential so that applications know when either | |
| clamping or rounding took place, and so that the application can compensate for | |
| the real settings used for image capture.</p> | |
| <p>For example, if an application sets frame duration to 0 in a request, the HAL | |
| must clamp the frame duration to the real minimum frame duration for that | |
| request, and report that clamped minimum duration in the output result metadata.</p> | |
| <p>So if an application needs to implement a custom 3A routine (for example, to | |
| properly meter for an HDR burst), it needs to know the settings used to capture | |
| the latest set of results it has received in order to update the settings for | |
| the next request. Therefore, the new camera API adds a substantial amount of | |
| dynamic metadata to each captured frame. This includes the requested and actual | |
| parameters used for the capture, as well as additional per-frame metadata such | |
| as timestamps and statistics generator output.</p> | |
| <h2 id="per-setting">Per-setting control</h2> | |
| <p> For most settings, the expectation is that they can be changed every frame, | |
| without introducing significant stutter or delay to the output frame stream. | |
| Ideally, the output frame rate should solely be controlled by the capture | |
| request's frame duration field, and be independent of any changes to processing | |
| blocks' configuration. In reality, some specific controls are known to be slow | |
| to change; these include the output resolution and output format of the camera | |
| pipeline, as well as controls that affect physical devices, such as lens focus | |
| distance. The exact requirements for each control set are detailed later.</p> | |
| <h2 id="raw-sensor">Raw sensor data support</h2> | |
| <p>In addition to the pixel formats supported by | |
| the old API, the new API adds a requirement for support for raw sensor data | |
| (Bayer RAW), both for advanced camera applications as well as to support raw | |
| image files.</p> | |
| </body> | |
| </html> |