summaryrefslogtreecommitdiff
path: root/runtimes/nn/runtime/NeuralNetworks.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'runtimes/nn/runtime/NeuralNetworks.cpp')
-rw-r--r--runtimes/nn/runtime/NeuralNetworks.cpp489
1 files changed, 0 insertions, 489 deletions
diff --git a/runtimes/nn/runtime/NeuralNetworks.cpp b/runtimes/nn/runtime/NeuralNetworks.cpp
deleted file mode 100644
index 6ef2c91bc..000000000
--- a/runtimes/nn/runtime/NeuralNetworks.cpp
+++ /dev/null
@@ -1,489 +0,0 @@
-/*
- * Copyright (c) 2018 Samsung Electronics Co., Ltd. All Rights Reserved
- * Copyright (C) 2017 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.
- */
-
-// Contains all the entry points to the C Neural Networks API.
-// We do basic validation of the operands and then call the class
-// that implements the functionality.
-
-#include "NeuralNetworks.h"
-#include "Callbacks.h"
-#if 0 // TODO-NNRT : If we consider OEM operations, it will enable.
-#include "NeuralNetworksOEM.h"
-#endif
-#include "CompilationBuilder.h"
-#include "ExecutionBuilder.h"
-#include "ModelBuilder.h"
-#include "Memory.h"
-
-#include <memory>
-
-// Make sure the constants defined in the header files have not changed values.
-// IMPORTANT: When adding new values, update kNumberOfDataTypes or kNumberOfDataTypesOEM
-// in Utils.h.
-static_assert(ANEURALNETWORKS_FLOAT32 == 0, "ANEURALNETWORKS_FLOAT32 has changed");
-static_assert(ANEURALNETWORKS_INT32 == 1, "ANEURALNETWORKS_INT32 has changed");
-static_assert(ANEURALNETWORKS_UINT32 == 2, "ANEURALNETWORKS_UINT32 has changed");
-static_assert(ANEURALNETWORKS_TENSOR_FLOAT32 == 3,
- "ANEURALNETWORKS_TENSOR_FLOAT32 has changed");
-static_assert(ANEURALNETWORKS_TENSOR_INT32 == 4, "ANEURALNETWORKS_TENSOR_INT32 has changed");
-static_assert(ANEURALNETWORKS_TENSOR_QUANT8_ASYMM == 5,
- "ANEURALNETWORKS_TENSOR_QUANT8_ASYMM has changed");
-#if 0 // TODO-NNRT : If we consider OEM operations, it will enable.
-static_assert(ANEURALNETWORKS_OEM_SCALAR == 10000, "ANEURALNETWORKS_OEM_SCALAR has changed");
-static_assert(ANEURALNETWORKS_TENSOR_OEM_BYTE == 10001,
- "ANEURALNETWORKS_TENSOR_OEM_BYTE has changed");
-#endif
-// IMPORTANT: When adding new values, update kNumberOfOperationTypes or
-// kNumberOfOperationTypesOEMin Utils.h.
-static_assert(ANEURALNETWORKS_ADD == 0, "ANEURALNETWORKS_ADD has changed");
-static_assert(ANEURALNETWORKS_AVERAGE_POOL_2D == 1,
- "ANEURALNETWORKS_AVERAGE_POOL_2D has changed");
-static_assert(ANEURALNETWORKS_CONCATENATION == 2, "ANEURALNETWORKS_CONCATENATION has changed");
-static_assert(ANEURALNETWORKS_CONV_2D == 3, "ANEURALNETWORKS_CONV_2D has changed");
-static_assert(ANEURALNETWORKS_DEPTHWISE_CONV_2D == 4,
- "ANEURALNETWORKS_DEPTHWISE_CONV_2D has changed");
-static_assert(ANEURALNETWORKS_DEPTH_TO_SPACE == 5,
- "ANEURALNETWORKS_DEPTH_TO_SPACE has changed");
-static_assert(ANEURALNETWORKS_DEQUANTIZE == 6, "ANEURALNETWORKS_DEQUANTIZE has changed");
-static_assert(ANEURALNETWORKS_EMBEDDING_LOOKUP == 7,
- "ANEURALNETWORKS_EMBEDDING_LOOKUP has changed");
-static_assert(ANEURALNETWORKS_FLOOR == 8, "ANEURALNETWORKS_FLOOR has changed");
-static_assert(ANEURALNETWORKS_FULLY_CONNECTED == 9,
- "ANEURALNETWORKS_FULLY_CONNECTED has changed");
-static_assert(ANEURALNETWORKS_HASHTABLE_LOOKUP == 10,
- "ANEURALNETWORKS_HASHTABLE_LOOKUP has changed");
-static_assert(ANEURALNETWORKS_L2_NORMALIZATION == 11,
- "ANEURALNETWORKS_L2_NORMALIZATION has changed");
-static_assert(ANEURALNETWORKS_L2_POOL_2D == 12, "ANEURALNETWORKS_L2_POOL has changed");
-static_assert(ANEURALNETWORKS_LOCAL_RESPONSE_NORMALIZATION == 13,
- "ANEURALNETWORKS_LOCAL_RESPONSE_NORMALIZATION has changed");
-static_assert(ANEURALNETWORKS_LOGISTIC == 14, "ANEURALNETWORKS_LOGISTIC has changed");
-static_assert(ANEURALNETWORKS_LSH_PROJECTION == 15,
- "ANEURALNETWORKS_LSH_PROJECTION has changed");
-static_assert(ANEURALNETWORKS_LSTM == 16, "ANEURALNETWORKS_LSTM has changed");
-static_assert(ANEURALNETWORKS_MAX_POOL_2D == 17, "ANEURALNETWORKS_MAX_POOL has changed");
-static_assert(ANEURALNETWORKS_MUL == 18, "ANEURALNETWORKS_MUL has changed");
-static_assert(ANEURALNETWORKS_RELU == 19, "ANEURALNETWORKS_RELU has changed");
-static_assert(ANEURALNETWORKS_RELU1 == 20, "ANEURALNETWORKS_RELU1 has changed");
-static_assert(ANEURALNETWORKS_RELU6 == 21, "ANEURALNETWORKS_RELU6 has changed");
-static_assert(ANEURALNETWORKS_RESHAPE == 22, "ANEURALNETWORKS_RESHAPE has changed");
-static_assert(ANEURALNETWORKS_RESIZE_BILINEAR == 23,
- "ANEURALNETWORKS_RESIZE_BILINEAR has changed");
-static_assert(ANEURALNETWORKS_RNN == 24, "ANEURALNETWORKS_RNN has changed");
-static_assert(ANEURALNETWORKS_SOFTMAX == 25, "ANEURALNETWORKS_SOFTMAX has changed");
-static_assert(ANEURALNETWORKS_SPACE_TO_DEPTH == 26,
- "ANEURALNETWORKS_SPACE_TO_DEPTH has changed");
-static_assert(ANEURALNETWORKS_SVDF == 27, "ANEURALNETWORKS_SVDF has changed");
-static_assert(ANEURALNETWORKS_TANH == 28, "ANEURALNETWORKS_TANH has changed");
-#if 0 // TODO-NNRT : If we consider OEM operations, it will enable.
-static_assert(ANEURALNETWORKS_OEM_OPERATION == 10000,
- "ANEURALNETWORKS_OEM_OPERATION has changed");
-#endif
-static_assert(ANEURALNETWORKS_FUSED_NONE == 0, "ANEURALNETWORKS_FUSED_NONE has changed");
-static_assert(ANEURALNETWORKS_FUSED_RELU == 1, "ANEURALNETWORKS_FUSED_RELU has changed");
-static_assert(ANEURALNETWORKS_FUSED_RELU1 == 2, "ANEURALNETWORKS_FUSED_RELU1 has changed");
-static_assert(ANEURALNETWORKS_FUSED_RELU6 == 3, "ANEURALNETWORKS_FUSED_RELU6 has changed");
-
-static_assert(ANEURALNETWORKS_PREFER_LOW_POWER == 0,
- "ANEURALNETWORKS_PREFER_LOW_POWER has changed");
-static_assert(ANEURALNETWORKS_PREFER_FAST_SINGLE_ANSWER == 1,
- "ANEURALNETWORKS_PREFER_FAST_SINGLE_ANSWER has changed");
-static_assert(ANEURALNETWORKS_PREFER_SUSTAINED_SPEED == 2,
- "ANEURALNETWORKS_PREFER_SUSTAINED_SPEED has changed");
-
-static_assert(ANEURALNETWORKS_NO_ERROR == 0, "ANEURALNETWORKS_NO_ERROR has changed");
-static_assert(ANEURALNETWORKS_OUT_OF_MEMORY == 1, "ANEURALNETWORKS_OUT_OF_MEMORY has changed");
-static_assert(ANEURALNETWORKS_INCOMPLETE == 2, "ANEURALNETWORKS_INCOMPLETE has changed");
-static_assert(ANEURALNETWORKS_UNEXPECTED_NULL == 3,
- "ANEURALNETWORKS_UNEXPECTED_NULL has changed");
-static_assert(ANEURALNETWORKS_BAD_DATA == 4, "ANEURALNETWORKS_BAD_DATA has changed");
-static_assert(ANEURALNETWORKS_OP_FAILED == 5, "ANEURALNETWORKS_OP_FAILED has changed");
-static_assert(ANEURALNETWORKS_BAD_STATE == 6, "ANEURALNETWORKS_BAD_STATE has changed");
-
-static_assert(ANEURALNETWORKS_MAX_SIZE_OF_IMMEDIATELY_COPIED_VALUES == 128,
- "ANEURALNETWORKS_MAX_SIZE_OF_IMMEDIATELY_COPIED_VALUES has changed");
-
-// Make sure that the constants are compatible with the values defined in
-// hardware/interfaces/neuralnetworks/1.0/types.hal.
-#if 0 // TODO-NNRT : If we consider OEM operations, it will enable.
-static_assert(static_cast<int32_t>(OperandType::OEM) == ANEURALNETWORKS_OEM_SCALAR,
- "OEM != ANEURALNETWORKS_OEM");
-#endif
-static_assert(static_cast<int32_t>(OperandType::FLOAT32) == ANEURALNETWORKS_FLOAT32,
- "FLOAT32 != ANEURALNETWORKS_FLOAT32");
-static_assert(static_cast<int32_t>(OperandType::INT32) == ANEURALNETWORKS_INT32,
- "INT32 != ANEURALNETWORKS_INT32");
-static_assert(static_cast<int32_t>(OperandType::UINT32) == ANEURALNETWORKS_UINT32,
- "UINT32 != ANEURALNETWORKS_UINT32");
-#if 0 // TODO-NNRT : If we consider OEM operations, it will enable.
-static_assert(static_cast<int32_t>(OperandType::TENSOR_OEM_BYTE) == ANEURALNETWORKS_TENSOR_OEM_BYTE,
- "TENSOR_OEM_BYTE != ANEURALNETWORKS_TENSOR_OEM_BYTE");
-#endif
-static_assert(static_cast<int32_t>(OperandType::TENSOR_FLOAT32) == ANEURALNETWORKS_TENSOR_FLOAT32,
- "TENSOR_FLOAT32 != ANEURALNETWORKS_TENSOR_FLOAT32");
-static_assert(static_cast<int32_t>(OperandType::TENSOR_QUANT8_ASYMM) ==
- ANEURALNETWORKS_TENSOR_QUANT8_ASYMM,
- "TENSOR_QUANT8_ASYMM != ANEURALNETWORKS_TENSOR_QUANT8_ASYMM");
-
-static_assert(static_cast<int32_t>(OperationType::ADD) == ANEURALNETWORKS_ADD,
- "OperationType::ADD != ANEURALNETWORKS_ADD");
-static_assert(static_cast<int32_t>(OperationType::AVERAGE_POOL_2D) ==
- ANEURALNETWORKS_AVERAGE_POOL_2D,
- "OperationType::AVERAGE_POOL_2D != ANEURALNETWORKS_AVERAGE_POOL_2D");
-static_assert(static_cast<int32_t>(OperationType::CONV_2D) == ANEURALNETWORKS_CONV_2D,
- "OperationType::CONV_2D != ANEURALNETWORKS_CONV_2D");
-static_assert(static_cast<int32_t>(OperationType::DEPTHWISE_CONV_2D) ==
- ANEURALNETWORKS_DEPTHWISE_CONV_2D,
- "OperationType::DEPTHWISE_CONV_2D != ANEURALNETWORKS_DEPTHWISE_CONV_2D");
-static_assert(static_cast<int32_t>(OperationType::DEPTH_TO_SPACE) ==
- ANEURALNETWORKS_DEPTH_TO_SPACE,
- "OperationType::DEPTH_TO_SPACE != ANEURALNETWORKS_DEPTH_TO_SPACE");
-static_assert(static_cast<int32_t>(OperationType::DEQUANTIZE) == ANEURALNETWORKS_DEQUANTIZE,
- "OperationType::DEQUANTIZE != ANEURALNETWORKS_DEQUANTIZE");
-static_assert(static_cast<int32_t>(OperationType::EMBEDDING_LOOKUP) ==
- ANEURALNETWORKS_EMBEDDING_LOOKUP,
- "OperationType::EMBEDDING_LOOKUP != ANEURALNETWORKS_EMBEDDING_LOOKUP");
-static_assert(static_cast<int32_t>(OperationType::FLOOR) == ANEURALNETWORKS_FLOOR,
- "OperationType::FLOOR != ANEURALNETWORKS_FLOOR");
-static_assert(static_cast<int32_t>(OperationType::FULLY_CONNECTED) ==
- ANEURALNETWORKS_FULLY_CONNECTED,
- "OperationType::FULLY_CONNECTED != ANEURALNETWORKS_FULLY_CONNECTED");
-static_assert(static_cast<int32_t>(OperationType::HASHTABLE_LOOKUP) ==
- ANEURALNETWORKS_HASHTABLE_LOOKUP,
- "OperationType::HASHTABLE_LOOKUP != ANEURALNETWORKS_HASHTABLE_LOOKUP");
-static_assert(static_cast<int32_t>(OperationType::L2_NORMALIZATION) ==
- ANEURALNETWORKS_L2_NORMALIZATION,
- "OperationType::L2_NORMALIZATION != ANEURALNETWORKS_L2_NORMALIZATION");
-static_assert(static_cast<int32_t>(OperationType::L2_POOL_2D) == ANEURALNETWORKS_L2_POOL_2D,
- "OperationType::L2_POOL_2D != ANEURALNETWORKS_L2_POOL_2D");
-static_assert(static_cast<int32_t>(OperationType::LOCAL_RESPONSE_NORMALIZATION) ==
- ANEURALNETWORKS_LOCAL_RESPONSE_NORMALIZATION,
- "OperationType::LOCAL_RESPONSE_NORMALIZATION != "
- "ANEURALNETWORKS_LOCAL_RESPONSE_NORMALIZATION");
-static_assert(static_cast<int32_t>(OperationType::LOGISTIC) == ANEURALNETWORKS_LOGISTIC,
- "OperationType::LOGISTIC != ANEURALNETWORKS_LOGISTIC");
-static_assert(static_cast<int32_t>(OperationType::LSH_PROJECTION) ==
- ANEURALNETWORKS_LSH_PROJECTION,
- "OperationType::LSH_PROJECTION != ANEURALNETWORKS_LSH_PROJECTION");
-static_assert(static_cast<int32_t>(OperationType::LSTM) == ANEURALNETWORKS_LSTM,
- "OperationType::LSTM != ANEURALNETWORKS_LSTM");
-static_assert(static_cast<int32_t>(OperationType::MAX_POOL_2D) == ANEURALNETWORKS_MAX_POOL_2D,
- "OperationType::MAX_POOL_2D != ANEURALNETWORKS_MAX_POOL_2D");
-static_assert(static_cast<int32_t>(OperationType::MUL) == ANEURALNETWORKS_MUL,
- "OperationType::MUL != ANEURALNETWORKS_MUL");
-static_assert(static_cast<int32_t>(OperationType::RELU) == ANEURALNETWORKS_RELU,
- "OperationType::RELU != ANEURALNETWORKS_RELU");
-static_assert(static_cast<int32_t>(OperationType::RELU1) == ANEURALNETWORKS_RELU1,
- "OperationType::RELU1 != ANEURALNETWORKS_RELU1");
-static_assert(static_cast<int32_t>(OperationType::RELU6) == ANEURALNETWORKS_RELU6,
- "OperationType::RELU6 != ANEURALNETWORKS_RELU6");
-static_assert(static_cast<int32_t>(OperationType::RESHAPE) == ANEURALNETWORKS_RESHAPE,
- "OperationType::RESHAPE != ANEURALNETWORKS_RESHAPE");
-static_assert(static_cast<int32_t>(OperationType::RESIZE_BILINEAR) ==
- ANEURALNETWORKS_RESIZE_BILINEAR,
- "OperationType::RESIZE_BILINEAR != ANEURALNETWORKS_RESIZE_BILINEAR");
-static_assert(static_cast<int32_t>(OperationType::RNN) == ANEURALNETWORKS_RNN,
- "OperationType::RNN != ANEURALNETWORKS_RNN");
-static_assert(static_cast<int32_t>(OperationType::SOFTMAX) == ANEURALNETWORKS_SOFTMAX,
- "OperationType::SOFTMAX != ANEURALNETWORKS_SOFTMAX");
-static_assert(static_cast<int32_t>(OperationType::SPACE_TO_DEPTH) ==
- ANEURALNETWORKS_SPACE_TO_DEPTH,
- "OperationType::SPACE_TO_DEPTH != ANEURALNETWORKS_SPACE_TO_DEPTH");
-static_assert(static_cast<int32_t>(OperationType::SVDF) == ANEURALNETWORKS_SVDF,
- "OperationType::SVDF != ANEURALNETWORKS_SVDF");
-static_assert(static_cast<int32_t>(OperationType::TANH) == ANEURALNETWORKS_TANH,
- "OperationType::TANH != ANEURALNETWORKS_TANH");
-
-static_assert(static_cast<int32_t>(FusedActivationFunc::NONE) == ANEURALNETWORKS_FUSED_NONE,
- "FusedActivationFunc::NONE != ANEURALNETWORKS_FUSED_NONE");
-static_assert(static_cast<int32_t>(FusedActivationFunc::RELU) == ANEURALNETWORKS_FUSED_RELU,
- "FusedActivationFunc::RELU != ANEURALNETWORKS_FUSED_RELU");
-static_assert(static_cast<int32_t>(FusedActivationFunc::RELU1) == ANEURALNETWORKS_FUSED_RELU1,
- "FusedActivationFunc::RELU1 != ANEURALNETWORKS_FUSED_RELU1");
-static_assert(static_cast<int32_t>(FusedActivationFunc::RELU6) == ANEURALNETWORKS_FUSED_RELU6,
- "FusedActivationFunc::RELU6 != ANEURALNETWORKS_FUSED_RELU6");
-
-using android::sp;
-using namespace nnfw::rt;
-
-int ANeuralNetworksMemory_createFromFd(size_t size, int prot, int fd, size_t offset,
- ANeuralNetworksMemory** memory) {
- *memory = nullptr;
- std::unique_ptr<MemoryFd> m = std::make_unique<MemoryFd>();
- if (m == nullptr) {
- return ANEURALNETWORKS_OUT_OF_MEMORY;
- }
- int n = m->set(size, prot, fd, offset);
- if (n != ANEURALNETWORKS_NO_ERROR) {
- return n;
- }
- *memory = reinterpret_cast<ANeuralNetworksMemory*>(m.release());
- return ANEURALNETWORKS_NO_ERROR;
-}
-
-void ANeuralNetworksMemory_free(ANeuralNetworksMemory* memory) {
- // No validation. Free of nullptr is valid.
- Memory* m = reinterpret_cast<Memory*>(memory);
- delete m;
-}
-
-int ANeuralNetworksModel_create(ANeuralNetworksModel** model) {
- if (!model) {
- LOG(ERROR) << "ANeuralNetworksModel_create passed a nullptr";
- return ANEURALNETWORKS_UNEXPECTED_NULL;
- }
- ModelBuilder* m = new ModelBuilder();
- if (m == nullptr) {
- *model = nullptr;
- return ANEURALNETWORKS_OUT_OF_MEMORY;
- }
- *model = reinterpret_cast<ANeuralNetworksModel*>(m);
- return ANEURALNETWORKS_NO_ERROR;
-}
-
-void ANeuralNetworksModel_free(ANeuralNetworksModel* model) {
- // No validation. Free of nullptr is valid.
- ModelBuilder* m = reinterpret_cast<ModelBuilder*>(model);
- delete m;
-}
-
-int ANeuralNetworksModel_finish(ANeuralNetworksModel* model) {
- if (!model) {
- LOG(ERROR) << "ANeuralNetworksModel_finish passed a nullptr";
- return ANEURALNETWORKS_UNEXPECTED_NULL;
- }
- ModelBuilder* m = reinterpret_cast<ModelBuilder*>(model);
- return m->finish();
-}
-
-int ANeuralNetworksModel_addOperand(ANeuralNetworksModel* model,
- const ANeuralNetworksOperandType* type) {
- if (!model || !type) {
- LOG(ERROR) << "ANeuralNetworksModel_addOperand passed a nullptr";
- return ANEURALNETWORKS_UNEXPECTED_NULL;
- }
- ModelBuilder* m = reinterpret_cast<ModelBuilder*>(model);
- return m->addOperand(*type);
-}
-
-int ANeuralNetworksModel_setOperandValue(ANeuralNetworksModel* model, int32_t index,
- const void* buffer, size_t length) {
- if (!model || !buffer) {
- LOG(ERROR) << "ANeuralNetworksModel_setOperandValue passed a nullptr";
- return ANEURALNETWORKS_UNEXPECTED_NULL;
- }
- ModelBuilder* m = reinterpret_cast<ModelBuilder*>(model);
- return m->setOperandValue(index, buffer, length);
-}
-
-int ANeuralNetworksModel_setOperandValueFromMemory(ANeuralNetworksModel* model, int32_t index,
- const ANeuralNetworksMemory* memory,
- size_t offset, size_t length) {
- if (!model || !memory) {
- LOG(ERROR) << "ANeuralNetworksModel_setOperandValue passed a nullptr";
- return ANEURALNETWORKS_UNEXPECTED_NULL;
- }
- const Memory* mem = reinterpret_cast<const Memory*>(memory);
- ModelBuilder* m = reinterpret_cast<ModelBuilder*>(model);
- return m->setOperandValueFromMemory(index, mem, offset, length);
-}
-
-int ANeuralNetworksModel_addOperation(ANeuralNetworksModel* model,
- ANeuralNetworksOperationType type, uint32_t inputCount,
- const uint32_t* inputs, uint32_t outputCount,
- const uint32_t* outputs) {
- if (!model || !inputs || !outputs) {
- LOG(ERROR) << "ANeuralNetworksModel_addOperation passed a nullptr";
- return ANEURALNETWORKS_UNEXPECTED_NULL;
- }
- ModelBuilder* m = reinterpret_cast<ModelBuilder*>(model);
- return m->addOperation(type, inputCount, inputs, outputCount, outputs);
-}
-
-int ANeuralNetworksModel_identifyInputsAndOutputs(ANeuralNetworksModel* model, uint32_t inputCount,
- const uint32_t* inputs, uint32_t outputCount,
- const uint32_t* outputs) {
- if (!model || !inputs || !outputs) {
- LOG(ERROR) << ("ANeuralNetworksModel_identifyInputsAndOutputs passed a nullptr");
- return ANEURALNETWORKS_UNEXPECTED_NULL;
- }
- ModelBuilder* m = reinterpret_cast<ModelBuilder*>(model);
- return m->identifyInputsAndOutputs(inputCount, inputs, outputCount, outputs);
-}
-
-int ANeuralNetworksCompilation_create(ANeuralNetworksModel* model,
- ANeuralNetworksCompilation** compilation) {
- if (!model || !compilation) {
- LOG(ERROR) << "ANeuralNetworksCompilation_create passed a nullptr";
- return ANEURALNETWORKS_UNEXPECTED_NULL;
- }
-
- ModelBuilder* m = reinterpret_cast<ModelBuilder*>(model);
- CompilationBuilder* c = nullptr;
- int result = m->createCompilation(&c);
- *compilation = reinterpret_cast<ANeuralNetworksCompilation*>(c);
- return result;
-}
-
-void ANeuralNetworksCompilation_free(ANeuralNetworksCompilation* compilation) {
- // No validation. Free of nullptr is valid.
- // TODO specification says that a compilation-in-flight can be deleted
- CompilationBuilder* c = reinterpret_cast<CompilationBuilder*>(compilation);
- delete c;
-}
-
-int ANeuralNetworksCompilation_setPreference(ANeuralNetworksCompilation* compilation,
- int32_t preference) {
- if (!compilation) {
- LOG(ERROR) << "ANeuralNetworksCompilation_setPreference passed a nullptr";
- return ANEURALNETWORKS_UNEXPECTED_NULL;
- }
- CompilationBuilder* c = reinterpret_cast<CompilationBuilder*>(compilation);
- return c->setPreference(preference);
-}
-
-int ANeuralNetworksCompilation_finish(ANeuralNetworksCompilation* compilation) {
- if (!compilation) {
- LOG(ERROR) << "ANeuralNetworksCompilation_finish passed a nullptr";
- return ANEURALNETWORKS_UNEXPECTED_NULL;
- }
- CompilationBuilder* c = reinterpret_cast<CompilationBuilder*>(compilation);
- return c->finish();
-}
-
-int ANeuralNetworksExecution_create(ANeuralNetworksCompilation* compilation,
- ANeuralNetworksExecution** execution) {
- if (!compilation || !execution) {
- LOG(ERROR) << "ANeuralNetworksExecution_create passed a nullptr";
- return ANEURALNETWORKS_UNEXPECTED_NULL;
- }
-
- CompilationBuilder* c = reinterpret_cast<CompilationBuilder*>(compilation);
- ExecutionBuilder* r = nullptr;
- int result = c->createExecution(&r);
- *execution = reinterpret_cast<ANeuralNetworksExecution*>(r);
- return result;
-}
-
-void ANeuralNetworksExecution_free(ANeuralNetworksExecution* execution) {
- // TODO specification says that an execution-in-flight can be deleted
- // No validation. Free of nullptr is valid.
- ExecutionBuilder* r = reinterpret_cast<ExecutionBuilder*>(execution);
- delete r;
-}
-
-int ANeuralNetworksExecution_setInput(ANeuralNetworksExecution* execution, int32_t index,
- const ANeuralNetworksOperandType* type, const void* buffer,
- size_t length) {
- if (!execution) {
- LOG(ERROR) << "ANeuralNetworksExecution_setInput passed execution with a nullptr";
- return ANEURALNETWORKS_UNEXPECTED_NULL;
- }
- if (!buffer && length != 0) {
- LOG(ERROR) << "ANeuralNetworksExecution_setInput passed buffer with a nullptr";
- return ANEURALNETWORKS_UNEXPECTED_NULL;
- }
-
- ExecutionBuilder* r = reinterpret_cast<ExecutionBuilder*>(execution);
- return r->setInput(index, type, buffer, length);
-}
-
-int ANeuralNetworksExecution_setInputFromMemory(ANeuralNetworksExecution* execution, int32_t index,
- const ANeuralNetworksOperandType* type,
- const ANeuralNetworksMemory* memory, size_t offset,
- size_t length) {
- if (!execution || !memory) {
- LOG(ERROR) << "ANeuralNetworksExecution_setInputFromMemory passed a nullptr";
- return ANEURALNETWORKS_UNEXPECTED_NULL;
- }
-
- const Memory* m = reinterpret_cast<const Memory*>(memory);
- ExecutionBuilder* r = reinterpret_cast<ExecutionBuilder*>(execution);
- return r->setInputFromMemory(index, type, m, offset, length);
-}
-
-int ANeuralNetworksExecution_setOutput(ANeuralNetworksExecution* execution, int32_t index,
- const ANeuralNetworksOperandType* type, void* buffer,
- size_t length) {
- if (!execution || !buffer) {
- LOG(ERROR) << "ANeuralNetworksExecution_setOutput passed a nullptr";
- return ANEURALNETWORKS_UNEXPECTED_NULL;
- }
- ExecutionBuilder* r = reinterpret_cast<ExecutionBuilder*>(execution);
- return r->setOutput(index, type, buffer, length);
-}
-
-int ANeuralNetworksExecution_setOutputFromMemory(ANeuralNetworksExecution* execution, int32_t index,
- const ANeuralNetworksOperandType* type,
- const ANeuralNetworksMemory* memory, size_t offset,
- size_t length) {
- if (!execution || !memory) {
- LOG(ERROR) << "ANeuralNetworksExecution_setOutputFromMemory passed a nullptr";
- return ANEURALNETWORKS_UNEXPECTED_NULL;
- }
-
- ExecutionBuilder* r = reinterpret_cast<ExecutionBuilder*>(execution);
- const Memory* m = reinterpret_cast<const Memory*>(memory);
- return r->setOutputFromMemory(index, type, m, offset, length);
-}
-
-int ANeuralNetworksExecution_startCompute(ANeuralNetworksExecution* execution,
- ANeuralNetworksEvent** event) {
- if (!execution || !event) {
- LOG(ERROR) << "ANeuralNetworksExecution_startCompute passed a nullptr";
- return ANEURALNETWORKS_UNEXPECTED_NULL;
- }
- // TODO validate the rest
-
- ExecutionBuilder* r = reinterpret_cast<ExecutionBuilder*>(execution);
-
- // Dynamically allocate an sp to wrap an ExecutionCallback, seen in the NN
- // API as an abstract event object. The sp<ExecutionCallback> object is
- // returned when the execution has been successfully launched, otherwise a
- // nullptr is returned. The sp is used for ref-counting purposes. Without
- // it, the HIDL service could attempt to communicate with a dead callback
- // object.
- std::unique_ptr<sp<ExecutionCallback>> e = std::make_unique<sp<ExecutionCallback>>();
- *event = nullptr;
-
- int n = r->startCompute(e.get());
- if (n != ANEURALNETWORKS_NO_ERROR) {
- return n;
- }
- *event = reinterpret_cast<ANeuralNetworksEvent*>(e.release());
- return ANEURALNETWORKS_NO_ERROR;
-}
-
-int ANeuralNetworksEvent_wait(ANeuralNetworksEvent* event) {
- if (event == nullptr) {
- LOG(ERROR) << "ANeuralNetworksEvent_wait passed a nullptr";
- return ANEURALNETWORKS_UNEXPECTED_NULL;
- }
-
- sp<ExecutionCallback>* e = reinterpret_cast<sp<ExecutionCallback>*>(event);
- (*e)->wait();
- return ANEURALNETWORKS_NO_ERROR;
-}
-
-void ANeuralNetworksEvent_free(ANeuralNetworksEvent* event) {
- // No validation. Free of nullptr is valid.
- if (event) {
- sp<ExecutionCallback>* e = reinterpret_cast<sp<ExecutionCallback>*>(event);
- (*e)->wait();
- delete e;
- }
-}