summaryrefslogtreecommitdiff
path: root/Source/WebCore/platform/image-decoders/png/PNGImageDecoder.h
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/platform/image-decoders/png/PNGImageDecoder.h
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebCore/platform/image-decoders/png/PNGImageDecoder.h')
-rw-r--r--Source/WebCore/platform/image-decoders/png/PNGImageDecoder.h93
1 files changed, 75 insertions, 18 deletions
diff --git a/Source/WebCore/platform/image-decoders/png/PNGImageDecoder.h b/Source/WebCore/platform/image-decoders/png/PNGImageDecoder.h
index ec2e85740..fee08f5b3 100644
--- a/Source/WebCore/platform/image-decoders/png/PNGImageDecoder.h
+++ b/Source/WebCore/platform/image-decoders/png/PNGImageDecoder.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006 Apple Computer, Inc. All rights reserved.
+ * Copyright (C) 2006 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -10,10 +10,10 @@
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
@@ -23,52 +23,109 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef PNGImageDecoder_h
-#define PNGImageDecoder_h
+#pragma once
#include "ImageDecoder.h"
-#include <wtf/OwnPtr.h>
+#if ENABLE(APNG)
+#include <png.h>
+#endif
namespace WebCore {
class PNGImageReader;
// This class decodes the PNG image format.
- class PNGImageDecoder : public ImageDecoder {
+ class PNGImageDecoder final : public ImageDecoder {
public:
- PNGImageDecoder(ImageSource::AlphaOption, ImageSource::GammaAndColorProfileOption);
+ PNGImageDecoder(AlphaOption, GammaAndColorProfileOption);
virtual ~PNGImageDecoder();
// ImageDecoder
- virtual String filenameExtension() const { return "png"; }
- virtual bool isSizeAvailable();
- virtual bool setSize(unsigned width, unsigned height);
- virtual ImageFrame* frameBufferAtIndex(size_t index);
+ String filenameExtension() const override { return "png"; }
+#if ENABLE(APNG)
+ size_t frameCount() const override { return m_frameCount; }
+ RepetitionCount repetitionCount() const override;
+#endif
+ bool isSizeAvailable() override;
+ bool setSize(const IntSize&) override;
+ ImageFrame* frameBufferAtIndex(size_t index) override;
// CAUTION: setFailed() deletes |m_reader|. Be careful to avoid
// accessing deleted memory, especially when calling this from inside
// PNGImageReader!
- virtual bool setFailed();
+ bool setFailed() override;
// Callbacks from libpng
void headerAvailable();
void rowAvailable(unsigned char* rowBuffer, unsigned rowIndex, int interlacePass);
void pngComplete();
+#if ENABLE(APNG)
+ void readChunks(png_unknown_chunkp);
+ void frameHeader();
+
+ void init();
+ void clearFrameBufferCache(size_t clearBeforeFrame) override;
+#endif
bool isComplete() const
{
- return !m_frameBufferCache.isEmpty() && (m_frameBufferCache.first().status() == ImageFrame::FrameComplete);
+ if (m_frameBufferCache.isEmpty())
+ return false;
+
+ for (auto& imageFrame : m_frameBufferCache) {
+ if (!imageFrame.isComplete())
+ return false;
+ }
+
+ return true;
+ }
+
+ bool isCompleteAtIndex(size_t index)
+ {
+ return (index < m_frameBufferCache.size() && m_frameBufferCache[index].isComplete());
}
private:
// Decodes the image. If |onlySize| is true, stops decoding after
// calculating the image size. If decoding fails but there is no more
// data coming, sets the "decode failure" flag.
- void decode(bool onlySize);
+ void decode(bool onlySize, unsigned haltAtFrame);
+#if ENABLE(APNG)
+ void initFrameBuffer(size_t frameIndex);
+ void frameComplete();
+ int processingStart(png_unknown_chunkp);
+ int processingFinish();
+ void fallbackNotAnimated();
+#endif
- OwnPtr<PNGImageReader> m_reader;
+ std::unique_ptr<PNGImageReader> m_reader;
bool m_doNothingOnFailure;
+ unsigned m_currentFrame;
+#if ENABLE(APNG)
+ png_structp m_png;
+ png_infop m_info;
+ bool m_isAnimated;
+ bool m_frameInfo;
+ bool m_frameIsHidden;
+ bool m_hasInfo;
+ int m_gamma;
+ size_t m_frameCount;
+ unsigned m_playCount;
+ unsigned m_totalFrames;
+ unsigned m_sizePLTE;
+ unsigned m_sizetRNS;
+ unsigned m_sequenceNumber;
+ unsigned m_width;
+ unsigned m_height;
+ unsigned m_xOffset;
+ unsigned m_yOffset;
+ unsigned m_delayNumerator;
+ unsigned m_delayDenominator;
+ unsigned m_dispose;
+ unsigned m_blend;
+ png_byte m_dataIHDR[12 + 13];
+ png_byte m_dataPLTE[12 + 256 * 3];
+ png_byte m_datatRNS[12 + 256];
+#endif
};
} // namespace WebCore
-
-#endif