86 lines
2.3 KiB
C++
86 lines
2.3 KiB
C++
#ifndef __BUFFERED_FILE_READER_H
|
|
#define __BUFFERED_FILE_READER_H
|
|
|
|
#include <fs/file.h>
|
|
#include <fs/systemlog.h>
|
|
#include <memory.h>
|
|
#include <types/types.h>
|
|
|
|
#include "BufferedReader.h"
|
|
#include "tsPacket.h"
|
|
#include "vodCoreException.h"
|
|
|
|
// Used to automatically switch to reading the next file in a given list
|
|
class FileListIterator : public FileNameIterator
|
|
{
|
|
public:
|
|
FileListIterator() : m_index(0) {}
|
|
~FileListIterator() override {}
|
|
|
|
std::string getNextName() override
|
|
{
|
|
if (++m_index < m_files.size())
|
|
return m_files[m_index];
|
|
/*
|
|
for (unsigned i = 0; i < m_files.size()-1; i++)
|
|
if (m_files[i] == fileName)
|
|
return m_files[i+1];
|
|
*/
|
|
return "";
|
|
}
|
|
|
|
void addFile(const std::string& fileName)
|
|
{
|
|
/*
|
|
for(unsigned i = 0; i < m_files.size(); i++)
|
|
if (m_files[i] == fileName)
|
|
THROW(ERR_FILE_EXISTS, "File name " << fileName << " already exists.");
|
|
*/
|
|
m_files.push_back(fileName);
|
|
}
|
|
|
|
private:
|
|
std::vector<std::string> m_files;
|
|
size_t m_index;
|
|
};
|
|
|
|
struct FileReaderData : public ReaderData
|
|
{
|
|
typedef ReaderData base_class;
|
|
|
|
public:
|
|
FileReaderData(uint32_t blockSize, uint32_t allocSize) : m_fileHeaderSize(0) {}
|
|
|
|
~FileReaderData() override {}
|
|
|
|
uint32_t readBlock(uint8_t* buffer, int max_size) override
|
|
{
|
|
int rez = 0;
|
|
rez = m_file.read(buffer, max_size);
|
|
|
|
return rez;
|
|
}
|
|
|
|
bool openStream() override;
|
|
bool closeStream() override { return m_file.close(); }
|
|
bool incSeek(int64_t offset) override { return m_file.seek(offset, File::SeekMethod::smCurrent) != uint64_t(-1); }
|
|
|
|
public:
|
|
File m_file;
|
|
uint32_t m_fileHeaderSize;
|
|
};
|
|
|
|
class BufferedFileReader : public BufferedReader
|
|
{
|
|
public:
|
|
BufferedFileReader(uint32_t blockSize, uint32_t allocSize = 0, uint32_t prereadThreshold = 0);
|
|
|
|
bool openStream(uint32_t readerID, const char* streamName, int pid = 0, const CodecInfo* codecInfo = 0) override;
|
|
bool gotoByte(uint32_t readerID, uint64_t seekDist) override;
|
|
|
|
protected:
|
|
ReaderData* intCreateReader() override { return new FileReaderData(m_blockSize, m_allocSize); }
|
|
};
|
|
|
|
#endif
|