#726: Added support for thumbnail found in sub-IFD of IFD1 of Samsung .SRW files.

v0.27.3
Andreas Huggel 15 years ago
parent 76577d5eca
commit f25fca8808

@ -123,7 +123,7 @@ namespace Exiv2 {
case LogMsg::info: break;
case LogMsg::warn: std::cerr << "Warning: "; break;
case LogMsg::error: std::cerr << "Error: "; break;
case LogMsg::mute: assert(true);
case LogMsg::mute: assert(false);
}
std::cerr << s;
}

@ -693,6 +693,7 @@ namespace Exiv2 {
subImage7Id,
subImage8Id,
subImage9Id,
subThumb1Id,
panaRawId,
ifd2Id,
ifd3Id

@ -255,14 +255,16 @@ namespace {
{ 0, createLoaderTiff, 3 },
{ 0, createLoaderTiff, 4 },
{ 0, createLoaderTiff, 5 },
{ 0, createLoaderTiff, 6 },
{ 0, createLoaderExifJpeg, 0 },
{ 0, createLoaderExifJpeg, 1 },
{ 0, createLoaderExifJpeg, 2 },
{ 0, createLoaderExifJpeg, 3 },
{ 0, createLoaderExifJpeg, 4 },
{ 0, createLoaderExifJpeg, 5 },
{ "image/x-canon-cr2", createLoaderExifJpeg, 6 },
{ 0, createLoaderExifJpeg, 7 }
{ 0, createLoaderExifJpeg, 6 },
{ "image/x-canon-cr2", createLoaderExifJpeg, 7 },
{ 0, createLoaderExifJpeg, 8 }
};
const LoaderExifJpeg::Param LoaderExifJpeg::param_[] = {
@ -271,9 +273,10 @@ namespace {
{ "Exif.SubImage2.JPEGInterchangeFormat", "Exif.SubImage2.JPEGInterchangeFormatLength", 0 }, // 2
{ "Exif.SubImage3.JPEGInterchangeFormat", "Exif.SubImage3.JPEGInterchangeFormatLength", 0 }, // 3
{ "Exif.SubImage4.JPEGInterchangeFormat", "Exif.SubImage4.JPEGInterchangeFormatLength", 0 }, // 4
{ "Exif.Image2.JPEGInterchangeFormat", "Exif.Image2.JPEGInterchangeFormatLength", 0 }, // 5
{ "Exif.Image.StripOffsets", "Exif.Image.StripByteCounts", 0 }, // 6
{ "Exif.OlympusCs.PreviewImageStart", "Exif.OlympusCs.PreviewImageLength", "Exif.MakerNote.Offset"} // 7
{ "Exif.SubThumb1.JPEGInterchangeFormat", "Exif.SubThumb1.JPEGInterchangeFormatLength", 0 }, // 5
{ "Exif.Image2.JPEGInterchangeFormat", "Exif.Image2.JPEGInterchangeFormatLength", 0 }, // 6
{ "Exif.Image.StripOffsets", "Exif.Image.StripByteCounts", 0 }, // 7
{ "Exif.OlympusCs.PreviewImageStart", "Exif.OlympusCs.PreviewImageLength", "Exif.MakerNote.Offset"} // 8
};
const LoaderExifDataJpeg::Param LoaderExifDataJpeg::param_[] = {
@ -294,7 +297,8 @@ namespace {
{ "SubImage2", "Exif.SubImage2.NewSubfileType", "1" }, // 2
{ "SubImage3", "Exif.SubImage3.NewSubfileType", "1" }, // 3
{ "SubImage4", "Exif.SubImage4.NewSubfileType", "1" }, // 4
{ "Thumbnail", 0, 0 } // 5
{ "SubThumb1", "Exif.SubThumb1.NewSubfileType", "1" }, // 5
{ "Thumbnail", 0, 0 } // 6
};
Loader::AutoPtr Loader::create(PreviewId id, const Image &image)

@ -99,6 +99,7 @@ namespace Exiv2 {
{ subImage7Id, "SubImage7", "SubImage7", ifdTagList },
{ subImage8Id, "SubImage8", "SubImage8", ifdTagList },
{ subImage9Id, "SubImage9", "SubImage9", ifdTagList },
{ subThumb1Id, "SubThumb1", "SubThumb1", ifdTagList },
{ panaRawId, "PanaRaw", "PanasonicRaw", PanasonicMakerNote::tagListRaw },
{ mnId, "Makernote", "MakerNote", mnTagList },
{ canonId, "Makernote", "Canon", CanonMakerNote::tagList },
@ -1956,6 +1957,7 @@ namespace Exiv2 {
case subImage7Id:
case subImage8Id:
case subImage9Id:
case subThumb1Id:
case panaRawId: rc = true; break;
default: rc = false; break;
}

@ -71,6 +71,7 @@ namespace Exiv2 {
subImage7Id,
subImage8Id,
subImage9Id,
subThumb1Id,
panaRawId,
mnId,
canonId,

@ -1100,6 +1100,7 @@ namespace Exiv2 {
{ Tag::root, ifd3Id, ifd2Id, Tag::next },
{ Tag::root, olympusId, exifId, 0x927c },
{ Tag::root, olympus2Id, exifId, 0x927c },
{ Tag::root, subThumb1Id, ifd1Id, 0x014a },
{ Tag::root, olympusEqId, olympus2Id, 0x2010 },
{ Tag::root, olympusCsId, olympus2Id, 0x2020 },
{ Tag::root, olympusRdId, olympus2Id, 0x2030 },
@ -1321,11 +1322,22 @@ namespace Exiv2 {
{ 0x0117, ifd1Id, newTiffThumbSize<0x0111, ifd1Id> },
{ 0x0144, ifd1Id, newTiffImageData<0x0145, ifd1Id> },
{ 0x0145, ifd1Id, newTiffImageSize<0x0144, ifd1Id> },
{ 0x014a, ifd1Id, newTiffSubIfd<subThumb1Id> },
{ 0x0201, ifd1Id, newTiffThumbData<0x0202, ifd1Id> },
{ 0x0202, ifd1Id, newTiffThumbSize<0x0201, ifd1Id> },
{ Tag::next, ifd1Id, newTiffDirectory<ifd2Id> },
{ Tag::all, ifd1Id, newTiffEntry },
// Subdir subThumb1
{ 0x0111, subThumb1Id, newTiffImageData<0x0117, subThumb1Id> },
{ 0x0117, subThumb1Id, newTiffImageSize<0x0111, subThumb1Id> },
{ 0x0144, subThumb1Id, newTiffImageData<0x0145, subThumb1Id> },
{ 0x0145, subThumb1Id, newTiffImageSize<0x0144, subThumb1Id> },
{ 0x0201, subThumb1Id, newTiffImageData<0x0202, subThumb1Id> },
{ 0x0202, subThumb1Id, newTiffImageSize<0x0201, subThumb1Id> },
{ Tag::next, subThumb1Id, newTiffDirectory<ignoreId> },
{ Tag::all, subThumb1Id, newTiffEntry },
// IFD2 (eg, in Pentax PEF and Canon CR2 files)
{ 0x0111, ifd2Id, newTiffImageData<0x0117, ifd2Id> },
{ 0x0117, ifd2Id, newTiffImageSize<0x0111, ifd2Id> },

@ -1337,6 +1337,9 @@ namespace Exiv2 {
if ( (object->tiffType() == ttUnsignedLong || object->tiffType() == ttSignedLong
|| object->tiffType() == ttTiffIfd)
&& object->count() >= 1) {
// Todo: Fix hack
uint32_t maxi = 9;
if (object->group() == ifd1Id) maxi = 1;
for (uint32_t i = 0; i < object->count(); ++i) {
int32_t offset = getLong(object->pData() + 4*i, byteOrder());
if ( baseOffset() + offset > size_
@ -1350,7 +1353,7 @@ namespace Exiv2 {
#endif
return;
}
if (object->newGroup_ + i == subImage9Id + 1) {
if (i >= maxi) {
#ifndef SUPPRESS_WARNINGS
EXV_WARNING << "Directory " << groupName(object->group())
<< ", entry 0x" << std::setw(4)

Loading…
Cancel
Save