xref: /aosp_15_r20/hardware/interfaces/neuralnetworks/aidl/utils/include/nnapi/hal/aidl/Conversions.h (revision 4d7e907c777eeecc4c5bd7cf640a754fac206ff7)
1 /*
2  * Copyright (C) 2021 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 #ifndef ANDROID_HARDWARE_INTERFACES_NEURALNETWORKS_AIDL_CONVERSIONS_H
18 #define ANDROID_HARDWARE_INTERFACES_NEURALNETWORKS_AIDL_CONVERSIONS_H
19 
20 #include <aidl/android/hardware/neuralnetworks/BufferDesc.h>
21 #include <aidl/android/hardware/neuralnetworks/BufferRole.h>
22 #include <aidl/android/hardware/neuralnetworks/Capabilities.h>
23 #include <aidl/android/hardware/neuralnetworks/DataLocation.h>
24 #include <aidl/android/hardware/neuralnetworks/DeviceType.h>
25 #include <aidl/android/hardware/neuralnetworks/ErrorStatus.h>
26 #include <aidl/android/hardware/neuralnetworks/ExecutionPreference.h>
27 #include <aidl/android/hardware/neuralnetworks/Extension.h>
28 #include <aidl/android/hardware/neuralnetworks/ExtensionNameAndPrefix.h>
29 #include <aidl/android/hardware/neuralnetworks/ExtensionOperandTypeInformation.h>
30 #include <aidl/android/hardware/neuralnetworks/IDevice.h>
31 #include <aidl/android/hardware/neuralnetworks/Memory.h>
32 #include <aidl/android/hardware/neuralnetworks/Model.h>
33 #include <aidl/android/hardware/neuralnetworks/Operand.h>
34 #include <aidl/android/hardware/neuralnetworks/OperandExtraParams.h>
35 #include <aidl/android/hardware/neuralnetworks/OperandLifeTime.h>
36 #include <aidl/android/hardware/neuralnetworks/OperandPerformance.h>
37 #include <aidl/android/hardware/neuralnetworks/OperandType.h>
38 #include <aidl/android/hardware/neuralnetworks/Operation.h>
39 #include <aidl/android/hardware/neuralnetworks/OperationType.h>
40 #include <aidl/android/hardware/neuralnetworks/OutputShape.h>
41 #include <aidl/android/hardware/neuralnetworks/PerformanceInfo.h>
42 #include <aidl/android/hardware/neuralnetworks/Priority.h>
43 #include <aidl/android/hardware/neuralnetworks/Request.h>
44 #include <aidl/android/hardware/neuralnetworks/RequestArgument.h>
45 #include <aidl/android/hardware/neuralnetworks/RequestMemoryPool.h>
46 #include <aidl/android/hardware/neuralnetworks/Subgraph.h>
47 #include <aidl/android/hardware/neuralnetworks/SymmPerChannelQuantParams.h>
48 #include <aidl/android/hardware/neuralnetworks/Timing.h>
49 
50 #ifdef NN_AIDL_V4_OR_ABOVE
51 #include <aidl/android/hardware/neuralnetworks/TokenValuePair.h>
52 #endif  // NN_AIDL_V4_OR_ABOVE
53 
54 #include <android/binder_auto_utils.h>
55 #include <nnapi/Result.h>
56 #include <nnapi/Types.h>
57 #include <nnapi/hal/CommonUtils.h>
58 
59 #include <vector>
60 
61 namespace android::nn {
62 
63 GeneralResult<OperandType> unvalidatedConvert(const aidl_hal::OperandType& operandType);
64 GeneralResult<OperationType> unvalidatedConvert(const aidl_hal::OperationType& operationType);
65 GeneralResult<DeviceType> unvalidatedConvert(const aidl_hal::DeviceType& deviceType);
66 GeneralResult<Priority> unvalidatedConvert(const aidl_hal::Priority& priority);
67 GeneralResult<Capabilities> unvalidatedConvert(const aidl_hal::Capabilities& capabilities);
68 GeneralResult<Capabilities::OperandPerformance> unvalidatedConvert(
69         const aidl_hal::OperandPerformance& operandPerformance);
70 GeneralResult<Capabilities::PerformanceInfo> unvalidatedConvert(
71         const aidl_hal::PerformanceInfo& performanceInfo);
72 GeneralResult<DataLocation> unvalidatedConvert(const aidl_hal::DataLocation& location);
73 GeneralResult<Operand> unvalidatedConvert(const aidl_hal::Operand& operand);
74 GeneralResult<Operand::ExtraParams> unvalidatedConvert(
75         const std::optional<aidl_hal::OperandExtraParams>& optionalExtraParams);
76 GeneralResult<Operand::LifeTime> unvalidatedConvert(
77         const aidl_hal::OperandLifeTime& operandLifeTime);
78 GeneralResult<Operand::SymmPerChannelQuantParams> unvalidatedConvert(
79         const aidl_hal::SymmPerChannelQuantParams& symmPerChannelQuantParams);
80 GeneralResult<Operation> unvalidatedConvert(const aidl_hal::Operation& operation);
81 GeneralResult<Model> unvalidatedConvert(const aidl_hal::Model& model);
82 GeneralResult<ExtensionNameAndPrefix> unvalidatedConvert(
83         const aidl_hal::ExtensionNameAndPrefix& extensionNameAndPrefix);
84 GeneralResult<Model::OperandValues> unvalidatedConvert(const std::vector<uint8_t>& operandValues);
85 GeneralResult<Model::Subgraph> unvalidatedConvert(const aidl_hal::Subgraph& subgraph);
86 GeneralResult<OutputShape> unvalidatedConvert(const aidl_hal::OutputShape& outputShape);
87 GeneralResult<MeasureTiming> unvalidatedConvert(bool measureTiming);
88 GeneralResult<SharedMemory> unvalidatedConvert(const aidl_hal::Memory& memory);
89 GeneralResult<Timing> unvalidatedConvert(const aidl_hal::Timing& timing);
90 GeneralResult<BufferDesc> unvalidatedConvert(const aidl_hal::BufferDesc& bufferDesc);
91 GeneralResult<BufferRole> unvalidatedConvert(const aidl_hal::BufferRole& bufferRole);
92 GeneralResult<Request> unvalidatedConvert(const aidl_hal::Request& request);
93 GeneralResult<Request::Argument> unvalidatedConvert(
94         const aidl_hal::RequestArgument& requestArgument);
95 GeneralResult<Request::MemoryPool> unvalidatedConvert(
96         const aidl_hal::RequestMemoryPool& memoryPool);
97 GeneralResult<ErrorStatus> unvalidatedConvert(const aidl_hal::ErrorStatus& errorStatus);
98 GeneralResult<ExecutionPreference> unvalidatedConvert(
99         const aidl_hal::ExecutionPreference& executionPreference);
100 GeneralResult<Extension> unvalidatedConvert(const aidl_hal::Extension& extension);
101 GeneralResult<Extension::OperandTypeInformation> unvalidatedConvert(
102         const aidl_hal::ExtensionOperandTypeInformation& operandTypeInformation);
103 GeneralResult<SharedHandle> unvalidatedConvert(const ndk::ScopedFileDescriptor& handle);
104 
105 #ifdef NN_AIDL_V4_OR_ABOVE
106 GeneralResult<TokenValuePair> unvalidatedConvert(const aidl_hal::TokenValuePair& tokenValuePair);
107 #endif  // NN_AIDL_V4_OR_ABOVE
108 
109 GeneralResult<std::vector<Operation>> unvalidatedConvert(
110         const std::vector<aidl_hal::Operation>& operations);
111 
112 GeneralResult<Capabilities> convert(const aidl_hal::Capabilities& capabilities);
113 GeneralResult<DeviceType> convert(const aidl_hal::DeviceType& deviceType);
114 GeneralResult<ErrorStatus> convert(const aidl_hal::ErrorStatus& errorStatus);
115 GeneralResult<ExecutionPreference> convert(
116         const aidl_hal::ExecutionPreference& executionPreference);
117 GeneralResult<SharedMemory> convert(const aidl_hal::Memory& memory);
118 GeneralResult<Model> convert(const aidl_hal::Model& model);
119 GeneralResult<OperandType> convert(const aidl_hal::OperandType& operandType);
120 GeneralResult<Priority> convert(const aidl_hal::Priority& priority);
121 GeneralResult<Request> convert(const aidl_hal::Request& request);
122 GeneralResult<Timing> convert(const aidl_hal::Timing& timing);
123 GeneralResult<SharedHandle> convert(const ndk::ScopedFileDescriptor& handle);
124 GeneralResult<BufferDesc> convert(const aidl_hal::BufferDesc& bufferDesc);
125 
126 GeneralResult<std::vector<Extension>> convert(const std::vector<aidl_hal::Extension>& extension);
127 GeneralResult<std::vector<SharedMemory>> convert(const std::vector<aidl_hal::Memory>& memories);
128 GeneralResult<std::vector<ExtensionNameAndPrefix>> convert(
129         const std::vector<aidl_hal::ExtensionNameAndPrefix>& extensionNameAndPrefix);
130 
131 #ifdef NN_AIDL_V4_OR_ABOVE
132 GeneralResult<std::vector<TokenValuePair>> convert(
133         const std::vector<aidl_hal::TokenValuePair>& metaData);
134 #endif  // NN_AIDL_V4_OR_ABOVE
135 
136 GeneralResult<std::vector<OutputShape>> convert(
137         const std::vector<aidl_hal::OutputShape>& outputShapes);
138 GeneralResult<std::vector<SharedHandle>> convert(
139         const std::vector<ndk::ScopedFileDescriptor>& handles);
140 GeneralResult<std::vector<BufferRole>> convert(const std::vector<aidl_hal::BufferRole>& roles);
141 
142 GeneralResult<std::vector<uint32_t>> toUnsigned(const std::vector<int32_t>& vec);
143 
144 }  // namespace android::nn
145 
146 namespace aidl::android::hardware::neuralnetworks::utils {
147 
148 namespace nn = ::android::nn;
149 
150 nn::GeneralResult<std::vector<uint8_t>> unvalidatedConvert(const nn::CacheToken& cacheToken);
151 nn::GeneralResult<BufferDesc> unvalidatedConvert(const nn::BufferDesc& bufferDesc);
152 nn::GeneralResult<BufferRole> unvalidatedConvert(const nn::BufferRole& bufferRole);
153 nn::GeneralResult<DeviceType> unvalidatedConvert(const nn::DeviceType& deviceType);
154 nn::GeneralResult<bool> unvalidatedConvert(const nn::MeasureTiming& measureTiming);
155 nn::GeneralResult<Memory> unvalidatedConvert(const nn::SharedMemory& memory);
156 nn::GeneralResult<OutputShape> unvalidatedConvert(const nn::OutputShape& outputShape);
157 nn::GeneralResult<ErrorStatus> unvalidatedConvert(const nn::ErrorStatus& errorStatus);
158 nn::GeneralResult<ExecutionPreference> unvalidatedConvert(
159         const nn::ExecutionPreference& executionPreference);
160 nn::GeneralResult<OperandType> unvalidatedConvert(const nn::OperandType& operandType);
161 nn::GeneralResult<OperandLifeTime> unvalidatedConvert(const nn::Operand::LifeTime& operandLifeTime);
162 nn::GeneralResult<DataLocation> unvalidatedConvert(const nn::DataLocation& location);
163 nn::GeneralResult<std::optional<OperandExtraParams>> unvalidatedConvert(
164         const nn::Operand::ExtraParams& extraParams);
165 nn::GeneralResult<Operand> unvalidatedConvert(const nn::Operand& operand);
166 nn::GeneralResult<OperationType> unvalidatedConvert(const nn::OperationType& operationType);
167 nn::GeneralResult<Operation> unvalidatedConvert(const nn::Operation& operation);
168 nn::GeneralResult<Subgraph> unvalidatedConvert(const nn::Model::Subgraph& subgraph);
169 nn::GeneralResult<std::vector<uint8_t>> unvalidatedConvert(
170         const nn::Model::OperandValues& operandValues);
171 nn::GeneralResult<ExtensionNameAndPrefix> unvalidatedConvert(
172         const nn::ExtensionNameAndPrefix& extensionNameToPrefix);
173 nn::GeneralResult<Model> unvalidatedConvert(const nn::Model& model);
174 nn::GeneralResult<Priority> unvalidatedConvert(const nn::Priority& priority);
175 nn::GeneralResult<Request> unvalidatedConvert(const nn::Request& request);
176 nn::GeneralResult<RequestArgument> unvalidatedConvert(const nn::Request::Argument& requestArgument);
177 nn::GeneralResult<RequestMemoryPool> unvalidatedConvert(const nn::Request::MemoryPool& memoryPool);
178 nn::GeneralResult<Timing> unvalidatedConvert(const nn::Timing& timing);
179 nn::GeneralResult<int64_t> unvalidatedConvert(const nn::OptionalDuration& optionalDuration);
180 nn::GeneralResult<int64_t> unvalidatedConvert(const nn::OptionalTimePoint& optionalTimePoint);
181 nn::GeneralResult<ndk::ScopedFileDescriptor> unvalidatedConvert(const nn::SyncFence& syncFence);
182 nn::GeneralResult<ndk::ScopedFileDescriptor> unvalidatedConvert(const nn::SharedHandle& handle);
183 nn::GeneralResult<Capabilities> unvalidatedConvert(const nn::Capabilities& capabilities);
184 nn::GeneralResult<Extension> unvalidatedConvert(const nn::Extension& extension);
185 
186 #ifdef NN_AIDL_V4_OR_ABOVE
187 nn::GeneralResult<TokenValuePair> unvalidatedConvert(const nn::TokenValuePair& tokenValuePair);
188 #endif  // NN_AIDL_V4_OR_ABOVE
189 
190 nn::GeneralResult<std::vector<uint8_t>> convert(const nn::CacheToken& cacheToken);
191 nn::GeneralResult<BufferDesc> convert(const nn::BufferDesc& bufferDesc);
192 nn::GeneralResult<DeviceType> convert(const nn::DeviceType& deviceType);
193 nn::GeneralResult<bool> convert(const nn::MeasureTiming& measureTiming);
194 nn::GeneralResult<Memory> convert(const nn::SharedMemory& memory);
195 nn::GeneralResult<ErrorStatus> convert(const nn::ErrorStatus& errorStatus);
196 nn::GeneralResult<ExecutionPreference> convert(const nn::ExecutionPreference& executionPreference);
197 nn::GeneralResult<Model> convert(const nn::Model& model);
198 nn::GeneralResult<Priority> convert(const nn::Priority& priority);
199 nn::GeneralResult<Request> convert(const nn::Request& request);
200 nn::GeneralResult<Timing> convert(const nn::Timing& timing);
201 nn::GeneralResult<int64_t> convert(const nn::OptionalDuration& optionalDuration);
202 nn::GeneralResult<int64_t> convert(const nn::OptionalTimePoint& optionalTimePoint);
203 nn::GeneralResult<Capabilities> convert(const nn::Capabilities& capabilities);
204 nn::GeneralResult<Extension> convert(const nn::Extension& extension);
205 
206 nn::GeneralResult<std::vector<BufferRole>> convert(const std::vector<nn::BufferRole>& bufferRoles);
207 nn::GeneralResult<std::vector<OutputShape>> convert(
208         const std::vector<nn::OutputShape>& outputShapes);
209 nn::GeneralResult<std::vector<ndk::ScopedFileDescriptor>> convert(
210         const std::vector<nn::SharedHandle>& handles);
211 nn::GeneralResult<std::vector<ndk::ScopedFileDescriptor>> convert(
212         const std::vector<nn::SyncFence>& syncFences);
213 nn::GeneralResult<std::vector<Extension>> convert(const std::vector<nn::Extension>& extensions);
214 nn::GeneralResult<std::vector<ExtensionNameAndPrefix>> convert(
215         const std::vector<nn::ExtensionNameAndPrefix>& extensionNameToPrefix);
216 
217 #ifdef NN_AIDL_V4_OR_ABOVE
218 nn::GeneralResult<std::vector<TokenValuePair>> convert(
219         const std::vector<nn::TokenValuePair>& metaData);
220 #endif  // NN_AIDL_V4_OR_ABOVE
221 
222 nn::GeneralResult<std::vector<int32_t>> toSigned(const std::vector<uint32_t>& vec);
223 std::vector<uint8_t> toVec(const std::array<uint8_t, IDevice::BYTE_SIZE_OF_CACHE_TOKEN>& token);
224 
225 }  // namespace aidl::android::hardware::neuralnetworks::utils
226 
227 #endif  // ANDROID_HARDWARE_INTERFACES_NEURALNETWORKS_AIDL_CONVERSIONS_H
228