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