From 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d Mon Sep 17 00:00:00 2001 From: Jef Date: Tue, 24 Sep 2024 14:54:57 +0200 Subject: Initial community commit --- Src/nsmkv/file_mkv_reader.cpp | 55 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 Src/nsmkv/file_mkv_reader.cpp (limited to 'Src/nsmkv/file_mkv_reader.cpp') diff --git a/Src/nsmkv/file_mkv_reader.cpp b/Src/nsmkv/file_mkv_reader.cpp new file mode 100644 index 00000000..d2f3db17 --- /dev/null +++ b/Src/nsmkv/file_mkv_reader.cpp @@ -0,0 +1,55 @@ +#include "file_mkv_reader.h" + +MKVReaderFILE::MKVReaderFILE(FILE *f) : f(f) +{ +} +MKVReaderFILE::MKVReaderFILE(const wchar_t *filename) +{ + f = _wfopen(filename, L"rb"); +} + +int MKVReaderFILE::Read(void *buffer, size_t read_length, size_t *bytes_read) +{ + *bytes_read = fread(buffer, 1, read_length, f); + return nsmkv::READ_OK; +} + +int MKVReaderFILE::Peek(void *buffer, size_t read_length, size_t *bytes_read) +{ + *bytes_read = fread(buffer, 1, read_length, f); + fseek(f, (long)(-read_length), SEEK_CUR); + return nsmkv::READ_OK; +} + +int MKVReaderFILE::Seek(uint64_t position) +{ + fsetpos(f, (const fpos_t *)&position); + return nsmkv::READ_OK; +} + +uint64_t MKVReaderFILE::Tell() +{ + uint64_t pos; + fgetpos(f, (fpos_t *)&pos); + return pos; +} + +int MKVReaderFILE::Skip(uint64_t skip_bytes) +{ + _fseeki64(f, skip_bytes, SEEK_CUR); + return nsmkv::READ_OK; +} + +MKVReaderFILE::~MKVReaderFILE() +{ + fclose(f); +} + +uint64_t MKVReaderFILE::GetContentLength() +{ + uint64_t old = Tell(); + Seek(0); + uint64_t content_length = Tell(); + Seek(old); + return content_length; +} \ No newline at end of file -- cgit