diff options
author | Jayant Chowdhary <jchowdhary@google.com> | 2022-05-13 09:56:34 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2022-05-13 09:56:34 +0000 |
commit | 269e488b8f455c3b0ea52d83b1743b261129dcd8 (patch) | |
tree | 25bf30c3cc9e1a59b53516c2bb694d3060b96c08 | |
parent | cb0f95c29d405e233fa654a043e89cc840029a70 (diff) | |
parent | eca91ca443e8902342758a138ced62a4ab4256da (diff) | |
download | media-269e488b8f455c3b0ea52d83b1743b261129dcd8.tar.gz |
Merge "camera: Generate vndk version to tag mapping." into tm-dev
-rwxr-xr-x | camera/docs/metadata-generate | 4 | ||||
-rw-r--r-- | camera/docs/metadata_helpers.py | 49 | ||||
-rw-r--r-- | camera/docs/vndk_camera_metadata_tags.mako | 54 |
3 files changed, 107 insertions, 0 deletions
diff --git a/camera/docs/metadata-generate b/camera/docs/metadata-generate index ed892f21..3a2a0004 100755 --- a/camera/docs/metadata-generate +++ b/camera/docs/metadata-generate @@ -42,6 +42,7 @@ ctsdir="$ANDROID_BUILD_TOP/cts/tests/camera/src/android/hardware/camera2/cts" outdir="$ANDROID_PRODUCT_OUT/obj/ETC/system-media-camera-docs_intermediates" ndk_header_dir="$ANDROID_BUILD_TOP/frameworks/av/camera/ndk/include/camera" ndk_impl_dir="$ANDROID_BUILD_TOP/frameworks/av/camera/ndk/impl" +libcameraservice_hidl_dir="$ANDROID_BUILD_TOP/frameworks/av/services/camera/libcameraservice/hidl" device_info_dir="$ANDROID_BUILD_TOP/cts/tools/cts-device-info/"` `"src/com/android/cts/deviceinfo" out_files=() @@ -233,6 +234,9 @@ gen_file camera_metadata_tag_info.mako ../src/camera_metadata_tag_info.c || exit gen_file camera_metadata_tags.mako ../include/system/camera_metadata_tags.h || exit 1 gen_file camera_metadata_asserts.mako ../src/camera_metadata_asserts.cpp || exit 1 +#Generate tags with vndk versions for filtering +gen_file_abs vndk_camera_metadata_tags.mako "$libcameraservice_hidl_dir/VndkVersionMetadataTags.h" yes || exit 1 + #Generate NDK header gen_file_abs ndk_camera_metadata_tags.mako "$ndk_header_dir/NdkCameraMetadataTags.h" yes || exit 1 diff --git a/camera/docs/metadata_helpers.py b/camera/docs/metadata_helpers.py index 5e3fdda1..e3034f3e 100644 --- a/camera/docs/metadata_helpers.py +++ b/camera/docs/metadata_helpers.py @@ -36,6 +36,11 @@ IMAGE_SRC_METADATA="images/camera2/metadata/" JAVADOC_IMAGE_SRC_METADATA="/reference/" + IMAGE_SRC_METADATA NDKDOC_IMAGE_SRC_METADATA="../" + IMAGE_SRC_METADATA +#Corresponds to Android Q, where the camera VNDK was added (minor version 4 and vndk version 29). +# Minor version and vndk version must correspond to the same release +FRAMEWORK_CAMERA_VNDK_HAL_MINOR_VERSION = 4 +FRAMEWORK_CAMERA_VNDK_STARTING_VERSION = 29 + _context_buf = None _enum = None @@ -1360,6 +1365,50 @@ def remove_synthetic_or_fwk_only(entries): """ return (e for e in entries if not (e.synthetic or e.visibility == 'fwk_only')) +""" + Return the vndk version for a given hal minor version. The major version is assumed to be 3 + + Args: + hal_minor_version : minor version to retrieve the vndk version for + + Yields: + int representing the vndk version + """ +def get_vndk_version(hal_minor_version): + if hal_minor_version <= FRAMEWORK_CAMERA_VNDK_HAL_MINOR_VERSION: + return 0 + return hal_minor_version - FRAMEWORK_CAMERA_VNDK_HAL_MINOR_VERSION \ + + FRAMEWORK_CAMERA_VNDK_STARTING_VERSION + +""" + Returns an api level -> dict of metadata tags corresponding to the api level + + Args: + sections : metadata sections to create the mapping for + metadata: the metadata structure to be used to create the mapping + kind : kind of entries to create a mapping for : 'static' or 'dynamic' + + Yields: + A dictionary mapping api level to a dictionary of metadata tags for the particular key (api level) + """ +def get_api_level_to_keys(sections, metadata, kind): + api_level_to_keys = {} + for sec in sections: + for idx,entry in enumerate(remove_synthetic(find_unique_entries(sec))): + if entry._hal_minor_version > FRAMEWORK_CAMERA_VNDK_HAL_MINOR_VERSION and \ + metadata.is_entry_this_kind(entry, kind): + api_level = get_vndk_version(entry._hal_minor_version) + try: + api_level_to_keys[api_level].add(entry.name) + except KeyError: + api_level_to_keys[api_level] = {entry.name} + #Insert the keys in sorted order since dicts in python (< 3.7, even OrderedDicts don't actually + # sort keys) + api_level_to_keys_ordered = OrderedDict() + for api_level_ordered in sorted(api_level_to_keys.keys()): + api_level_to_keys_ordered[api_level_ordered] = api_level_to_keys[api_level_ordered] + return api_level_to_keys_ordered + def remove_synthetic(entries): """ Filter the given entries by removing those that are synthetic. diff --git a/camera/docs/vndk_camera_metadata_tags.mako b/camera/docs/vndk_camera_metadata_tags.mako new file mode 100644 index 00000000..625e9b08 --- /dev/null +++ b/camera/docs/vndk_camera_metadata_tags.mako @@ -0,0 +1,54 @@ +## -*- coding: utf-8 -*- +/* + * Copyright (C) 2022 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. + */ + +#include <map> +#include <vector> +#pragma once +/** + * ! Do not edit this file directly ! + * + * Generated automatically from vndk_camera_metadata_tags.mako. To be included in libcameraservice + * only by hidl/Utils.cpp. + */ + +/** + * API level to static keys mapping. To be used for filtering out keys depending on vndk version + * used by vendor clients. + */ +std::map<int, std::vector<camera_metadata_tag>> static_api_level_to_keys{ + %for api_level, keys in get_api_level_to_keys(find_all_sections(metadata), metadata, 'static').items(): + {${api_level}, { + %for idx, key in enumerate(keys): + ${key |csym}, + %endfor + } }, + %endfor +}; + +/** + * API level to dynamic keys mapping. To be used for filtering out keys depending on vndk version + * used by vendor clients. + */ +std::map<int, std::vector<camera_metadata_tag>> dynamic_api_level_to_keys{ + %for api_level, keys in get_api_level_to_keys(find_all_sections(metadata), metadata, 'dynamic').items(): + {${api_level}, { + %for idx, key in enumerate(keys): + ${key |csym}, + %endfor + } }, + %endfor +}; |