Imported Upstream version 1.8.0
[platform/core/ml/nnfw.git] / runtime / onert / api / src / nnfw_api_internal.cc
index d03ddd4..eb0b743 100644 (file)
@@ -73,15 +73,33 @@ nnfw_session::nnfw_session()
 
 nnfw_session::~nnfw_session() = default;
 
-NNFW_STATUS nnfw_session::load_model_from_file(const char *package_dir)
+NNFW_STATUS nnfw_session::load_circle_from_buffer(uint8_t *buffer, size_t size)
 {
   if (!isStateInitialized())
+    return NNFW_STATUS_INVALID_STATE;
+
+  if (!buffer)
+    return NNFW_STATUS_UNEXPECTED_NULL;
+
+  if (size == 0)
     return NNFW_STATUS_ERROR;
 
+  _subgraphs = onert::circle_loader::loadModel(buffer, size);
+  _compiler = std::make_unique<onert::compiler::Compiler>(_subgraphs);
+
+  _state = State::MODEL_LOADED;
+  return NNFW_STATUS_NO_ERROR;
+}
+
+NNFW_STATUS nnfw_session::load_model_from_file(const char *package_dir)
+{
+  if (!isStateInitialized())
+    return NNFW_STATUS_INVALID_STATE;
+
   if (!package_dir)
   {
     std::cerr << "package_dir is null." << std::endl;
-    return NNFW_STATUS_ERROR;
+    return NNFW_STATUS_UNEXPECTED_NULL;
   }
 
   if (!null_terminating(package_dir, MAX_PATH_LENGTH))
@@ -156,7 +174,7 @@ NNFW_STATUS nnfw_session::prepare()
       std::cerr << "invalid state";
     }
     std::cerr << std::endl;
-    return NNFW_STATUS_ERROR;
+    return NNFW_STATUS_INVALID_STATE;
   }
 
   if (!_subgraphs || !primary_subgraph() || primary_subgraph()->isBuildingPhase())
@@ -188,7 +206,7 @@ NNFW_STATUS nnfw_session::run()
   {
     std::cerr << "Error during nnfw_session::run : "
               << "run should be run after prepare" << std::endl;
-    return NNFW_STATUS_ERROR;
+    return NNFW_STATUS_INVALID_STATE;
   }
 
   try
@@ -211,7 +229,7 @@ NNFW_STATUS nnfw_session::run_async()
   {
     std::cerr << "Error during nnfw_session::run_async : "
               << "run_async should be run after prepare" << std::endl;
-    return NNFW_STATUS_ERROR;
+    return NNFW_STATUS_INVALID_STATE;
   }
 
   _execution->startExecute();
