template<typename T> static bool LoadVisionFile(const char* fileName, int cameraId, int64_t minTime, int64_t maxTime, vector<T>& items) { auto f = fopen(fileName, "rb"); if (!f) { fprintf(stderr, "Unable to open source file \"%s\".", fileName); return false; } bool result = true; size_t bufferSize = 1024 * 100; uint8_t* buffer = new uint8_t[bufferSize]; for (;;) { uint32_t size; if (1 != fread(&size, sizeof(size), 1, f)) break; size = SwapEndianess(size); if (size > (20 * 1024 * 1024)) { fprintf(stderr, "Invalid size value in source file."); result = false; break; } if (bufferSize < size) { delete buffer; bufferSize = size; buffer = new uint8_t[bufferSize]; } if (1 != fread(buffer, size, 1, f)) { fprintf(stderr, "Unable to read item from source file."); result = false; break; } try { TeslaStructReader rd(buffer, size); if (rd.GetByte(1) != cameraId) continue; auto time = rd.GetTimestamp(0); if (time < minTime) continue; if (time > maxTime) break; minTime = time; items.emplace_back(); LoadVisionItem(rd, items.back()); } catch (const exception& ex) { fprintf(stderr, "Error while reading source item: %s.", ex.what()); result = false; break; } } fclose(f); delete buffer; return result; }