20#include <gtest/gtest.h>
21class GTEST_TEST_CLASS_NAME_(MultiRecordFileReaderTest, multiFile);
27#include <vrs/IndexRecord.h>
28#include <vrs/RecordFileReader.h>
29#include <vrs/TagConventions.h>
62 int open(
const std::vector<std::string>& paths);
73 int open(
const std::vector<FileSpec>& fileSpecs);
80 int open(
const std::string& path) {
81 return open(std::vector<std::string>{path});
90 return open(std::vector<FileSpec>{fileSpec});
96 tag_conventions::kCaptureTimeEpoch,
97 tag_conventions::kSessionId};
109 const set<UniqueStreamId>&
getStreams()
const;
144 const string&
getTag(
const string& name)
const {
145 return getTag(fileTags_, name);
204 const string& tagName,
232 uint32_t
getRecordIndex(
const IndexRecord::RecordInfo* record)
const;
237 const IndexRecord::RecordInfo*
getRecord(uint32_t globalIndex)
const;
259 const IndexRecord::RecordInfo*
344 const vector<const IndexRecord::RecordInfo*>& records,
345 bool clearSequence =
true);
447 StreamPlayer* streamPlayer =
nullptr);
478 StreamPlayer* streamPlayer =
nullptr);
481 const std::vector<unique_ptr<RecordFileReader>>&
getReaders()
const {
485 static std::unique_ptr<RecordFileReader> reduceToRecordFileReader_TEMPORARY_API_TO_DELETE(
489 using StreamIdToUniqueIdMap = map<StreamId, UniqueStreamId>;
490 using StreamIdReaderPair = std::pair<StreamId, RecordFileReader*>;
494 bool hasSingleFile()
const {
495 return readers_.size() == 1;
502 bool areFilesRelated()
const;
504 void initializeUniqueStreamIds();
507 void createConsolidatedIndex();
509 void initializeFileTags();
512 UniqueStreamId generateUniqueStreamId(StreamId duplicateStreamId)
const;
514 const StreamIdReaderPair* getStreamIdReaderPair(
UniqueStreamId uniqueStreamId)
const;
516 static const string&
getTag(
const map<string, string>& tags,
const string& name);
520 RecordFileReader* getReader(
const IndexRecord::RecordInfo* record)
const;
525 UniqueStreamId getUniqueStreamIdInternal(
const IndexRecord::RecordInfo* record)
const;
526 UniqueStreamId getUniqueStreamIdInternal(
const RecordFileReader* reader, StreamId streamId)
const;
528 bool timeLessThan(
const IndexRecord::RecordInfo* lhs,
const IndexRecord::RecordInfo* rhs)
const;
530 class RecordComparatorGT {
532 explicit RecordComparatorGT(
const MultiRecordFileReader& parent) : parent_(parent) {}
534 bool operator()(
const IndexRecord::RecordInfo* lhs,
const IndexRecord::RecordInfo* rhs)
const {
535 return parent_.timeLessThan(rhs, lhs);
539 const MultiRecordFileReader& parent_;
542 bool isOpened_{
false};
544 std::vector<unique_ptr<RecordFileReader>> readers_;
546 unique_ptr<std::vector<const IndexRecord::RecordInfo*>> recordIndex_;
549 set<UniqueStreamId> uniqueStreamIds_;
550 map<const RecordFileReader*, StreamIdToUniqueIdMap> readerStreamIdToUniqueMap_;
551 map<UniqueStreamId, StreamIdReaderPair> uniqueToStreamIdReaderPairMap_;
553 vector<string> filePaths_;
554 const RecordComparatorGT recordComparatorGT_{*
this};
555 map<string, string> fileTags_;
558 FRIEND_TEST(::MultiRecordFileReaderTest, multiFile);
Facilitates reading multiple VRS files simultaneously. Records are sorted by timestamps across all th...
Definition MultiRecordFileReader.h:37
int open(const std::vector< FileSpec > &fileSpecs)
const IndexRecord::RecordInfo * getRecordByTime(double timestamp) const
Definition MultiRecordFileReader.cpp:571
bool mightContainImages(UniqueStreamId uniqueStreamId) const
Definition MultiRecordFileReader.cpp:282
const IndexRecord::RecordInfo * getNearestRecordByTime(double timestamp, double epsilon, StreamId streamId={}, Record::Type recordType=Record::Type::UNDEFINED) const
Definition MultiRecordFileReader.cpp:618
UniqueStreamId getUniqueStreamId(const IndexRecord::RecordInfo *record) const
Definition MultiRecordFileReader.cpp:649
bool isRecordAvailableOrPrefetch(const IndexRecord::RecordInfo &record) const
Definition MultiRecordFileReader.cpp:551
bool purgeFileCache()
Definition MultiRecordFileReader.cpp:560
int open(const std::string &path)
Definition MultiRecordFileReader.h:80
bool setCachingStrategy(CachingStrategy cachingStrategy)
Definition MultiRecordFileReader.cpp:508
bool mightContainAudio(UniqueStreamId uniqueStreamId) const
Definition MultiRecordFileReader.cpp:296
UniqueStreamId getStreamForTag(const string &tagName, const string &tag, RecordableTypeId typeId=RecordableTypeId::Undefined) const
Definition MultiRecordFileReader.cpp:247
bool readFirstConfigurationRecord(UniqueStreamId uniqueStreamId, StreamPlayer *streamPlayer=nullptr)
Definition MultiRecordFileReader.cpp:672
std::unique_ptr< FileHandler > getFileHandler() const
Definition MultiRecordFileReader.cpp:642
const string & getOriginalRecordableTypeName(UniqueStreamId streamId) const
Definition MultiRecordFileReader.h:279
uint32_t getRecordFormats(UniqueStreamId streamId, RecordFormatMap &outFormats) const
Definition MultiRecordFileReader.cpp:461
bool prefetchRecordSequence(const vector< const IndexRecord::RecordInfo * > &records, bool clearSequence=true)
Definition MultiRecordFileReader.cpp:527
bool isOpened() const
Definition MultiRecordFileReader.h:113
const IndexRecord::RecordInfo * getFirstRecord(Record::Type recordType) const
Definition MultiRecordFileReader.cpp:407
const IndexRecord::RecordInfo * getLastRecord(UniqueStreamId streamId, Record::Type recordType) const
Definition MultiRecordFileReader.cpp:395
const vector< const IndexRecord::RecordInfo * > & getIndex(UniqueStreamId streamId) const
Definition MultiRecordFileReader.cpp:430
uint32_t getRecordSize(uint32_t globalIndex) const
Definition MultiRecordFileReader.cpp:346
int close()
Definition MultiRecordFileReader.cpp:94
void setStreamPlayer(UniqueStreamId streamId, StreamPlayer *streamPlayer)
Definition MultiRecordFileReader.cpp:447
const std::vector< unique_ptr< RecordFileReader > > & getReaders() const
Get the list of RecordFileReader objects used to read all the streams.
Definition MultiRecordFileReader.h:481
const IndexRecord::RecordInfo * getRecord(uint32_t globalIndex) const
Definition MultiRecordFileReader.cpp:335
UniqueStreamId getStreamForSerialNumber(const string &serialNumber) const
Definition MultiRecordFileReader.cpp:266
int open(const FileSpec &fileSpec)
Definition MultiRecordFileReader.h:89
int open(const std::vector< std::string > &paths)
const string & getSerialNumber(UniqueStreamId uniqueStreamId) const
Definition MultiRecordFileReader.cpp:212
int readRecord(const IndexRecord::RecordInfo &recordInfo)
Definition MultiRecordFileReader.cpp:479
uint32_t getRecordIndex(const IndexRecord::RecordInfo *record) const
Definition MultiRecordFileReader.cpp:310
const string & getTag(const string &name) const
Definition MultiRecordFileReader.h:144
int64_t getTotalSourceSize() const
Definition MultiRecordFileReader.cpp:664
const string & getTag(UniqueStreamId uniqueStreamId, const string &name) const
Definition MultiRecordFileReader.h:152
vector< std::pair< string, int64_t > > getFileChunks() const
Definition MultiRecordFileReader.cpp:192
bool readFirstConfigurationRecords(StreamPlayer *streamPlayer=nullptr)
Definition MultiRecordFileReader.cpp:690
UniqueStreamId getStreamForName(const string &name) const
Definition MultiRecordFileReader.cpp:232
CachingStrategy getCachingStrategy() const
Definition MultiRecordFileReader.cpp:520
const map< string, string > & getTags() const
Definition MultiRecordFileReader.h:361
bool readFirstConfigurationRecordsForType(RecordableTypeId typeId, StreamPlayer *streamPlayer=nullptr)
Definition MultiRecordFileReader.cpp:701
const set< UniqueStreamId > & getStreams() const
Definition MultiRecordFileReader.cpp:116
static const string kRelatedFileTags[]
Definition MultiRecordFileReader.h:95
uint32_t getRecordCount() const
Definition MultiRecordFileReader.cpp:131
const string & getFlavor(UniqueStreamId uniqueStreamId) const
Definition MultiRecordFileReader.cpp:208
Type
Definition Record.h:88
static const string & getOriginalNameTagName()
Definition Recordable.h:208
VRS stream identifier class.
Definition StreamId.h:243
Class designed to receive record data when reading a VRS file.
Definition StreamPlayer.h:53
Definition Compressor.cpp:113
map< pair< Record::Type, uint32_t >, RecordFormat > RecordFormatMap
Map a pair of record type/format version to a record format, for a particular stream.
Definition RecordFormat.h:624
CachingStrategy
Caching strategy requests.
Definition FileHandler.h:39
RecordableTypeId
VRS stream type or class identifier enum.
Definition StreamId.h:49
@ Undefined
Value used for default initializations and marking undefined situations.
Generalized file descriptor class, allowing the efficient representation of complex file objects,...
Definition FileSpec.h:37
Helper class to hold the details about a single VRS record in memory.
Definition IndexRecord.h:105