diff options
author | Yujie Qin <yujieqin@google.com> | 2016-01-12 13:55:34 +0100 |
---|---|---|
committer | Yujie Qin <yujieqin@google.com> | 2016-01-12 13:55:34 +0100 |
commit | af7fc0e2846c0760fdd4f96acb0daca4630437b3 (patch) | |
tree | 03cc93b15c7461e03e54daed1aa167e177ef8a83 /src/piex.cc | |
parent | 77a7b0f3312953d580f19b024d8108858b58e4e2 (diff) | |
download | piex-af7fc0e2846c0760fdd4f96acb0daca4630437b3.tar.gz |
Update PIEX
Diffstat (limited to 'src/piex.cc')
-rw-r--r-- | src/piex.cc | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/src/piex.cc b/src/piex.cc index a2f90a7..daef264 100644 --- a/src/piex.cc +++ b/src/piex.cc @@ -71,8 +71,8 @@ Error GetPreviewData(const TagSet& extended_tags, Error GetExifData(const std::uint32_t exif_offset, StreamInterface* stream, PreviewImageData* preview_image_data) { - const TagSet kExtendedTags = {kTiffTagImageWidth, kTiffTagImageLength}; - const std::uint32_t kNumberOfIfds = 1; + const TagSet kExtendedTags = {kTiffTagJpegByteCount, kTiffTagJpegOffset}; + const std::uint32_t kNumberOfIfds = 2; TiffContent tiff_content; return GetPreviewData(kExtendedTags, exif_offset, kNumberOfIfds, stream, &tiff_content, preview_image_data); @@ -439,10 +439,10 @@ Error RafGetPreviewData(StreamInterface* stream, // Parse the Fuji RAW header to get the offset and length of the preview // image, which contains the Exif information. const Endian endian = tiff_directory::kBigEndian; - std::uint32_t jpeg_offset = 0; - std::uint32_t jpeg_length = 0; - if (!Get32u(stream, 84 /* jpeg offset */, endian, &jpeg_offset) || - !Get32u(stream, 88 /* jpeg length */, endian, &jpeg_length)) { + std::uint32_t preview_offset = 0; + std::uint32_t preview_length = 0; + if (!Get32u(stream, 84 /* preview offset */, endian, &preview_offset) || + !Get32u(stream, 88 /* preview length */, endian, &preview_length)) { return kFail; } @@ -451,18 +451,22 @@ Error RafGetPreviewData(StreamInterface* stream, return kFail; } - if (jpeg_length > 0) { // when preview image exists + if (preview_length > 0) { // when preview image exists // Parse the Exif information from the preview image. Omit kUnsupported, // because the exif data does not contain any preview image. - const std::uint32_t exif_offset = jpeg_offset + 12; + const std::uint32_t exif_offset = preview_offset + 12; if (GetExifData(exif_offset, stream, preview_image_data) == kFail) { return kFail; } } // Merge the Exif data with the RAW data to form the preview_image_data. - preview_image_data->preview_offset = jpeg_offset; - preview_image_data->preview_length = jpeg_length; + // The preview offset and length extracted from the Exif data are actually + // the thumbnail offset and length. + preview_image_data->thumbnail_offset = preview_image_data->preview_offset; + preview_image_data->thumbnail_length = preview_image_data->preview_length; + preview_image_data->preview_offset = preview_offset; + preview_image_data->preview_length = preview_length; return kOk; } @@ -492,6 +496,10 @@ Error Rw2GetPreviewData(StreamInterface* stream, } // Merge the Exif data with the RAW data to form the preview_image_data. + // The preview offset and length extracted from the Exif data are actually + // the thumbnail offset and length. + preview_image_data->thumbnail_offset = preview_image_data->preview_offset; + preview_image_data->thumbnail_length = preview_image_data->preview_length; preview_image_data->preview_offset = preview_data.preview_offset; preview_image_data->preview_length = preview_data.preview_length; preview_image_data->iso = preview_data.iso; |