@@ -241,7 +259,7 @@ NNFW_STATUS nnfw_session::set_input(uint32_t index, NNFW_TYPE /*type*/, const vo
   if (!isStatePreparedOrFinishedRun())
   {
     std::cerr << "Error during nnfw_session::set_input : invalid state" << std::endl;
-    return NNFW_STATUS_ERROR;
+    return NNFW_STATUS_INVALID_STATE;
   }
 
   if (!buffer && length != 0)
@@ -270,7 +288,7 @@ NNFW_STATUS nnfw_session::set_output(uint32_t index, NNFW_TYPE /*type*/, void *b
   if (!isStatePreparedOrFinishedRun())
   {
     std::cerr << "Error during nnfw_session::set_output : invalid state" << std::endl;
-    return NNFW_STATUS_ERROR;
+    return NNFW_STATUS_INVALID_STATE;
   }
 
   if (!buffer && length != 0)
@@ -296,14 +314,14 @@ NNFW_STATUS nnfw_session::set_output(uint32_t index, NNFW_TYPE /*type*/, void *b
 NNFW_STATUS nnfw_session::input_size(uint32_t *number)
 {
   if (isStateInitialized()) // Model is not loaded
-    return NNFW_STATUS_ERROR;
+    return NNFW_STATUS_INVALID_STATE;
 
   try
   {
     if (number == nullptr)
     {
       std::cerr << "Error during nnfw_session::input_size, number is null pointer." << std::endl;
-      return NNFW_STATUS_ERROR;
+      return NNFW_STATUS_UNEXPECTED_NULL;
     }
     *number = primary_subgraph()->getInputs().size();
   }
@@ -318,14 +336,14 @@ NNFW_STATUS nnfw_session::input_size(uint32_t *number)
 NNFW_STATUS nnfw_session::output_size(uint32_t *number)
 {
   if (isStateInitialized()) // Model is not loaded
-    return NNFW_STATUS_ERROR;
+    return NNFW_STATUS_INVALID_STATE;
 
   try
   {
     if (number == nullptr)
     {
       std::cerr << "Error during nnfw_session::output_size, number is null pointer." << std::endl;
-      return NNFW_STATUS_ERROR;
+      return NNFW_STATUS_UNEXPECTED_NULL;
     }
     *number = primary_subgraph()->getOutputs().size();
   }
@@ -410,7 +428,7 @@ NNFW_STATUS nnfw_session::apply_tensorinfo(uint32_t index, nnfw_tensorinfo ti)
     {
       std::cerr << "Error during set_input_tensorinfo : should be run after load_model"
                 << std::endl;
-      return NNFW_STATUS_ERROR;
+      return NNFW_STATUS_INVALID_STATE;
     }
 
     if (ti.rank <= 0 || ti.rank > NNFW_MAX_RANK)
@@ -463,13 +481,16 @@ NNFW_STATUS nnfw_session::set_input_tensorinfo(uint32_t index, const nnfw_tensor
 
 NNFW_STATUS nnfw_session::input_tensorinfo(uint32_t index, nnfw_tensorinfo *ti)
 {
+  if (isStateInitialized())
+    return NNFW_STATUS_INVALID_STATE;
+
   try
   {
     if (ti == nullptr)
     {
       std::cerr << "Error during nnfw_session::input_tensorinfo, tensorinfo is null pointer."
                 << std::endl;
-      return NNFW_STATUS_ERROR;
+      return NNFW_STATUS_UNEXPECTED_NULL;
     }
     if (index >= primary_subgraph()->getInputs().size())
     {
@@ -499,13 +520,13 @@ NNFW_STATUS nnfw_session::input_tensorinfo(uint32_t index, nnfw_tensorinfo *ti)
 NNFW_STATUS nnfw_session::output_tensorinfo(uint32_t index, nnfw_tensorinfo *ti)
 {
   if (isStateInitialized())
-    return NNFW_STATUS_ERROR;
+    return NNFW_STATUS_INVALID_STATE;
 
   if (ti == nullptr)
   {
     std::cerr << "Error during nnfw_session::output_tensorinfo, tensorinfo is null pointer."
               << std::endl;
-    return NNFW_STATUS_ERROR;
+    return NNFW_STATUS_UNEXPECTED_NULL;
   }
 
   if (index >= primary_subgraph()->getOutputs().size())
@@ -570,14 +591,14 @@ static std::string get_op_backend_string(std::string op)
 NNFW_STATUS nnfw_session::set_available_backends(const char *backends)
 {
   if (!isStateModelLoaded())
-    return NNFW_STATUS_ERROR;
+    return NNFW_STATUS_INVALID_STATE;
 
   try
   {
-    if (!backends || null_terminating(backends, MAX_BACKEND_NAME_LENGTH) == false)
-    {
+    if (!backends)
+      return NNFW_STATUS_UNEXPECTED_NULL;
+    if (null_terminating(backends, MAX_BACKEND_NAME_LENGTH) == false)
       return NNFW_STATUS_ERROR;
-    }
 
     auto &options = _compiler->options();
 
@@ -596,15 +617,15 @@ NNFW_STATUS nnfw_session::set_available_backends(const char *backends)
 NNFW_STATUS nnfw_session::set_op_backend(const char *op, const char *backend)
 {
   if (!isStateModelLoaded())
-    return NNFW_STATUS_ERROR;
+    return NNFW_STATUS_INVALID_STATE;
 
   try
   {
-    if (!op || !null_terminating(op, MAX_OP_NAME_LENGTH) || !backend ||
+    if (!op || !backend)
+      return NNFW_STATUS_UNEXPECTED_NULL;
+    if (!null_terminating(op, MAX_OP_NAME_LENGTH) ||
         !null_terminating(backend, MAX_BACKEND_NAME_LENGTH))
-    {
       return NNFW_STATUS_ERROR;
-    }
 
     auto key = get_op_backend_string(op);
 
@@ -627,7 +648,10 @@ NNFW_STATUS nnfw_session::set_op_backend(const char *op, const char *backend)
 NNFW_STATUS nnfw_session::set_config(const char *key, const char *value)
 {
   if (!isStateModelLoaded())
-    return NNFW_STATUS_ERROR;
+    return NNFW_STATUS_INVALID_STATE;
+
+  if (!key || !value)
+    return NNFW_STATUS_UNEXPECTED_NULL;
 
   auto &options = _compiler->options();
 
@@ -693,7 +717,10 @@ onert::ir::Graph *nnfw_session::primary_subgraph()
 NNFW_STATUS nnfw_session::get_config(const char *key, char *value, size_t value_size)
 {
   if (!isStateModelLoaded())
-    return NNFW_STATUS_ERROR;
+    return NNFW_STATUS_INVALID_STATE;
+
+  if (!key || !value)
+    return NNFW_STATUS_UNEXPECTED_NULL;
 
   auto &options = _compiler->options();