| 327 | } |
| 328 | |
| 329 | bool CVTracker::SaveTrackedData(){ |
| 330 | using std::ios; |
| 331 | |
| 332 | // Create tracker message |
| 333 | pb_tracker::Tracker trackerMessage; |
| 334 | |
| 335 | // Iterate over all frames data and save in protobuf message |
| 336 | for(std::map<size_t,FrameData>::iterator it=trackedDataById.begin(); it!=trackedDataById.end(); ++it){ |
| 337 | FrameData fData = it->second; |
| 338 | pb_tracker::Frame* pbFrameData; |
| 339 | AddFrameDataToProto(trackerMessage.add_frame(), fData); |
| 340 | } |
| 341 | |
| 342 | // Add timestamp |
| 343 | *trackerMessage.mutable_last_updated() = TimeUtil::SecondsToTimestamp(time(NULL)); |
| 344 | |
| 345 | { |
| 346 | // Write the new message to disk. |
| 347 | std::fstream output(protobuf_data_path, ios::out | ios::trunc | ios::binary); |
| 348 | if (!trackerMessage.SerializeToOstream(&output)) { |
| 349 | std::cerr << "Failed to write protobuf message." << std::endl; |
| 350 | return false; |
| 351 | } |
| 352 | } |
| 353 | |
| 354 | // Delete all global objects allocated by libprotobuf. |
| 355 | google::protobuf::ShutdownProtobufLibrary(); |
| 356 | |
| 357 | return true; |
| 358 | |
| 359 | } |
| 360 | |
| 361 | // Add frame tracked data into protobuf message. |
| 362 | void CVTracker::AddFrameDataToProto(pb_tracker::Frame* pbFrameData, FrameData& fData) { |
no outgoing calls
no test coverage detected