blob: 41113ca63f6524586b035959fd3e18527e724b01 [file] [log] [blame]
/*
* Copyright (C) 2020 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.
*/
#ifndef ANDROID_PACKAGES_MODULES_NEURALNETWORKS_SL_SUPPORT_LIBRARY_H
#define ANDROID_PACKAGES_MODULES_NEURALNETWORKS_SL_SUPPORT_LIBRARY_H
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <memory>
#include <string>
#include "SupportLibraryTypes.h"
struct NnApiSupportLibrary {
void* lib_handle = nullptr;
~NnApiSupportLibrary();
// TODO(181331981): This should be generated from NeuralNetworks.t
int64_t (*ANeuralNetworks_getRuntimeFeatureLevel)();
uint64_t (*ANeuralNetworks_getDefaultLoopTimeout)();
uint64_t (*ANeuralNetworks_getMaximumLoopTimeout)();
int (*ANeuralNetworks_getDeviceCount)(uint32_t* numDevices);
int (*ANeuralNetworks_getDevice)(uint32_t devIndex, ANeuralNetworksDevice** device);
int (*ANeuralNetworksDevice_getName)(const ANeuralNetworksDevice* device, const char** name);
int (*ANeuralNetworksDevice_getType)(const ANeuralNetworksDevice* device, int32_t* type);
int (*ANeuralNetworksDevice_getVersion)(const ANeuralNetworksDevice* device,
const char** version);
int (*ANeuralNetworksDevice_wait)(const ANeuralNetworksDevice* device);
int (*ANeuralNetworksEvent_wait)(ANeuralNetworksEvent* event);
int (*ANeuralNetworksMemory_createFromAHardwareBuffer)(const AHardwareBuffer* ahwb,
ANeuralNetworksMemory** memory);
int (*ANeuralNetworksMemory_createFromDesc)(const ANeuralNetworksMemoryDesc* desc,
ANeuralNetworksMemory** memory);
int (*ANeuralNetworksMemory_createFromFd)(size_t size, int protect, int fd, size_t offset,
ANeuralNetworksMemory** memory);
int (*ANeuralNetworksMemory_copy)(const ANeuralNetworksMemory* src,
const ANeuralNetworksMemory* dst);
void (*ANeuralNetworksMemory_free)(ANeuralNetworksMemory* memory);
int (*ANeuralNetworksMemoryDesc_addInputRole)(ANeuralNetworksMemoryDesc* desc,
const ANeuralNetworksCompilation* compilation,
int32_t index, float frequency);
int (*ANeuralNetworksMemoryDesc_addOutputRole)(ANeuralNetworksMemoryDesc* desc,
const ANeuralNetworksCompilation* compilation,
uint32_t index, float frequency);
int (*ANeuralNetworksMemoryDesc_create)(ANeuralNetworksMemoryDesc** desc);
int (*ANeuralNetworksMemoryDesc_finish)(ANeuralNetworksMemoryDesc* desc);
void (*ANeuralNetworksMemoryDesc_free)(ANeuralNetworksMemoryDesc* desc);
int (*ANeuralNetworksMemoryDesc_setDimensions)(ANeuralNetworksMemoryDesc* desc, uint32_t rank,
const uint32_t* dimensions);
int (*ANeuralNetworksModel_create)(ANeuralNetworksModel** model);
void (*ANeuralNetworksModel_free)(ANeuralNetworksModel* model);
int (*ANeuralNetworksModel_finish)(ANeuralNetworksModel* model);
int (*ANeuralNetworksModel_addOperand)(ANeuralNetworksModel* model,
const ANeuralNetworksOperandType* type);
int (*ANeuralNetworksModel_setOperandValue)(ANeuralNetworksModel* model, int32_t index,
const void* buffer, size_t length);
int (*ANeuralNetworksModel_setOperandSymmPerChannelQuantParams)(
ANeuralNetworksModel* model, int32_t index,
const ANeuralNetworksSymmPerChannelQuantParams* channelQuant);
int (*ANeuralNetworksModel_setOperandValueFromMemory)(ANeuralNetworksModel* model,
int32_t index,
const ANeuralNetworksMemory* memory,
size_t offset, size_t length);
int (*ANeuralNetworksModel_setOperandValueFromModel)(ANeuralNetworksModel* model, int32_t index,
const ANeuralNetworksModel* value);
int (*ANeuralNetworksModel_addOperation)(ANeuralNetworksModel* model,
ANeuralNetworksOperationType type, uint32_t inputCount,
const uint32_t* inputs, uint32_t outputCount,
const uint32_t* outputs);
int (*ANeuralNetworksModel_identifyInputsAndOutputs)(ANeuralNetworksModel* model,
uint32_t inputCount,
const uint32_t* inputs,
uint32_t outputCount,
const uint32_t* outputs);
int (*ANeuralNetworksModel_relaxComputationFloat32toFloat16)(ANeuralNetworksModel* model,
bool allow);
int (*ANeuralNetworksModel_getSupportedOperationsForDevices)(
const ANeuralNetworksModel* model, const ANeuralNetworksDevice* const* devices,
uint32_t numDevices, bool* supportedOps);
int (*ANeuralNetworksCompilation_createForDevices)(ANeuralNetworksModel* model,
const ANeuralNetworksDevice* const* devices,
uint32_t numDevices,
ANeuralNetworksCompilation** compilation);
void (*ANeuralNetworksCompilation_free)(ANeuralNetworksCompilation* compilation);
int (*ANeuralNetworksCompilation_setCaching)(ANeuralNetworksCompilation* compilation,
const char* cacheDir, const uint8_t* token);
int (*ANeuralNetworksCompilation_setPreference)(ANeuralNetworksCompilation* compilation,
int32_t preference);
int (*ANeuralNetworksCompilation_finish)(ANeuralNetworksCompilation* compilation);
int (*ANeuralNetworksCompilation_setPriority)(ANeuralNetworksCompilation* compilation,
int priority);
int (*ANeuralNetworksCompilation_setTimeout)(ANeuralNetworksCompilation* compilation,
uint64_t duration);
int (*ANeuralNetworksExecution_create)(ANeuralNetworksCompilation* compilation,
ANeuralNetworksExecution** execution);
void (*ANeuralNetworksExecution_free)(ANeuralNetworksExecution* execution);
int (*ANeuralNetworksExecution_getDuration)(const ANeuralNetworksExecution* execution,
int32_t durationCode, uint64_t* duration);
int (*ANeuralNetworksExecution_setInput)(ANeuralNetworksExecution* execution, int32_t index,
const ANeuralNetworksOperandType* type,
const void* buffer, size_t length);
int (*ANeuralNetworksExecution_setInputFromMemory)(ANeuralNetworksExecution* execution,
int32_t index,
const ANeuralNetworksOperandType* type,
const ANeuralNetworksMemory* memory,
size_t offset, size_t length);
int (*ANeuralNetworksExecution_setMeasureTiming)(ANeuralNetworksExecution* execution,
bool measure);
int (*ANeuralNetworksExecution_setOutput)(ANeuralNetworksExecution* execution, int32_t index,
const ANeuralNetworksOperandType* type, void* buffer,
size_t length);
int (*ANeuralNetworksExecution_setOutputFromMemory)(ANeuralNetworksExecution* execution,
int32_t index,
const ANeuralNetworksOperandType* type,
const ANeuralNetworksMemory* memory,
size_t offset, size_t length);
int (*ANeuralNetworksExecution_compute)(ANeuralNetworksExecution* execution);
int (*ANeuralNetworksExecution_getOutputOperandDimensions)(ANeuralNetworksExecution* execution,
int32_t index, uint32_t* dimensions);
int (*ANeuralNetworksExecution_getOutputOperandRank)(ANeuralNetworksExecution* execution,
int32_t index, uint32_t* rank);
int (*ANeuralNetworksExecution_setTimeout)(ANeuralNetworksExecution* execution,
uint64_t duration);
int (*ANeuralNetworksExecution_setLoopTimeout)(ANeuralNetworksExecution* execution,
uint64_t duration);
int (*ANeuralNetworksExecution_enableInputAndOutputPadding)(ANeuralNetworksExecution* execution,
bool enable);
int (*ANeuralNetworksEvent_createFromSyncFenceFd)(int sync_fence_fd,
ANeuralNetworksEvent** event);
int (*ANeuralNetworksEvent_getSyncFenceFd)(const ANeuralNetworksEvent* event,
int* sync_fence_fd);
int (*ANeuralNetworksExecution_startComputeWithDependencies)(
ANeuralNetworksExecution* execution, const ANeuralNetworksEvent* const* dependencies,
uint32_t num_dependencies, uint64_t duration, ANeuralNetworksEvent** event);
void (*ANeuralNetworksEvent_free)(ANeuralNetworksEvent* event);
int (*ANeuralNetworksBurst_create)(ANeuralNetworksCompilation* compilation,
ANeuralNetworksBurst** burst);
void (*ANeuralNetworksBurst_free)(ANeuralNetworksBurst* burst);
int (*ANeuralNetworksExecution_burstCompute)(ANeuralNetworksExecution* execution,
ANeuralNetworksBurst* burst);
int (*ANeuralNetworksDevice_getExtensionSupport)(const ANeuralNetworksDevice* device,
const char* extensionName,
bool* isExtensionSupported);
int (*ANeuralNetworksModel_getExtensionOperandType)(ANeuralNetworksModel* model,
const char* extensionName,
uint16_t operandCodeWithinExtension,
int32_t* type);
int (*ANeuralNetworksModel_getExtensionOperationType)(ANeuralNetworksModel* model,
const char* extensionName,
uint16_t operationCodeWithinExtension,
ANeuralNetworksOperationType* type);
int (*ANeuralNetworksModel_setOperandExtensionData)(ANeuralNetworksModel* model, int32_t index,
const void* data, size_t length);
int (*ANeuralNetworksCompilation_getPreferredMemoryAlignmentForInput)(
const ANeuralNetworksCompilation* compilation, uint32_t index, uint32_t* alignment);
int (*ANeuralNetworksCompilation_getPreferredMemoryPaddingForInput)(
const ANeuralNetworksCompilation* compilation, uint32_t index, uint32_t* padding);
int (*ANeuralNetworksCompilation_getPreferredMemoryAlignmentForOutput)(
const ANeuralNetworksCompilation* compilation, uint32_t index, uint32_t* alignment);
int (*ANeuralNetworksCompilation_getPreferredMemoryPaddingForOutput)(
const ANeuralNetworksCompilation* compilation, uint32_t index, uint32_t* padding);
};
/**
* Loads the NNAPI support library.
* The NnApiSupportLibrary structure is filled with all the pointers. If one
* function doesn't exist, a null pointer is stored.
*/
std::unique_ptr<const NnApiSupportLibrary> LoadNnApiSupportLibrary(const std::string& lib_name);
std::unique_ptr<const NnApiSupportLibrary> LoadNnApiSupportLibrary(void* lib_handle);
#endif // ANDROID_PACKAGES_MODULES_NEURALNETWORKS_SL_SUPPORT_LIBRARY_H