/* Copyright (C) 2024 Carl Hetherington This file is part of DCP-o-matic. DCP-o-matic is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. DCP-o-matic is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with DCP-o-matic. If not, see . */ #include "frame_info.h" #include "info_file_handle.h" #include using std::shared_ptr; using std::vector; J2KFrameInfo::J2KFrameInfo(uint64_t offset_, uint64_t size_, vector hash_) : dcp::J2KFrameInfo(offset_, size_, std::move(hash_)) { } J2KFrameInfo::J2KFrameInfo(dcp::J2KFrameInfo const& info) : dcp::J2KFrameInfo(info) { } J2KFrameInfo::J2KFrameInfo(shared_ptr info_file) { read(info_file->get()); } J2KFrameInfo::J2KFrameInfo(shared_ptr info_file, Frame frame, Eyes eyes) { info_file->get().seek(position(frame, eyes), SEEK_SET); read(info_file->get()); } void J2KFrameInfo::read(dcp::File& file) { file.checked_read(&offset, sizeof(offset)); file.checked_read(&size, sizeof(size)); hash.resize(16); file.checked_read(hash.data(), 16); } long J2KFrameInfo::position(Frame frame, Eyes eyes) const { switch (eyes) { case Eyes::BOTH: return frame * _size_on_disk; case Eyes::LEFT: return frame * _size_on_disk * 2; case Eyes::RIGHT: return frame * _size_on_disk * 2 + _size_on_disk; default: DCPOMATIC_ASSERT(false); } DCPOMATIC_ASSERT(false); } /** @param frame reel-relative frame */ void J2KFrameInfo::write(shared_ptr info_file, Frame frame, Eyes eyes) const { info_file->get().seek(position(frame, eyes), SEEK_SET); info_file->get().checked_write(&offset, sizeof(offset)); info_file->get().checked_write(&size, sizeof(size)); info_file->get().checked_write(hash.data(), hash.size()); }