| #ifndef IMAGE_IO_JPEG_JPEG_IMAGE_EXTRACTOR_H_ // NOLINT |
| #define IMAGE_IO_JPEG_JPEG_IMAGE_EXTRACTOR_H_ // NOLINT |
| |
| #include "image_io/base/data_destination.h" |
| #include "image_io/base/data_source.h" |
| #include "image_io/base/message_handler.h" |
| #include "image_io/jpeg/jpeg_info.h" |
| |
| namespace photos_editing_formats { |
| namespace image_io { |
| |
| /// A class that can make use of the data in a JpegInfo instance to transfer |
| /// Apple depth and GDepth/GImage images from a DataSource and ship it to a |
| /// DataDestination. |
| class JpegImageExtractor { |
| public: |
| /// @param jpeg_info The JpegInfo instance containing depth/image data. |
| /// @param data_source The DataSource from which to transfer depth/image data. |
| /// @param message_handler An optional message handler to write messages to. |
| JpegImageExtractor(const JpegInfo& jpeg_info, DataSource* data_source, |
| MessageHandler* message_handler) |
| : jpeg_info_(jpeg_info), |
| data_source_(data_source), |
| message_handler_(message_handler) {} |
| |
| /// This function extracts the Apple depth image from the DataSource and sends |
| /// the bytes to the DataDestination. |
| /// @param image_destination The DataDestination to receive the image data. |
| /// @return True if an image was extracted. |
| bool ExtractAppleDepthImage(DataDestination* image_destination); |
| |
| /// This function extracts the Apple matte image from the DataSource and sends |
| /// the bytes to the DataDestination. |
| /// @param image_destination The DataDestination to receive the image data. |
| /// @return True if an image was extracted. |
| bool ExtractAppleMatteImage(DataDestination* image_destination); |
| |
| /// This function extracts the GDepth type image from the DataSource and |
| /// sends the bytes to the DataDestination. |
| /// @param image_destination The DataDestination to receive the image data. |
| /// @return True if an image was extracted. |
| bool ExtractGDepthImage(DataDestination* image_destination); |
| |
| /// This function extracts the GImage type image from the DataSource and |
| /// sends the bytes to the DataDestination. |
| /// @param image_destination The DataDestination to receive the image data. |
| /// @return True if an image was extracted. |
| bool ExtractGImageImage(DataDestination* image_destination); |
| |
| private: |
| /// Worker function called for GDepth/GImage type image extraction. |
| /// @param xmp_info_type The type of image to extract. |
| /// @param image_destination The DataDestination to receive the image data. |
| /// @return True if an image was extracted. |
| bool ExtractImage(JpegXmpInfo::Type xmp_info_type, |
| DataDestination* image_destination); |
| |
| /// Worker function called for Apple depth/matte type image extraction. |
| /// @param image_range The range of the image data to extract. If invalid, |
| /// the image_destination's StartTransfer/FinishTransfer functions are |
| /// still called, and this function will return true (i.e., zero bytes |
| /// "successfully" transferred). |
| /// @param image_destination The DataDestination to receive the image data. |
| /// @return True if the transfer succeeded. |
| bool ExtractImage(const DataRange& image_range, |
| DataDestination* image_destination); |
| |
| /// The jpeg info object contains the location of the Apple and Google images. |
| JpegInfo jpeg_info_; |
| |
| /// The data source from which the images are extracted. |
| DataSource* data_source_; |
| |
| /// An optional message handler to write messages to. |
| MessageHandler* message_handler_; |
| }; |
| |
| } // namespace image_io |
| } // namespace photos_editing_formats |
| |
| #endif // IMAGE_IO_JPEG_JPEG_IMAGE_EXTRACTOR_H_ // NOLINT |