xref: /aosp_15_r20/hardware/interfaces/camera/device/default/convert.cpp (revision 4d7e907c777eeecc4c5bd7cf640a754fac206ff7)
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