return INFERENCE_ENGINE_ERROR_OUT_OF_MEMORY;
}
+ // find dynamic tensor
+ mIsDynamicTensorMode = false;
+ for (size_t i = 0; i < mInterpreter->subgraphs_size(); i++)
+ if (mInterpreter->subgraph(i)->HasDynamicTensors()) {
+ LOGI("Dynamic tensor mode is enabled");
+ mIsDynamicTensorMode = true;
+ }
+
return ret;
}
if (mInputLayers.empty()) {
SetInterpreterInfo();
}
+ if (mIsDynamicTensorMode)
+ return INFERENCE_ENGINE_ERROR_NONE;
for (auto& layer : mInputLayers) {
size_t size = 1;
SetInterpreterInfo();
}
+ if (mIsDynamicTensorMode)
+ return INFERENCE_ENGINE_ERROR_NONE;
+
for (auto& layer : mOutputLayers) {
inference_engine_tensor_buffer buffer;
size_t size = 1;
std::map<std::string, inference_engine_tensor_buffer> &output_buffers)
{
LOGI("ENTER");
+ if (mIsDynamicTensorMode)
+ for (auto &input_buffer : input_buffers) {
+ void *pBuff;
+ switch (mInterpreter->tensor(mInputLayerId[input_buffer.first])->type) {
+ case kTfLiteUInt8:
+ LOGI("type is kTfLiteUInt8");
+ pBuff = static_cast<void *>(mInterpreter->typed_tensor<uint8_t>(mInputLayerId[input_buffer.first]));
+ break;
+ case kTfLiteInt64:
+ LOGI("type is kTfLiteInt64");
+ pBuff = static_cast<void *>(mInterpreter->typed_tensor<int64_t>(mInputLayerId[input_buffer.first]));
+ break;
+ case kTfLiteFloat32:
+ LOGI("type is kTfLiteFloat32");
+ pBuff = static_cast<void *>(mInterpreter->typed_tensor<float>(mInputLayerId[input_buffer.first]));
+ break;
+ default:
+ LOGE("Not supported");
+ return INFERENCE_ENGINE_ERROR_NOT_SUPPORTED_FORMAT;
+ }
+ memcpy(pBuff, input_buffer.second.buffer, input_buffer.second.size);
+ }
+
TfLiteStatus status = mInterpreter->Invoke();
if (status != kTfLiteOk) {
return INFERENCE_ENGINE_ERROR_INVALID_OPERATION;
}
+ if (mIsDynamicTensorMode)
+ for (auto &output_buffer : output_buffers) {
+ void *pBuff;
+ switch (mInterpreter->tensor(mOutputLayerId[output_buffer.first])->type) {
+ case kTfLiteUInt8:
+ LOGI("type is kTfLiteUInt8");
+ pBuff = static_cast<void *>(mInterpreter->typed_tensor<uint8_t>(mOutputLayerId[output_buffer.first]));
+ break;
+ case kTfLiteInt64:
+ LOGI("type is kTfLiteInt64");
+ pBuff = static_cast<void *>(mInterpreter->typed_tensor<int64_t>(mOutputLayerId[output_buffer.first]));
+ break;
+ case kTfLiteFloat32:
+ LOGI("type is kTfLiteFloat32");
+ pBuff = static_cast<void *>(mInterpreter->typed_tensor<float>(mOutputLayerId[output_buffer.first]));
+ break;
+ default:
+ LOGE("Not supported");
+ return INFERENCE_ENGINE_ERROR_NOT_SUPPORTED_FORMAT;
+ }
+ memcpy(output_buffer.second.buffer, pBuff, output_buffer.second.size);
+ }
+
LOGI("LEAVE");
return INFERENCE_ENGINE_ERROR_NONE;
}