Blame lib/tiffepfile.cpp

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