return ANEURALNETWORKS_UNEXPECTED_NULL;
}
+ if (model->isFinished())
+ {
+ return ANEURALNETWORKS_BAD_STATE;
+ }
+
// ASSUME A tensor operand always consists of fp32 values
// NOTE We do not care about scala operands.
assert(!(type->dimensionCount > 1) || (type->type == 3 /* ANEURALNETWORKS_TENSOR_FLOAT32 */));
return ANEURALNETWORKS_UNEXPECTED_NULL;
}
+ if (model->isFinished())
+ {
+ return ANEURALNETWORKS_BAD_STATE;
+ }
+
const internal::tflite::operand::Index ind{index};
auto &obj = model->deref().operands().at(ind);
return ANEURALNETWORKS_UNEXPECTED_NULL;
}
+ if (model->isFinished())
+ {
+ return ANEURALNETWORKS_BAD_STATE;
+ }
+
const internal::tflite::operand::Index ind{index};
auto &obj = model->deref().operands().at(ind);
return ANEURALNETWORKS_UNEXPECTED_NULL;
}
+ if (model->isFinished())
+ {
+ return ANEURALNETWORKS_BAD_STATE;
+ }
+
switch (type)
{
case ANEURALNETWORKS_CONV_2D:
return ANEURALNETWORKS_UNEXPECTED_NULL;
}
+ if (model->isFinished())
+ {
+ return ANEURALNETWORKS_BAD_STATE;
+ }
+
switch (type)
{
default:
return ANEURALNETWORKS_UNEXPECTED_NULL;
}
+ if (model->isFinished())
+ {
+ return ANEURALNETWORKS_BAD_STATE;
+ }
+
// NOTE ::internal::tflite::operand::Index uses int as its underlying type as various NNAPI
// functions such as ANeuralNetworksModel_setOperandValue use int to represent operand index
//
return ANEURALNETWORKS_UNEXPECTED_NULL;
}
- return ANEURALNETWORKS_NO_ERROR;
+ return model->finish();
}
-#include <NeuralNetworks.h>
-#include <NeuralNetworksEx.h>
-
#include "model.h"
//
// ANeuralNetworksModel
//
-ANeuralNetworksModel::ANeuralNetworksModel() : _model{new internal::tflite::Model}
+ANeuralNetworksModel::ANeuralNetworksModel() : _model{new internal::tflite::Model}, _finished(false)
{
// DO NOTHING
}
+
+ResultCode ANeuralNetworksModel::finish()
+{
+ // This function must only be called once for a given model
+ if (isFinished())
+ {
+ return ANEURALNETWORKS_BAD_STATE;
+ }
+
+ _finished = true;
+
+ return ANEURALNETWORKS_NO_ERROR;
+}
#ifndef __MODEL_H__
#define __MODEL_H__
+#include <NeuralNetworks.h>
+
#include "internal/Model.h"
struct ANeuralNetworksModel
public:
internal::tflite::Model &deref(void) { return *_model; }
+ ResultCode finish();
+ bool isFinished() { return _finished; }
public:
void release(std::shared_ptr<internal::tflite::Model> &model) { model = _model; }
private:
std::shared_ptr<internal::tflite::Model> _model;
+ bool _finished;
};
#endif // __MODEL_H__