xref: /aosp_15_r20/external/armnn/shim/sl/canonical/ModelToINetworkTransformer.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1 //
2 // Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #pragma once
7 
8 //#include "ArmnnDriver.hpp"
9 #include "Converter.hpp"
10 
11 #include <armnn/ArmNN.hpp>
12 
13 #include <nnapi/IPreparedModel.h>
14 #include <nnapi/Result.h>
15 #include <nnapi/TypeUtils.h>
16 #include <nnapi/Types.h>
17 #include <nnapi/Validation.h>
18 
19 #include <set>
20 #include <map>
21 #include <vector>
22 
23 namespace armnn_driver
24 {
25 
26 using namespace android::nn;
27 
28 // A helper template class performing the conversion from an AndroidNN driver Model representation,
29 // to an armnn::INetwork object
30 class ModelToINetworkTransformer
31 {
32 public:
33     ModelToINetworkTransformer(const std::vector<armnn::BackendId>& backends,
34                                const Model& model,
35                                const std::set<unsigned int>& forcedUnsupportedOperations);
36 
GetConversionResult() const37     ConversionResult GetConversionResult() const { return m_ConversionResult; }
38 
39     // Returns the ArmNN INetwork corresponding to the input model, if preparation went smoothly, nullptr otherwise.
GetINetwork() const40     armnn::INetwork* GetINetwork() const { return m_Data.m_Network.get(); }
41 
42     bool IsOperationSupported(uint32_t operationIndex) const;
43 
44 private:
45     void Convert();
46 
47     // Shared aggregate input/output/internal data
48     ConversionData m_Data;
49 
50     // Input data
51     const Model&                  m_Model;
52     const std::set<unsigned int>& m_ForcedUnsupportedOperations;
53 
54     // Output data
55     ConversionResult         m_ConversionResult;
56     std::map<uint32_t, bool> m_OperationSupported;
57 };
58 
59 } // armnn_driver
60