| 310 | } |
| 311 | |
| 312 | const IBlobNameToTensor* CaffeParser::parseBuffers(const uint8_t* deployBuffer, |
| 313 | std::size_t deployLength, |
| 314 | const uint8_t* modelBuffer, |
| 315 | std::size_t modelLength, |
| 316 | INetworkDefinition& network, |
| 317 | DataType weightType) noexcept |
| 318 | { |
| 319 | mDeploy = std::unique_ptr<trtcaffe::NetParameter>(new trtcaffe::NetParameter); |
| 320 | google::protobuf::io::ArrayInputStream deployStream(deployBuffer, deployLength); |
| 321 | if (!google::protobuf::TextFormat::Parse(&deployStream, mDeploy.get())) |
| 322 | { |
| 323 | RETURN_AND_LOG_ERROR(nullptr, "Could not parse deploy file"); |
| 324 | } |
| 325 | |
| 326 | if (modelBuffer) |
| 327 | { |
| 328 | mModel = std::unique_ptr<trtcaffe::NetParameter>(new trtcaffe::NetParameter); |
| 329 | google::protobuf::io::ArrayInputStream modelStream(modelBuffer, modelLength); |
| 330 | google::protobuf::io::CodedInputStream codedModelStream(&modelStream); |
| 331 | #if GOOGLE_PROTOBUF_VERSION >= 3011000 |
| 332 | codedModelStream.SetTotalBytesLimit(modelLength); |
| 333 | #else |
| 334 | // Note: This WARs the very low default size limit (64MB) |
| 335 | codedModelStream.SetTotalBytesLimit(modelLength, -1); |
| 336 | #endif |
| 337 | if (!mModel->ParseFromCodedStream(&codedModelStream)) |
| 338 | { |
| 339 | RETURN_AND_LOG_ERROR(nullptr, "Could not parse model file"); |
| 340 | } |
| 341 | } |
| 342 | |
| 343 | return parse(network, weightType, modelBuffer != nullptr); |
| 344 | } |
| 345 | |
| 346 | const IBlobNameToTensor* CaffeParser::parse(const char* deployFile, |
| 347 | const char* modelFile, |