diff --git a/.vscode/settings.json b/.vscode/settings.json index 76c7c19..24c4aa5 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -88,7 +88,8 @@ "locale": "cpp", "__tree": "cpp", "queue": "cpp", - "stack": "cpp" + "stack": "cpp", + "shared_mutex": "cpp" }, "C_Cpp.errorSquiggles": "enabled" } \ No newline at end of file diff --git a/src/core/Frame.cpp b/src/core/Frame.cpp index 609b3e5..e1c1ba2 100644 --- a/src/core/Frame.cpp +++ b/src/core/Frame.cpp @@ -2,25 +2,21 @@ #include -template -Frame::Frame(std::byte* bytes, ssize_t rows, ssize_t cols) +IFrame::IFrame(std::byte* bytes, ssize_t rows, ssize_t cols, ssize_t bitdepth) { this->rows = rows; this->cols = cols; - data = new DataType[rows * cols]; - std::memcpy(data, bytes, sizeof(DataType) * rows * cols); + data = new std::byte[rows * cols*bitdepth/8]; + std::memcpy(data, bytes, bitdepth/8 * rows * cols); } -template -DataType Frame::get(int row, int col) { +std::byte* IFrame::get(int row, int col) { if (row < 0 || row >= rows || col < 0 || col >= cols) { std::cerr << "Invalid row or column index" << std::endl; return 0; } - return data[row * cols + col]; + return data+(row * cols + col)*bitdepth/8; } -template class Frame; -template class Frame; \ No newline at end of file diff --git a/src/core/Frame.hpp b/src/core/Frame.hpp index 87aa778..aa5d400 100644 --- a/src/core/Frame.hpp +++ b/src/core/Frame.hpp @@ -7,21 +7,30 @@ #include "defs.hpp" + /** * @brief Frame class to represent a single frame of data * model class * should be able to work with streams coming from files or network */ -template -class Frame { +class IFrame { - DataType* data{nullptr}; + std::byte* data{nullptr}; ssize_t rows{}; ssize_t cols{}; + ssize_t bitdepth{}; public: - Frame(std::byte* fp, ssize_t rows, ssize_t cols); - DataType get(int row, int col); - ~Frame(){ + IFrame(std::byte* fp, ssize_t rows, ssize_t cols, ssize_t bitdepth); + std::byte* get(int row, int col); + ~IFrame(){ delete[] data; } +}; + +template class Frame: public IFrame { + public: + Frame(std::byte* fp, ssize_t rows, ssize_t cols):IFrame(fp, rows, cols, sizeof(DataType)){} + DataType get(int row, int col){ + return *((DataType*) IFrame::get(row, col)); + } }; \ No newline at end of file diff --git a/src/file_io/file/FileHandler.hpp b/src/file_io/file/FileHandler.hpp new file mode 100644 index 0000000..e69de29 diff --git a/src/file_io/file/JsonFile.cpp b/src/file_io/file/JsonFile.cpp index f4c3f0e..c0ca62a 100644 --- a/src/file_io/file/JsonFile.cpp +++ b/src/file_io/file/JsonFile.cpp @@ -1,7 +1,8 @@ #include "JsonFile.hpp" #include -Frame JsonFile::get_frame(int frame_number){ +template +Frame JsonFile::get_frame(int frame_number){ int subfile_id=frame_number/max_frames_per_file; std::byte* buffer; size_t frame_size = subfiles[subfile_id]->bytes_per_frame(); @@ -11,7 +12,7 @@ Frame JsonFile::get_frame(int frame_number){ - auto f = Frame(buffer, rows, cols); + auto f = Frame(buffer, rows, cols); delete[] buffer; return f; diff --git a/src/file_io/file/JsonFile.hpp b/src/file_io/file/JsonFile.hpp index 41bd93b..b8a94f4 100644 --- a/src/file_io/file/JsonFile.hpp +++ b/src/file_io/file/JsonFile.hpp @@ -5,6 +5,9 @@ class JsonFile: public File { - Frame get_frame(int frame_number); + template + Frame get_frame(int frame_number); + + IFrame get_frame(int frame_number); }; \ No newline at end of file