xref: /aosp_15_r20/external/android-nn-driver/ModelToINetworkConverter.hpp (revision 3e777be0405cee09af5d5785ff37f7cfb5bee59a)
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