libopenraw
Public Types | Public Member Functions | Protected Member Functions | List of all members
OpenRaw::Internals::IfdFileContainer Class Reference
Inheritance diagram for OpenRaw::Internals::IfdFileContainer:
OpenRaw::Internals::RawContainer OpenRaw::Internals::MRWContainer OpenRaw::Internals::OrfContainer OpenRaw::Internals::Rw2Container

Public Types

enum  { IFD_NONE = -1, IFD_EXIF = -2, IFD_GPS = -3, IFD_INTEROP = -4 }
 
- Public Types inherited from OpenRaw::Internals::RawContainer
enum  EndianType { ENDIAN_NULL = 0, ENDIAN_BIG, ENDIAN_LITTLE }
 

Public Member Functions

 IfdFileContainer (const IO::Stream::Ptr &file, off_t offset)
 
virtual ~IfdFileContainer ()
 
virtual EndianType isMagicHeader (const char *p, int len)
 
IfdDir::Ref setDirectory (int dir)
 
int countDirectories (void)
 
std::vector< IfdDir::Ref > & directories ()
 
int currentDirectory ()
 
size_t getDirectoryDataSize ()
 
int lastError () const
 
int exifOffsetCorrection () const
 
void setExifOffsetCorrection (int corr)
 
::or_error locateImageData (const IfdDir::Ref &dir, uint32_t &x, uint32_t &y, ::or_data_type &t)
 
- Public Member Functions inherited from OpenRaw::Internals::RawContainer
 RawContainer (const IO::Stream::Ptr &_file, off_t offset)
 
virtual ~RawContainer ()
 
const IO::Stream::Ptr & file ()
 
EndianType endian () const
 
off_t offset () const
 
bool skip (off_t offset)
 
Option< int8_t > readInt8 (const IO::Stream::Ptr &f)
 
Option< uint8_t > readUInt8 (const IO::Stream::Ptr &f)
 
Option< int16_t > readInt16 (const IO::Stream::Ptr &f)
 
Option< int32_t > readInt32 (const IO::Stream::Ptr &f)
 
Option< uint16_t > readUInt16 (const IO::Stream::Ptr &f)
 
size_t readUInt16Array (const IO::Stream::Ptr &f, std::vector< uint16_t > &v, size_t count)
 
Option< uint32_t > readUInt32 (const IO::Stream::Ptr &f)
 
size_t fetchData (void *buf, off_t offset, size_t buf_size)
 
off_t size () const
 

Protected Member Functions

virtual bool locateDirsPreHook ()
 
- Protected Member Functions inherited from OpenRaw::Internals::RawContainer
 RawContainer (const RawContainer &)=delete
 
RawContaineroperator= (const RawContainer &)=delete
 
void setEndian (EndianType _endian)
 

Additional Inherited Members

- Protected Attributes inherited from OpenRaw::Internals::RawContainer
IO::Stream::Ptr m_file
 
off_t m_offset
 
EndianType m_endian
 

Detailed Description

Definition at line 47 of file ifdfilecontainer.hpp.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum

due to the way Exif works, we have to set specific index to address these IFD

Enumerator
IFD_NONE 

invalid IFD. Means an error

IFD_EXIF 

exif IFD: see field 0x6789 in IFD 0

IFD_GPS 

GPS IFD: see field 0x8825 in IFD 0

IFD_INTEROP 

interoperability IFD: see field 0xa005 in exif IFD

Definition at line 65 of file ifdfilecontainer.hpp.

Constructor & Destructor Documentation

◆ IfdFileContainer()

OpenRaw::Internals::IfdFileContainer::IfdFileContainer ( const IO::Stream::Ptr &  file,
off_t  offset 
)

constructor

Parameters
filethe file handle
offsetthe offset from the start of the file

Definition at line 38 of file ifdfilecontainer.cpp.

◆ ~IfdFileContainer()

OpenRaw::Internals::IfdFileContainer::~IfdFileContainer ( )
virtual

destructor

