Index: ios/web/public/webp_decoder.h |
diff --git a/ios/web/public/webp_decoder.h b/ios/web/public/webp_decoder.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8700718cfaa7f94e5c26eaa051101e2f91f358ef |
--- /dev/null |
+++ b/ios/web/public/webp_decoder.h |
@@ -0,0 +1,83 @@ |
+// Copyright 2013 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef IOS_WEB_PUBLIC_WEBP_DECODER_H_ |
+#define IOS_WEB_PUBLIC_WEBP_DECODER_H_ |
+ |
+#include "base/mac/scoped_nsobject.h" |
+#include "base/memory/ref_counted.h" |
+#include "base/memory/scoped_ptr.h" |
+#include "third_party/libwebp/webp/decode.h" |
+ |
+@class NSData; |
+ |
+namespace web { |
+ |
+// Decodes a WebP image into either JPEG, PNG or uncompressed TIFF. |
+class WebpDecoder : public base::RefCountedThreadSafe<WebpDecoder> { |
+ public: |
+ // Format of the decoded image. |
+ // This enum is used for UMA reporting, keep it in sync with the histogram |
+ // definition. |
+ enum DecodedImageFormat { |
+ JPEG = 1, |
+ PNG, |
+ TIFF, |
+ DECODED_FORMAT_COUNT |
+ }; |
+ |
+ class Delegate : public base::RefCountedThreadSafe<WebpDecoder::Delegate> { |
+ public: |
+ virtual void OnFinishedDecoding(bool success) = 0; |
+ virtual void SetImageFeatures(size_t total_size, // In bytes. |
+ DecodedImageFormat format) = 0; |
+ virtual void OnDataDecoded(NSData* data) = 0; |
+ |
+ protected: |
+ friend class base::RefCountedThreadSafe<WebpDecoder::Delegate>; |
+ virtual ~Delegate() {} |
+ }; |
+ |
+ explicit WebpDecoder(WebpDecoder::Delegate* delegate); |
+ |
+ // For tests. |
+ static size_t GetHeaderSize(); |
+ |
+ // Main entry point. |
+ void OnDataReceived(const base::scoped_nsobject<NSData>& data); |
+ |
+ // Stops the decoding. |
+ void Stop(); |
+ |
+ private: |
+ struct WebPIDecoderDeleter { |
+ inline void operator()(WebPIDecoder* ptr) const { WebPIDelete(ptr); } |
+ }; |
+ |
+ enum State { |
+ READING_FEATURES, |
+ READING_DATA, |
+ DONE |
+ }; |
+ |
+ friend class base::RefCountedThreadSafe<WebpDecoder>; |
+ virtual ~WebpDecoder(); |
+ |
+ // Implements WebP image decoding state machine steps. |
+ void DoReadFeatures(NSData* data); |
+ void DoReadData(NSData* data); |
+ bool DoSendData(); |
+ |
+ scoped_refptr<WebpDecoder::Delegate> delegate_; |
+ WebPDecoderConfig config_; |
+ WebpDecoder::State state_; |
+ scoped_ptr<WebPIDecoder, WebPIDecoderDeleter> incremental_decoder_; |
+ base::scoped_nsobject<NSData> output_buffer_; |
+ base::scoped_nsobject<NSMutableData> features_; |
+ int has_alpha_; |
+}; |
+ |
+} // namespace web |
+ |
+#endif // IOS_WEB_PUBLIC_WEBP_DECODER_H_ |