27#include "FileFormat.h"
28#include "FileHandler.h"
29#include "IndexRecord.h"
31#include "RecordFormat.h"
32#include "RecordReaders.h"
33#include "Recordable.h"
94 int openFile(
const string& filePath,
bool autoWriteFixedIndex =
false);
135 const vector<const IndexRecord::RecordInfo*>& records,
136 bool clearSequence =
true);
165 bool setupPlayer =
false);
239 const string& tagName,
249 const vector<IndexRecord::RecordInfo>&
getIndex()
const {
256 const vector<const IndexRecord::RecordInfo*>&
getIndex(
StreamId streamId)
const;
261 return static_cast<uint32_t
>(recordIndex_.size());
344 uint32_t
getRecordIndex(
const IndexRecord::RecordInfo* record)
const;
356 uint32_t
getRecordSize(uint32_t recordIndex,
bool useBoundaries =
true)
const;
395 StreamPlayer* streamPlayer =
nullptr);
406 const string&
getTag(
const string& name)
const {
407 return getTag(fileTags_, name);
485 uint32_t formatVersion,
503 return file_->setCachingStrategy(cachingStrategy);
506 return file_->getCachingStrategy();
511 return file_->setStatsCallback(statsCallback);
519 return file_->purgeCache();
546 using ParentType = std::array<uint32_t, enumCount<Record::Type>()>;
552 inline uint32_t operator[](
Record::Type recordType)
const {
553 return ParentType::operator[](
static_cast<uint32_t
>(recordType));
556 return ParentType::operator[](
static_cast<uint32_t
>(recordType));
558 uint32_t totalCount()
const;
564 int doOpenFile(
const FileSpec& fileSpec,
bool autoWriteFixedIndex,
bool checkSignatureOnly);
568 bool autoWriteFixedIndex,
570 bool readConfigRecords(
571 const set<const IndexRecord::RecordInfo*>& configRecords,
574 static const string&
getTag(
const map<string, string>& tags,
const string& name);
577 int64_t getFollowingRecordOffset(uint32_t recordIndex,
bool useBoundaries)
const;
578 mutable vector<int64_t> recordBoundaries_;
579 mutable map<uint32_t, int64_t> recordLimits_;
582 std::unique_ptr<FileHandler> file_;
587 set<StreamId> streamIds_;
588 map<StreamId, StreamTags> streamTags_;
589 map<string, string> fileTags_;
590 vector<IndexRecord::RecordInfo> recordIndex_;
591 mutable map<StreamId, RecordTypeCounter> streamRecordCounts_;
594 map<StreamId, StreamPlayer*> streamPlayers_;
597 unique_ptr<ProgressLogger> defaultProgressLogger_;
599 unique_ptr<std::thread> detailsSaveThread_;
600 mutable map<StreamId, vector<const IndexRecord::RecordInfo*>> streamIndex_;
603 mutable map<pair<StreamId, Record::Type>, pair<uint32_t, size_t>> lastRequest_;
604 int64_t endOfUserRecordsOffset_{};
605 uint32_t recordHeaderSize_{};
606 bool fileHasAnIndex_{};
617 const std::vector<const IndexRecord::RecordInfo*>& index,
RecordReader specialized to read compressed records. For VRS internal usage only.
Definition RecordReaders.h:115
Helper to identify a particular content block within a file.
Definition RecordFormat.h:600
ProgressLogger class to be notified of some process' progress.
Definition ProgressLogger.h:31
Definition RecordFileReader.h:545
The class to read VRS files.
Definition RecordFileReader.h:66
uint32_t getRecordFormats(StreamId streamId, RecordFormatMap &outFormats) const
Definition RecordFileReader.cpp:972
int readAllRecords()
Definition RecordFileReader.cpp:1076
void setStreamPlayer(StreamId streamId, StreamPlayer *streamPlayer)
Definition RecordFileReader.cpp:106
bool purgeFileCache()
Definition RecordFileReader.h:518
uint32_t getRecordSize(uint32_t recordIndex, bool useBoundaries=true) const
Definition RecordFileReader.cpp:580
void buildRecordBoundaries(bool boundariesAndLimits=false) const
private, for testing only
Definition RecordFileReader.cpp:503
const string & getSerialNumber(StreamId streamId) const
Definition RecordFileReader.cpp:1016
int closeFile()
Definition RecordFileReader.cpp:477
bool prefetchRecordSequence(const vector< const IndexRecord::RecordInfo * > &records, bool clearSequence=true)
Definition RecordFileReader.cpp:591
const string & getTag(StreamId streamId, const string &name) const
Definition RecordFileReader.h:425
bool isVrsFile(const string &filePath)
Definition RecordFileReader.cpp:200
bool isRecordAvailableOrPrefetch(const IndexRecord::RecordInfo &recordInfo)
Definition RecordFileReader.cpp:1098
bool isOpened() const
Definition RecordFileReader.cpp:192
const string & getFlavor(StreamId streamId) const
Definition RecordFileReader.cpp:1012
const map< StreamId, StreamTags > & getStreamTags() const
Get the tags for all the streams at once.
Definition RecordFileReader.h:417
StreamId getStreamForType(RecordableTypeId typeId, uint32_t indexNumber=0) const
Definition RecordFileReader.cpp:624
const IndexRecord::RecordInfo * getRecord(uint32_t globalIndex) const
Definition RecordFileReader.cpp:683
vector< std::pair< string, int64_t > > getFileChunks() const
Definition RecordFileReader.cpp:1090
StreamId getStreamForFlavor(RecordableTypeId typeId, const string &flavor, uint32_t indexNumber=0) const
Definition RecordFileReader.cpp:647
bool getRecordFormat(StreamId streamId, Record::Type recordType, uint32_t formatVersion, RecordFormat &outFormat) const
Definition RecordFileReader.cpp:957
uint32_t getRecordIndex(const IndexRecord::RecordInfo *record) const
Definition RecordFileReader.cpp:849
static int vrsFilePathToFileSpec(const string &filePath, FileSpec &outFileSpec, bool checkLocalFile=false)
Definition RecordFileReader.cpp:123
double getLastDataRecordTime() const
Definition RecordFileReader.cpp:904
double getFirstDataRecordTime() const
Definition RecordFileReader.cpp:895
void setOpenProgressLogger(ProgressLogger *progressLogger)
Definition RecordFileReader.cpp:86
int openFile(const string &filePath, bool autoWriteFixedIndex=false)
Definition RecordFileReader.cpp:117
const IndexRecord::RecordInfo * getLastRecord(StreamId streamId, Record::Type recordType) const
Definition RecordFileReader.cpp:721
bool hasIndex() const
Definition RecordFileReader.cpp:609
bool readFirstConfigurationRecords(StreamPlayer *streamPlayer=nullptr)
Definition RecordFileReader.cpp:937
const vector< IndexRecord::RecordInfo > & getIndex() const
Definition RecordFileReader.h:249
bool mightContainAudio(StreamId streamId) const
Definition RecordFileReader.cpp:1044
bool readFirstConfigurationRecord(StreamId streamId, StreamPlayer *streamPlayer=nullptr)
Definition RecordFileReader.cpp:933
int readRecord(const IndexRecord::RecordInfo &recordInfo)
Definition RecordFileReader.cpp:1130
const string & getTag(const string &name) const
Definition RecordFileReader.h:406
bool setCachingStrategy(CachingStrategy cachingStrategy)
Definition RecordFileReader.h:502
bool setStatsCallback(const FileHandler::CacheStatsCallbackFunction &statsCallback)
Set callback function for cache stats.
Definition RecordFileReader.h:510
bool mightContainImages(StreamId streamId) const
Definition RecordFileReader.cpp:1040
const string & getOriginalRecordableTypeName(StreamId streamId) const
Definition RecordFileReader.cpp:1008
int clearStreamPlayers()
Definition RecordFileReader.cpp:498
StreamId getStreamForSerialNumber(const string &streamSerialNumber) const
Find the stream with the specified stream serial number.
Definition RecordFileReader.cpp:674
void setFileHandler(std::unique_ptr< FileHandler > fileHandler)
Definition RecordFileReader.cpp:96
const map< string, string > & getTags() const
Definition RecordFileReader.h:399
std::unique_ptr< FileHandler > getFileHandler() const
Definition RecordFileReader.cpp:102
const IndexRecord::RecordInfo * getNearestRecordByTime(double timestamp, double epsilon, StreamId streamId={}, Record::Type recordType=Record::Type::UNDEFINED) const
Definition RecordFileReader.cpp:795
bool readFirstConfigurationRecordsForType(RecordableTypeId typeId, StreamPlayer *streamPlayer=nullptr)
Definition RecordFileReader.cpp:945
StreamId getStreamForName(const string &name) const
Definition RecordFileReader.cpp:634
StreamId getStreamForTag(const string &tagName, const string &tag, RecordableTypeId typeId=RecordableTypeId::Undefined) const
Definition RecordFileReader.cpp:661
string getStreamsSignature() const
Definition RecordFileReader.cpp:1020
const set< StreamId > & getStreams() const
Definition RecordFileReader.h:193
int64_t getTotalSourceSize() const
Definition RecordFileReader.cpp:1094
const IndexRecord::RecordInfo * getRecordByTime(double timestamp) const
Definition RecordFileReader.cpp:737
uint32_t getRecordCount() const
Definition RecordFileReader.h:260
uint32_t getRecordStreamIndex(const IndexRecord::RecordInfo *record) const
Definition RecordFileReader.cpp:856
Type
Definition Record.h:88
VRS stream identifier class.
Definition StreamId.h:242
Class designed to receive record data when reading a VRS file.
Definition StreamPlayer.h:53
RecordReader specialized to read uncompressed records. For VRS internal usage only.
Definition RecordReaders.h:107
Definition AsyncDiskFileChunk.hpp:49
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:590
CachingStrategy
Caching strategy requests.
Definition FileHandler.h:37
RecordableTypeId
VRS stream type or class identifier enum.
Definition StreamId.h:49
@ Undefined
Value used for default initializations and marking undefined situations.
ContentType
Type of a record's block.
Definition RecordFormat.h:35
constexpr const char * kFailFastOnIncompleteIndex
Definition RecordFileReader.h:51
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