Definition at line 47 of file ifdfilecontainer.cpp.

Member Function Documentation

◆ countDirectories()

int OpenRaw::Internals::IfdFileContainer::countDirectories ( void  )

Count the number of image file directories, not including EXIF, GPS and INTEROP.

Returns
the number of image file directories

Definition at line 68 of file ifdfilecontainer.cpp.

Referenced by directories(), and setDirectory().

◆ currentDirectory()

int OpenRaw::Internals::IfdFileContainer::currentDirectory ( )

Get the number of the current directory

Returns
the index of the current directory. By default we are in directory 0. -1 indicates an initialized IFD file

◆ directories()

std::vector< IfdDir::Ref > & OpenRaw::Internals::IfdFileContainer::directories ( )

Get the directories, loading them if necessary

Returns
the directories

Definition at line 80 of file ifdfilecontainer.cpp.

References countDirectories().

◆ exifOffsetCorrection()

int OpenRaw::Internals::IfdFileContainer::exifOffsetCorrection ( ) const
inline

Return the Exif offset from the container begining. By default it is 0, but some format like MRW needs a different one. This is an adjustement for the offset in the Exif IFD tag.

Definition at line 129 of file ifdfilecontainer.hpp.

Referenced by OpenRaw::Internals::IfdEntry::loadData().

◆ getDirectoryDataSize()

size_t OpenRaw::Internals::IfdFileContainer::getDirectoryDataSize ( )

get the extra data size chunk associated to the current image directory

Returns
the size of the data chunk in bytes

Definition at line 111 of file ifdfilecontainer.cpp.

References OpenRaw::Internals::RawContainer::m_file, and OpenRaw::Internals::RawContainer::readInt32().

◆ isMagicHeader()

IfdFileContainer::EndianType OpenRaw::Internals::IfdFileContainer::isMagicHeader ( const char *  p,
int  len 
)
virtual

Check the IFD magic header

Parameters
pthe pointer to check
lenthe length of the block to check. Likely to be at least 4.
Returns
the endian if it is the magic header

subclasses needs to override it for like Olympus RAW

Reimplemented in OpenRaw::Internals::MRWContainer, OpenRaw::Internals::OrfContainer, and OpenRaw::Internals::Rw2Container.

Definition at line 52 of file ifdfilecontainer.cpp.

References OpenRaw::Internals::RawContainer::ENDIAN_BIG, and OpenRaw::Internals::RawContainer::ENDIAN_LITTLE.

Referenced by locateDirsPreHook().

◆ lastError()

int OpenRaw::Internals::IfdFileContainer::lastError ( ) const
inline

Return the last error

Returns
the error code

Definition at line 119 of file ifdfilecontainer.hpp.

◆ locateDirsPreHook()

bool OpenRaw::Internals::IfdFileContainer::locateDirsPreHook ( )
protectedvirtual

◆ locateImageData()

::or_error OpenRaw::Internals::IfdFileContainer::locateImageData ( const IfdDir::Ref &  dir,
uint32_t &  x,
uint32_t &  y,
::or_data_type &  t 
)

locate image data in the ifd (excepted RAW)

Parameters
dirthe IFD dir to locate the image data in
tthe type of the image data
Returns
an error code

Referenced by setExifOffsetCorrection().

◆ setDirectory()

IfdDir::Ref OpenRaw::Internals::IfdFileContainer::setDirectory ( int  dir)

Set the current directory

Parameters
dirthe index of the directory to read, or one of the specific IFD index values that are < -1
Returns
NULL if no error, or return the reference to the current directory

Definition at line 88 of file ifdfilecontainer.cpp.

References countDirectories().

◆ setExifOffsetCorrection()

void OpenRaw::Internals::IfdFileContainer::setExifOffsetCorrection ( int  corr)
inline

Set the exif offset if needed.

Definition at line 135 of file ifdfilecontainer.hpp.

References locateDirsPreHook(), and locateImageData().


The documentation for this class was generated from the following files: