20#include <gtest/gtest.h>
21class GTEST_TEST_CLASS_NAME_(MultiRecordFileReaderTest, multiFile);
27#include <vrs/IndexRecord.h>
28#include <vrs/RecordFileReader.h>
64 int open(
const vector<string>& paths);
71 int open(
const vector<FileSpec>& fileSpecs);
78 int open(
const string& path) {
79 return open(vector<string>{path});
88 return open(vector<FileSpec>{fileSpec});
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 vector<unique_ptr<RecordFileReader>>&
getReaders()
const {
485 static unique_ptr<RecordFileReader> reduceToRecordFileReader_TEMPORARY_API_TO_DELETE(
489 using StreamIdToUniqueIdMap = map<StreamId, UniqueStreamId>;
490 using StreamIdReaderPair = 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 vector<unique_ptr<RecordFileReader>> readers_;
546 unique_ptr<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_;
557 vector<string> relatedFileTags_;
560 FRIEND_TEST(::MultiRecordFileReaderTest, multiFile);
Facilitates reading multiple VRS files simultaneously. Records are sorted by timestamps across all th...
Definition MultiRecordFileReader.h:39
int open(const vector< string > &paths)
Definition MultiRecordFileReader.cpp:54
const IndexRecord::RecordInfo * getRecordByTime(double timestamp) const
Definition MultiRecordFileReader.cpp:579
bool mightContainImages(UniqueStreamId uniqueStreamId) const
Definition MultiRecordFileReader.cpp:290
const IndexRecord::RecordInfo * getNearestRecordByTime(double timestamp, double epsilon, StreamId streamId={}, Record::Type recordType=Record::Type::UNDEFINED) const
Definition MultiRecordFileReader.cpp:626
UniqueStreamId getUniqueStreamId(const IndexRecord::RecordInfo *record) const
Definition MultiRecordFileReader.cpp:657
bool isRecordAvailableOrPrefetch(const IndexRecord::RecordInfo &record) const
Definition MultiRecordFileReader.cpp:559
bool purgeFileCache()
Definition MultiRecordFileReader.cpp:568
bool setCachingStrategy(CachingStrategy cachingStrategy)
Definition MultiRecordFileReader.cpp:516
bool mightContainAudio(UniqueStreamId uniqueStreamId) const
Definition MultiRecordFileReader.cpp:304
UniqueStreamId getStreamForTag(const string &tagName, const string &tag, RecordableTypeId typeId=RecordableTypeId::Undefined) const
Definition MultiRecordFileReader.cpp:255
bool readFirstConfigurationRecord(UniqueStreamId uniqueStreamId, StreamPlayer *streamPlayer=nullptr)
Definition MultiRecordFileReader.cpp:680
unique_ptr< FileHandler > getFileHandler() const
Definition MultiRecordFileReader.cpp:650
const string & getOriginalRecordableTypeName(UniqueStreamId streamId) const
Definition MultiRecordFileReader.h:279
uint32_t getRecordFormats(UniqueStreamId streamId, RecordFormatMap &outFormats) const
Definition MultiRecordFileReader.cpp:469
bool prefetchRecordSequence(const vector< const IndexRecord::RecordInfo * > &records, bool clearSequence=true)
Definition MultiRecordFileReader.cpp:535
bool isOpened() const
Definition MultiRecordFileReader.h:113
const IndexRecord::RecordInfo * getFirstRecord(Record::Type recordType) const
Definition MultiRecordFileReader.cpp:415
const IndexRecord::RecordInfo * getLastRecord(UniqueStreamId streamId, Record::Type recordType) const
Definition MultiRecordFileReader.cpp:403
const vector< const IndexRecord::RecordInfo * > & getIndex(UniqueStreamId streamId) const
Definition MultiRecordFileReader.cpp:438
uint32_t getRecordSize(uint32_t globalIndex) const
Definition MultiRecordFileReader.cpp:354
int close()
Definition MultiRecordFileReader.cpp:102
void setStreamPlayer(UniqueStreamId streamId, StreamPlayer *streamPlayer)
Definition MultiRecordFileReader.cpp:455
int open(const string &path)
Definition MultiRecordFileReader.h:78
const IndexRecord::RecordInfo * getRecord(uint32_t globalIndex) const
Definition MultiRecordFileReader.cpp:343
UniqueStreamId getStreamForSerialNumber(const string &serialNumber) const
Definition MultiRecordFileReader.cpp:274
int open(const FileSpec &fileSpec)
Definition MultiRecordFileReader.h:87
const string & getSerialNumber(UniqueStreamId uniqueStreamId) const
Definition MultiRecordFileReader.cpp:220
int readRecord(const IndexRecord::RecordInfo &recordInfo)
Definition MultiRecordFileReader.cpp:487
uint32_t getRecordIndex(const IndexRecord::RecordInfo *record) const
Definition MultiRecordFileReader.cpp:318
const string & getTag(const string &name) const
Definition MultiRecordFileReader.h:144
int64_t getTotalSourceSize() const
Definition MultiRecordFileReader.cpp:672
const string & getTag(UniqueStreamId uniqueStreamId, const string &name) const
Definition MultiRecordFileReader.h:152
vector< pair< string, int64_t > > getFileChunks() const
Definition MultiRecordFileReader.cpp:200
bool readFirstConfigurationRecords(StreamPlayer *streamPlayer=nullptr)
Definition MultiRecordFileReader.cpp:698
UniqueStreamId getStreamForName(const string &name) const
Definition MultiRecordFileReader.cpp:240
CachingStrategy getCachingStrategy() const
Definition MultiRecordFileReader.cpp:528
const map< string, string > & getTags() const
Definition MultiRecordFileReader.h:361
bool readFirstConfigurationRecordsForType(RecordableTypeId typeId, StreamPlayer *streamPlayer=nullptr)
Definition MultiRecordFileReader.cpp:709
const set< UniqueStreamId > & getStreams() const
Definition MultiRecordFileReader.cpp:124
const vector< unique_ptr< RecordFileReader > > & getReaders() const
Get the list of RecordFileReader objects used to read all the streams.
Definition MultiRecordFileReader.h:481
uint32_t getRecordCount() const
Definition MultiRecordFileReader.cpp:139
const string & getFlavor(UniqueStreamId uniqueStreamId) const
Definition MultiRecordFileReader.cpp:216
void setRelatedFileTags(vector< string > &&tags)
Definition MultiRecordFileReader.cpp:98
Type
Definition Record.h:90
static const string & getOriginalNameTagName()
Definition Recordable.h:208
VRS stream identifier class.
Definition StreamId.h:249
Class designed to receive record data when reading a VRS file.
Definition StreamPlayer.h:53
Definition Compressor.cpp:112
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:630
CachingStrategy
Caching strategy requests.
Definition FileHandler.h:38
RecordableTypeId
VRS stream type or class identifier enum.
Definition StreamId.h:51
@ 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:40
Helper class to hold the details about a single VRS record in memory.
Definition IndexRecord.h:109