20#include <gtest/gtest.h>
21class GTEST_TEST_CLASS_NAME_(MultiRecordFileReaderTest, multiFile);
27#include <vrs/IndexRecord.h>
28#include <vrs/RecordFileReader.h>
61 int open(
const std::vector<std::string>& paths);
68 int open(
const std::vector<FileSpec>& fileSpecs);
75 int open(
const std::string& path) {
76 return open(std::vector<std::string>{path});
85 return open(std::vector<FileSpec>{fileSpec});
106 const set<UniqueStreamId>&
getStreams()
const;
141 const string&
getTag(
const string& name)
const {
142 return getTag(fileTags_, name);
201 const string& tagName,
229 uint32_t
getRecordIndex(
const IndexRecord::RecordInfo* record)
const;
234 const IndexRecord::RecordInfo*
getRecord(uint32_t globalIndex)
const;
256 const IndexRecord::RecordInfo*
341 const vector<const IndexRecord::RecordInfo*>& records,
342 bool clearSequence =
true);
444 StreamPlayer* streamPlayer =
nullptr);
475 StreamPlayer* streamPlayer =
nullptr);
478 const std::vector<unique_ptr<RecordFileReader>>&
getReaders()
const {
482 static std::unique_ptr<RecordFileReader> reduceToRecordFileReader_TEMPORARY_API_TO_DELETE(
486 using StreamIdToUniqueIdMap = map<StreamId, UniqueStreamId>;
487 using StreamIdReaderPair = std::pair<StreamId, RecordFileReader*>;
491 bool hasSingleFile()
const {
492 return readers_.size() == 1;
499 bool areFilesRelated()
const;
501 void initializeUniqueStreamIds();
504 void createConsolidatedIndex();
506 void initializeFileTags();
509 UniqueStreamId generateUniqueStreamId(StreamId duplicateStreamId)
const;
511 const StreamIdReaderPair* getStreamIdReaderPair(
UniqueStreamId uniqueStreamId)
const;
513 static const string&
getTag(
const map<string, string>& tags,
const string& name);
517 RecordFileReader* getReader(
const IndexRecord::RecordInfo* record)
const;
522 UniqueStreamId getUniqueStreamIdInternal(
const IndexRecord::RecordInfo* record)
const;
523 UniqueStreamId getUniqueStreamIdInternal(
const RecordFileReader* reader, StreamId streamId)
const;
525 bool timeLessThan(
const IndexRecord::RecordInfo* lhs,
const IndexRecord::RecordInfo* rhs)
const;
527 class RecordComparatorGT {
529 explicit RecordComparatorGT(
const MultiRecordFileReader& parent) : parent_(parent) {}
531 bool operator()(
const IndexRecord::RecordInfo* lhs,
const IndexRecord::RecordInfo* rhs)
const {
532 return parent_.timeLessThan(rhs, lhs);
536 const MultiRecordFileReader& parent_;
539 bool isOpened_{
false};
541 std::vector<unique_ptr<RecordFileReader>> readers_;
543 unique_ptr<std::vector<const IndexRecord::RecordInfo*>> recordIndex_;
546 set<UniqueStreamId> uniqueStreamIds_;
547 map<const RecordFileReader*, StreamIdToUniqueIdMap> readerStreamIdToUniqueMap_;
548 map<UniqueStreamId, StreamIdReaderPair> uniqueToStreamIdReaderPairMap_;
550 vector<string> filePaths_;
551 const RecordComparatorGT recordComparatorGT_{*
this};
552 map<string, string> fileTags_;
554 vector<string> relatedFileTags_;
557 FRIEND_TEST(::MultiRecordFileReaderTest, multiFile);
Facilitates reading multiple VRS files simultaneously. Records are sorted by timestamps across all th...
Definition MultiRecordFileReader.h:36
int open(const std::vector< FileSpec > &fileSpecs)
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
void setRelatedFileTags(std::vector< std::string > &&tags)
Definition MultiRecordFileReader.cpp:98
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
int open(const std::string &path)
Definition MultiRecordFileReader.h:75
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
std::unique_ptr< FileHandler > getFileHandler() const
Definition MultiRecordFileReader.cpp:650
const string & getOriginalRecordableTypeName(UniqueStreamId streamId) const
Definition MultiRecordFileReader.h:276
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:110
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
const std::vector< unique_ptr< RecordFileReader > > & getReaders() const
Get the list of RecordFileReader objects used to read all the streams.
Definition MultiRecordFileReader.h:478
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:84
int open(const std::vector< std::string > &paths)
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:141
int64_t getTotalSourceSize() const
Definition MultiRecordFileReader.cpp:672
const string & getTag(UniqueStreamId uniqueStreamId, const string &name) const
Definition MultiRecordFileReader.h:149
vector< std::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:358
bool readFirstConfigurationRecordsForType(RecordableTypeId typeId, StreamPlayer *streamPlayer=nullptr)
Definition MultiRecordFileReader.cpp:709
const set< UniqueStreamId > & getStreams() const
Definition MultiRecordFileReader.cpp:124
uint32_t getRecordCount() const
Definition MultiRecordFileReader.cpp:139
const string & getFlavor(UniqueStreamId uniqueStreamId) const
Definition MultiRecordFileReader.cpp:216
Type
Definition Record.h:88
static const string & getOriginalNameTagName()
Definition Recordable.h:208
VRS stream identifier class.
Definition StreamId.h:244
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:630
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