Blame lib/rafcontainer.hpp

rpm-build d2b433
/* -*- tab-width:4; c-basic-offset:4 -*- */
rpm-build d2b433
/*
rpm-build d2b433
 * libopenraw - rafcontainer.h
rpm-build d2b433
 *
rpm-build d2b433
 * Copyright (C) 2011-2016 Hubert Figuiere
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
#ifndef OR_INTERNALS_RAFCONTAINER_H_
rpm-build d2b433
#define OR_INTERNALS_RAFCONTAINER_H_
rpm-build d2b433
rpm-build d2b433
#include <stdint.h>
rpm-build d2b433
#include <string>
rpm-build d2b433
rpm-build d2b433
#include "io/stream.hpp"
rpm-build d2b433
#include "rawcontainer.hpp"
rpm-build d2b433
rpm-build d2b433
namespace OpenRaw {
rpm-build d2b433
rpm-build d2b433
namespace Internals {
rpm-build d2b433
rpm-build d2b433
class JfifContainer;
rpm-build d2b433
class IfdFileContainer;
rpm-build d2b433
class RafMetaContainer;
rpm-build d2b433
	
rpm-build d2b433
struct RafOffsetDirectory
rpm-build d2b433
{
rpm-build d2b433
	// 36 bytes skipped
rpm-build d2b433
	uint32_t jpegOffset;
rpm-build d2b433
	uint32_t jpegLength;
rpm-build d2b433
	uint32_t metaOffset;
rpm-build d2b433
	uint32_t metaLength;
rpm-build d2b433
	uint32_t cfaOffset;
rpm-build d2b433
	uint32_t cfaLength;
rpm-build d2b433
};
rpm-build d2b433
	
rpm-build d2b433
class RafContainer
rpm-build d2b433
	: public RawContainer
rpm-build d2b433
{
rpm-build d2b433
public:
rpm-build d2b433
	RafContainer(const IO::Stream::Ptr &_file);
rpm-build d2b433
	/** destructor */
rpm-build d2b433
	virtual ~RafContainer();
rpm-build d2b433
rpm-build d2b433
	const std::string & getModel();
rpm-build d2b433
	JfifContainer * getJpegPreview();
rpm-build d2b433
	IfdFileContainer * getCfaContainer();
rpm-build d2b433
	RafMetaContainer * getMetaContainer();
rpm-build d2b433
	uint32_t getJpegOffset() const
rpm-build d2b433
	{
rpm-build d2b433
		return m_offsetDirectory.jpegOffset;
rpm-build d2b433
	}
rpm-build d2b433
	uint32_t getJpegLength() const
rpm-build d2b433
	{
rpm-build d2b433
		return m_offsetDirectory.jpegLength;
rpm-build d2b433
	}
rpm-build d2b433
	uint32_t getCfaOffset() const
rpm-build d2b433
	{
rpm-build d2b433
		return m_offsetDirectory.cfaOffset;
rpm-build d2b433
	}
rpm-build d2b433
	uint32_t getCfaLength() const
rpm-build d2b433
	{
rpm-build d2b433
		return m_offsetDirectory.cfaLength;
rpm-build d2b433
	}
rpm-build d2b433
private:
rpm-build d2b433
	bool _readHeader();
rpm-build d2b433
	bool m_read;
rpm-build d2b433
	std::string m_model;
rpm-build d2b433
	uint32_t m_version;
rpm-build d2b433
	RafOffsetDirectory m_offsetDirectory;
rpm-build d2b433
	
rpm-build d2b433
	JfifContainer * m_jpegPreview;
rpm-build d2b433
	IfdFileContainer * m_cfaContainer;
rpm-build d2b433
	RafMetaContainer * m_metaContainer;
rpm-build d2b433
};
rpm-build d2b433
rpm-build d2b433
}
rpm-build d2b433
}
rpm-build d2b433
rpm-build d2b433
#endif