| /* | |
| * 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. | |
| */ | |
| #define LOG_TAG "android.hardware.camera.device@3.4-convert-impl" | |
| #include <log/log.h> | |
| #include "convert.h" | |
| #include <aidl/android/hardware/graphics/common/BufferUsage.h> | |
| #include <aidl/android/hardware/graphics/common/PixelFormat.h> | |
| #include <hardware/camera_common.h> | |
| namespace android { | |
| namespace hardware { | |
| namespace camera { | |
| namespace device { | |
| namespace implementation { | |
| using ::aidl::android::hardware::camera::device::ErrorCode; | |
| using ::aidl::android::hardware::camera::device::ErrorMsg; | |
| using ::aidl::android::hardware::camera::device::ShutterMsg; | |
| using ::aidl::android::hardware::graphics::common::BufferUsage; | |
| using ::aidl::android::hardware::graphics::common::PixelFormat; | |
| void convertToAidl(const camera_metadata_t* src, CameraMetadata* dest) { | |
| if (src == nullptr) { | |
| return; | |
| } | |
| size_t size = get_camera_metadata_size(src); | |
| auto* src_start = (uint8_t*)src; | |
| uint8_t* src_end = src_start + size; | |
| dest->metadata.assign(src_start, src_end); | |
| } | |
| bool convertFromAidl(const CameraMetadata& src, const camera_metadata_t** dst) { | |
| const std::vector<uint8_t>& metadata = src.metadata; | |
| if (metadata.empty()) { | |
| // Special case for null metadata | |
| *dst = nullptr; | |
| return true; | |
| } | |
| const uint8_t* data = metadata.data(); | |
| // check that the size of CameraMetadata match underlying camera_metadata_t | |
| if (get_camera_metadata_size((camera_metadata_t*)data) != metadata.size()) { | |
| ALOGE("%s: input CameraMetadata is corrupt!", __FUNCTION__); | |
| return false; | |
| } | |
| *dst = (camera_metadata_t*)data; | |
| return true; | |
| } | |
| } // namespace implementation | |
| } // namespace device | |
| } // namespace camera | |
| } // namespace hardware | |
| } // namespace android |