/* * libopenraw - tiffepfile.cpp * * Copyright (C) 2007-2017 Hubert Figuière * * This library is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation, either version 3 of * the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see * . */ #include #include #include #include #include "rawfile.hpp" #include "trace.hpp" #include "tiffepfile.hpp" #include "ifddir.hpp" #include "ifdfilecontainer.hpp" using namespace Debug; namespace OpenRaw { namespace Internals { TiffEpFile::TiffEpFile(const IO::Stream::Ptr &s, Type _type) : IfdFile(s, _type) { } IfdDir::Ref TiffEpFile::_locateCfaIfd() { const IfdDir::Ref & _mainIfd = mainIfd(); if (!_mainIfd) { LOGDBG1("couldn't find main ifd\n"); return IfdDir::Ref(); } if (_mainIfd->isPrimary()) { return _mainIfd; } auto result = _mainIfd->getSubIFDs(); if (result.empty()) { // error LOGDBG1("couldn't find main ifd nor subifds\n"); return IfdDir::Ref(); } std::vector subdirs = result.unwrap(); auto i = find_if(subdirs.cbegin(), subdirs.cend(), [] (const IfdDir::Ref& e) { return e->isPrimary(); }); if (i != subdirs.cend()) { return *i; } LOGDBG1("couldn't find a primary subifd\n"); return IfdDir::Ref(); } IfdDir::Ref TiffEpFile::_locateMainIfd() { return m_container->setDirectory(0); } } } /* Local Variables: mode:c++ c-file-style:"stroustrup" c-file-offsets:((innamespace . 0)) indent-tabs-mode:nil fill-column:80 End: */