1 /*
2 * Copyright (c) 2023-2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #ifndef OHOS_CAMERA_METADATA_COMMON_UTILS_H
17 #define OHOS_CAMERA_METADATA_COMMON_UTILS_H
18
19 #include <stdint.h>
20 #include "camera_metadata_operator.h"
21 #include "camera_output_capability.h"
22 #include "camera_stream_info_parse.h"
23 #include "metadata_utils.h"
24
25 namespace OHOS {
26 namespace CameraStandard {
27 class MetadataCommonUtils {
28 private:
29 explicit MetadataCommonUtils() = default;
30
31 public:
32 static std::shared_ptr<camera_metadata_item_t> GetCapabilityEntry(
33 const std::shared_ptr<OHOS::Camera::CameraMetadata> metadata, uint32_t metadataTag);
34
35 static std::shared_ptr<vector<Size>> GetSupportedPreviewSizeRange(const int32_t modeName,
36 camera_format_t targetFormat, const std::shared_ptr<OHOS::Camera::CameraMetadata> metadata);
37
38 static std::shared_ptr<OHOS::Camera::CameraMetadata> CopyMetadata(
39 const std::shared_ptr<OHOS::Camera::CameraMetadata> srcMetadata);
40 };
41
42 template<typename T>
AddOrUpdateMetadata(common_metadata_header_t * src,uint32_t tag,const T * data,uint32_t dataCount)43 bool AddOrUpdateMetadata(common_metadata_header_t* src, uint32_t tag, const T* data, uint32_t dataCount)
44 {
45 if (src == nullptr) {
46 return false;
47 }
48 uint32_t index = 0;
49 int ret = OHOS::Camera::CameraMetadata::FindCameraMetadataItemIndex(src, tag, &index, false);
50 if (ret == CAM_META_SUCCESS) {
51 ret = OHOS::Camera::CameraMetadata::UpdateCameraMetadataItemByIndex(src, index, data, dataCount, nullptr);
52 } else if (ret == CAM_META_ITEM_NOT_FOUND) {
53 ret = OHOS::Camera::CameraMetadata::AddCameraMetadataItem(src, tag, data, dataCount);
54 }
55 return ret == CAM_META_SUCCESS;
56 }
57
58 template<typename T>
AddOrUpdateMetadata(std::shared_ptr<OHOS::Camera::CameraMetadata> & metadata,uint32_t tag,const T * data,uint32_t dataCount)59 bool AddOrUpdateMetadata(
60 std::shared_ptr<OHOS::Camera::CameraMetadata>& metadata, uint32_t tag, const T* data, uint32_t dataCount)
61 {
62 common_metadata_header_t* src = metadata->get();
63 if (src == nullptr) {
64 return false;
65 }
66
67 uint32_t index = 0;
68 int ret = OHOS::Camera::CameraMetadata::FindCameraMetadataItemIndex(src, tag, &index);
69 if (ret == CAM_META_SUCCESS) {
70 ret = OHOS::Camera::CameraMetadata::UpdateCameraMetadataItemByIndex(src, index, data, dataCount, nullptr);
71 } else if (ret == CAM_META_ITEM_NOT_FOUND) {
72 // addEntry can resize if need
73 return metadata->addEntry(tag, data, dataCount);
74 }
75 return ret == CAM_META_SUCCESS;
76 }
77
78 std::shared_ptr<camera_metadata_item_t> GetMetadataItem(const common_metadata_header_t* src, uint32_t tag);
79
80 std::vector<float> ParsePhysicalApertureRangeByMode(const camera_metadata_item_t &item, const int32_t modeName);
81 } // namespace CameraStandard
82 } // namespace OHOS
83 #endif // OHOS_CAMERA_METADATA_COMMON_UTILS_H