1*4d7e907cSAndroid Build Coastguard Worker /*
2*4d7e907cSAndroid Build Coastguard Worker * Copyright (C) 2022 The Android Open Source Project
3*4d7e907cSAndroid Build Coastguard Worker *
4*4d7e907cSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*4d7e907cSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*4d7e907cSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*4d7e907cSAndroid Build Coastguard Worker *
8*4d7e907cSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*4d7e907cSAndroid Build Coastguard Worker *
10*4d7e907cSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*4d7e907cSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*4d7e907cSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*4d7e907cSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*4d7e907cSAndroid Build Coastguard Worker * limitations under the License.
15*4d7e907cSAndroid Build Coastguard Worker */
16*4d7e907cSAndroid Build Coastguard Worker
17*4d7e907cSAndroid Build Coastguard Worker #define LOG_TAG "[email protected]"
18*4d7e907cSAndroid Build Coastguard Worker #include <log/log.h>
19*4d7e907cSAndroid Build Coastguard Worker
20*4d7e907cSAndroid Build Coastguard Worker #include "convert.h"
21*4d7e907cSAndroid Build Coastguard Worker
22*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/graphics/common/BufferUsage.h>
23*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/graphics/common/PixelFormat.h>
24*4d7e907cSAndroid Build Coastguard Worker #include <hardware/camera_common.h>
25*4d7e907cSAndroid Build Coastguard Worker
26*4d7e907cSAndroid Build Coastguard Worker namespace android {
27*4d7e907cSAndroid Build Coastguard Worker namespace hardware {
28*4d7e907cSAndroid Build Coastguard Worker namespace camera {
29*4d7e907cSAndroid Build Coastguard Worker namespace device {
30*4d7e907cSAndroid Build Coastguard Worker namespace implementation {
31*4d7e907cSAndroid Build Coastguard Worker
32*4d7e907cSAndroid Build Coastguard Worker using ::aidl::android::hardware::camera::device::ErrorCode;
33*4d7e907cSAndroid Build Coastguard Worker using ::aidl::android::hardware::camera::device::ErrorMsg;
34*4d7e907cSAndroid Build Coastguard Worker using ::aidl::android::hardware::camera::device::ShutterMsg;
35*4d7e907cSAndroid Build Coastguard Worker using ::aidl::android::hardware::graphics::common::BufferUsage;
36*4d7e907cSAndroid Build Coastguard Worker using ::aidl::android::hardware::graphics::common::PixelFormat;
37*4d7e907cSAndroid Build Coastguard Worker
convertToAidl(const camera_metadata_t * src,CameraMetadata * dest)38*4d7e907cSAndroid Build Coastguard Worker void convertToAidl(const camera_metadata_t* src, CameraMetadata* dest) {
39*4d7e907cSAndroid Build Coastguard Worker if (src == nullptr) {
40*4d7e907cSAndroid Build Coastguard Worker return;
41*4d7e907cSAndroid Build Coastguard Worker }
42*4d7e907cSAndroid Build Coastguard Worker
43*4d7e907cSAndroid Build Coastguard Worker size_t size = get_camera_metadata_size(src);
44*4d7e907cSAndroid Build Coastguard Worker auto* src_start = (uint8_t*)src;
45*4d7e907cSAndroid Build Coastguard Worker uint8_t* src_end = src_start + size;
46*4d7e907cSAndroid Build Coastguard Worker dest->metadata.assign(src_start, src_end);
47*4d7e907cSAndroid Build Coastguard Worker }
48*4d7e907cSAndroid Build Coastguard Worker
convertFromAidl(const CameraMetadata & src,const camera_metadata_t ** dst)49*4d7e907cSAndroid Build Coastguard Worker bool convertFromAidl(const CameraMetadata& src, const camera_metadata_t** dst) {
50*4d7e907cSAndroid Build Coastguard Worker const std::vector<uint8_t>& metadata = src.metadata;
51*4d7e907cSAndroid Build Coastguard Worker if (metadata.empty()) {
52*4d7e907cSAndroid Build Coastguard Worker // Special case for null metadata
53*4d7e907cSAndroid Build Coastguard Worker *dst = nullptr;
54*4d7e907cSAndroid Build Coastguard Worker return true;
55*4d7e907cSAndroid Build Coastguard Worker }
56*4d7e907cSAndroid Build Coastguard Worker
57*4d7e907cSAndroid Build Coastguard Worker const uint8_t* data = metadata.data();
58*4d7e907cSAndroid Build Coastguard Worker // check that the size of CameraMetadata match underlying camera_metadata_t
59*4d7e907cSAndroid Build Coastguard Worker if (get_camera_metadata_size((camera_metadata_t*)data) != metadata.size()) {
60*4d7e907cSAndroid Build Coastguard Worker ALOGE("%s: input CameraMetadata is corrupt!", __FUNCTION__);
61*4d7e907cSAndroid Build Coastguard Worker return false;
62*4d7e907cSAndroid Build Coastguard Worker }
63*4d7e907cSAndroid Build Coastguard Worker *dst = (camera_metadata_t*)data;
64*4d7e907cSAndroid Build Coastguard Worker return true;
65*4d7e907cSAndroid Build Coastguard Worker }
66*4d7e907cSAndroid Build Coastguard Worker
67*4d7e907cSAndroid Build Coastguard Worker } // namespace implementation
68*4d7e907cSAndroid Build Coastguard Worker } // namespace device
69*4d7e907cSAndroid Build Coastguard Worker } // namespace camera
70*4d7e907cSAndroid Build Coastguard Worker } // namespace hardware
71*4d7e907cSAndroid Build Coastguard Worker } // namespace android
72