1 // 2 // Copyright © 2017 Arm Ltd. All rights reserved. 3 // SPDX-License-Identifier: MIT 4 // 5 6 #pragma once 7 8 #include "ArmnnDriver.hpp" 9 #include "ConversionUtils.hpp" 10 11 #include <armnn/ArmNN.hpp> 12 13 #include <set> 14 #include <vector> 15 16 namespace armnn_driver 17 { 18 19 enum class ConversionResult 20 { 21 Success, 22 ErrorMappingPools, 23 UnsupportedFeature 24 }; 25 26 // A helper template class performing the conversion from an AndroidNN driver Model representation, 27 // to an armnn::INetwork object 28 template<typename HalPolicy> 29 class ModelToINetworkConverter 30 { 31 public: 32 using HalModel = typename HalPolicy::Model; 33 34 ModelToINetworkConverter(const std::vector<armnn::BackendId>& backends, 35 const HalModel& model, 36 const std::set<unsigned int>& forcedUnsupportedOperations); 37 GetConversionResult() const38 ConversionResult GetConversionResult() const { return m_ConversionResult; } 39 40 // Returns the ArmNN INetwork corresponding to the input model, if preparation went smoothly, nullptr otherwise. GetINetwork() const41 armnn::INetwork* GetINetwork() const { return m_Data.m_Network.get(); } 42 43 bool IsOperationSupported(uint32_t operationIndex) const; 44 45 private: 46 void Convert(); 47 48 // Shared aggregate input/output/internal data 49 ConversionData m_Data; 50 51 // Input data 52 const HalModel& m_Model; 53 const std::set<unsigned int>& m_ForcedUnsupportedOperations; 54 55 // Output data 56 ConversionResult m_ConversionResult; 57 std::map<uint32_t, bool> m_OperationSupported; 58 }; 59 60 } // armnn_driver 61