Changeset 230522 in webkit
- Timestamp:
- Apr 11, 2018 6:47:26 AM (6 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 21 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r230521 r230522 1 2018-04-11 Antti Koivisto <antti@apple.com> 2 3 ImageFrame type used by non-Cocoa image decoder should not be the same as that used by ImageSource 4 https://bugs.webkit.org/show_bug.cgi?id=184418 5 6 Reviewed by Said Abou-Hallawa. 7 8 ScalableImageDecoder uses ImageFrame class which is meant to be an implementation detail of ImageSource. 9 There are bunch of fields and methods in the type that are only used by one or the other client. For hackability 10 there should be an unrelated frame type for ScalableImageDecoder. 11 12 This patch adds ScalableImageDecoderFrame type used in ScalableImageDecoder only. It then cleans up 13 unneeded things from both ImageFrame and ScalableImageDecoderFrame. 14 15 * platform/ImageDecoders.cmake: 16 * platform/graphics/ImageFrame.cpp: 17 (WebCore::ImageFrame::operator=): 18 (WebCore::ImageFrame::clearImage): 19 (WebCore::ImageFrame::size const): 20 (WebCore::ImageFrame::initialize): Deleted. 21 * platform/graphics/ImageFrame.h: 22 (WebCore::ImageFrame::setDisposalMethod): Deleted. 23 (WebCore::ImageFrame::disposalMethod const): Deleted. 24 (WebCore::ImageFrame::backingStore const): Deleted. 25 (WebCore::ImageFrame::hasBackingStore const): Deleted. 26 * platform/image-decoders/ScalableImageDecoder.cpp: 27 (WebCore::ScalableImageDecoder::frameIsCompleteAtIndex const): 28 (WebCore::ScalableImageDecoder::frameDurationAtIndex const): 29 (WebCore::ScalableImageDecoder::createFrameImageAtIndex): 30 * platform/image-decoders/ScalableImageDecoder.h: 31 * platform/image-decoders/ScalableImageDecoderFrame.cpp: Copied from Source/WebCore/platform/graphics/ImageFrame.cpp. 32 (WebCore::ScalableImageDecoderFrame::ScalableImageDecoderFrame): 33 (WebCore::ScalableImageDecoderFrame::~ScalableImageDecoderFrame): 34 (WebCore::ScalableImageDecoderFrame::operator=): 35 (WebCore::ScalableImageDecoderFrame::setDecodingStatus): 36 (WebCore::ScalableImageDecoderFrame::decodingStatus const): 37 (WebCore::ScalableImageDecoderFrame::clearImage): 38 (WebCore::ScalableImageDecoderFrame::clear): 39 (WebCore::ScalableImageDecoderFrame::initialize): 40 (WebCore::ScalableImageDecoderFrame::size const): 41 (WebCore::ImageFrame::ImageFrame): Deleted. 42 (WebCore::ImageFrame::~ImageFrame): Deleted. 43 (WebCore::ImageFrame::defaultFrame): Deleted. 44 (WebCore::ImageFrame::operator=): Deleted. 45 (WebCore::ImageFrame::setDecodingStatus): Deleted. 46 (WebCore::ImageFrame::decodingStatus const): Deleted. 47 (WebCore::ImageFrame::clearImage): Deleted. 48 (WebCore::ImageFrame::clear): Deleted. 49 (WebCore::ImageFrame::initialize): Deleted. 50 (WebCore::ImageFrame::size const): Deleted. 51 (WebCore::ImageFrame::hasNativeImage const): Deleted. 52 (WebCore::ImageFrame::hasFullSizeNativeImage const): Deleted. 53 (WebCore::ImageFrame::hasDecodedNativeImageCompatibleWithOptions const): Deleted. 54 (WebCore::ImageFrame::singlePixelSolidColor const): Deleted. 55 * platform/image-decoders/ScalableImageDecoderFrame.h: Copied from Source/WebCore/platform/graphics/ImageFrame.h. 56 (WebCore::ScalableImageDecoderFrame::ScalableImageDecoderFrame): 57 (WebCore::ScalableImageDecoderFrame::disposalMethod const): 58 (WebCore::ScalableImageDecoderFrame::hasAlpha const): 59 (WebCore::ScalableImageDecoderFrame::hasBackingStore const): 60 (WebCore::ImageFrame::ImageFrame): Deleted. 61 (WebCore::ImageFrame::isInvalid const): Deleted. 62 (WebCore::ImageFrame::isPartial const): Deleted. 63 (WebCore::ImageFrame::isComplete const): Deleted. 64 (WebCore::ImageFrame::sizeRespectingOrientation const): Deleted. 65 (WebCore::ImageFrame::frameBytes const): Deleted. 66 (WebCore::ImageFrame::subsamplingLevel const): Deleted. 67 (WebCore::ImageFrame::setDisposalMethod): Deleted. 68 (WebCore::ImageFrame::disposalMethod const): Deleted. 69 (WebCore::ImageFrame::nativeImage const): Deleted. 70 (WebCore::ImageFrame::setOrientation): Deleted. 71 (WebCore::ImageFrame::orientation const): Deleted. 72 (WebCore::ImageFrame::setDuration): Deleted. 73 (WebCore::ImageFrame::duration const): Deleted. 74 (WebCore::ImageFrame::setHasAlpha): Deleted. 75 (WebCore::ImageFrame::hasAlpha const): Deleted. 76 (WebCore::ImageFrame::hasNativeImage): Deleted. 77 (WebCore::ImageFrame::hasFullSizeNativeImage): Deleted. 78 (WebCore::ImageFrame::hasMetadata const): Deleted. 79 (WebCore::ImageFrame::backingStore const): Deleted. 80 (WebCore::ImageFrame::hasBackingStore const): Deleted. 81 * platform/image-decoders/bmp/BMPImageDecoder.cpp: 82 (WebCore::BMPImageDecoder::frameBufferAtIndex): 83 * platform/image-decoders/bmp/BMPImageDecoder.h: 84 * platform/image-decoders/bmp/BMPImageReader.h: 85 (WebCore::BMPImageReader::setBuffer): 86 * platform/image-decoders/gif/GIFImageDecoder.cpp: 87 (WebCore::GIFImageDecoder::findFirstRequiredFrameToDecode): 88 (WebCore::GIFImageDecoder::frameBufferAtIndex): 89 (WebCore::GIFImageDecoder::clearFrameBufferCache): 90 (WebCore::GIFImageDecoder::haveDecodedRow): 91 (WebCore::GIFImageDecoder::frameComplete): 92 (WebCore::GIFImageDecoder::initFrameBuffer): 93 * platform/image-decoders/gif/GIFImageDecoder.h: 94 * platform/image-decoders/gif/GIFImageReader.cpp: 95 (GIFImageReader::parse): 96 * platform/image-decoders/gif/GIFImageReader.h: 97 (GIFFrameContext::GIFFrameContext): 98 * platform/image-decoders/ico/ICOImageDecoder.cpp: 99 (WebCore::ICOImageDecoder::frameBufferAtIndex): 100 * platform/image-decoders/ico/ICOImageDecoder.h: 101 * platform/image-decoders/jpeg/JPEGImageDecoder.cpp: 102 (WebCore::JPEGImageDecoder::frameBufferAtIndex): 103 (WebCore::setPixel): 104 (WebCore::JPEGImageDecoder::outputScanlines): 105 (WebCore::JPEGImageDecoder::jpegComplete): 106 * platform/image-decoders/jpeg/JPEGImageDecoder.h: 107 * platform/image-decoders/png/PNGImageDecoder.cpp: 108 (WebCore::PNGImageDecoder::frameBufferAtIndex): 109 (WebCore::PNGImageDecoder::rowAvailable): 110 (WebCore::PNGImageDecoder::readChunks): 111 (WebCore::PNGImageDecoder::clearFrameBufferCache): 112 (WebCore::PNGImageDecoder::initFrameBuffer): 113 (WebCore::PNGImageDecoder::frameComplete): 114 * platform/image-decoders/png/PNGImageDecoder.h: 115 * platform/image-decoders/webp/WEBPImageDecoder.cpp: 116 (WebCore::WEBPImageDecoder::frameBufferAtIndex): 117 (WebCore::WEBPImageDecoder::findFirstRequiredFrameToDecode): 118 (WebCore::WEBPImageDecoder::decodeFrame): 119 (WebCore::WEBPImageDecoder::initFrameBuffer): 120 (WebCore::WEBPImageDecoder::applyPostProcessing): 121 (WebCore::WEBPImageDecoder::clearFrameBufferCache): 122 * platform/image-decoders/webp/WEBPImageDecoder.h: 123 1 124 2018-04-11 Antoine Quint <graouts@apple.com> 2 125 -
trunk/Source/WebCore/platform/ImageDecoders.cmake
r228451 r230522 11 11 list(APPEND WebCore_SOURCES 12 12 platform/image-decoders/ScalableImageDecoder.cpp 13 platform/image-decoders/ScalableImageDecoderFrame.cpp 13 14 14 15 platform/image-decoders/bmp/BMPImageDecoder.cpp -
trunk/Source/WebCore/platform/graphics/ImageFrame.cpp
r225616 r230522 54 54 m_size = other.m_size; 55 55 56 #if !USE(CG)57 if (other.backingStore())58 initialize(*other.backingStore());59 else60 m_backingStore = nullptr;61 m_disposalMethod = other.m_disposalMethod;62 #endif63 64 56 m_nativeImage = other.m_nativeImage; 65 57 m_subsamplingLevel = other.m_subsamplingLevel; … … 86 78 unsigned ImageFrame::clearImage() 87 79 { 88 #if !USE(CG)89 if (hasBackingStore())90 m_backingStore = nullptr;91 #endif92 93 80 if (!hasNativeImage()) 94 81 return 0; … … 110 97 } 111 98 112 #if !USE(CG)113 bool ImageFrame::initialize(const ImageBackingStore& backingStore)114 {115 if (&backingStore == this->backingStore())116 return true;117 118 m_backingStore = ImageBackingStore::create(backingStore);119 return m_backingStore != nullptr;120 }121 122 bool ImageFrame::initialize(const IntSize& size, bool premultiplyAlpha)123 {124 if (size.isEmpty())125 return false;126 127 m_backingStore = ImageBackingStore::create(size, premultiplyAlpha);128 return m_backingStore != nullptr;129 }130 #endif131 132 99 IntSize ImageFrame::size() const 133 100 { 134 #if !USE(CG)135 if (hasBackingStore())136 return backingStore()->size();137 #endif138 101 return m_size; 139 102 } -
trunk/Source/WebCore/platform/graphics/ImageFrame.h
r228974 r230522 54 54 unsigned clear(); 55 55 56 #if !USE(CG)57 bool initialize(const ImageBackingStore&);58 bool initialize(const IntSize&, bool premultiplyAlpha);59 #endif60 61 56 void setDecodingStatus(DecodingStatus); 62 57 DecodingStatus decodingStatus() const; … … 70 65 unsigned frameBytes() const { return hasNativeImage() ? (size().area() * sizeof(uint32_t)).unsafeGet() : 0; } 71 66 SubsamplingLevel subsamplingLevel() const { return m_subsamplingLevel; } 72 73 #if !USE(CG)74 enum class DisposalMethod { Unspecified, DoNotDispose, RestoreToBackground, RestoreToPrevious };75 void setDisposalMethod(DisposalMethod method) { m_disposalMethod = method; }76 DisposalMethod disposalMethod() const { return m_disposalMethod; }77 #endif78 67 79 68 NativeImagePtr nativeImage() const { return m_nativeImage; } … … 93 82 bool hasMetadata() const { return !size().isEmpty(); } 94 83 95 #if !USE(CG)96 ImageBackingStore* backingStore() const { return m_backingStore ? m_backingStore.get() : nullptr; }97 bool hasBackingStore() const { return backingStore(); }98 #endif99 100 84 Color singlePixelSolidColor() const; 101 85 … … 103 87 DecodingStatus m_decodingStatus { DecodingStatus::Invalid }; 104 88 IntSize m_size; 105 106 #if !USE(CG)107 std::unique_ptr<ImageBackingStore> m_backingStore;108 DisposalMethod m_disposalMethod { DisposalMethod::Unspecified };109 #endif110 89 111 90 NativeImagePtr m_nativeImage; -
trunk/Source/WebCore/platform/image-decoders/ScalableImageDecoder.cpp
r228974 r230522 177 177 // operation to succeed should not require decoding the entire frame. 178 178 // This function should be implementable in a way that allows const. 179 ImageFrame* buffer = const_cast<ScalableImageDecoder*>(this)->frameBufferAtIndex(index);179 auto* buffer = const_cast<ScalableImageDecoder*>(this)->frameBufferAtIndex(index); 180 180 return buffer && buffer->isComplete(); 181 181 } … … 206 206 // the entire frame. This function should be implementable in a way that 207 207 // allows const. 208 ImageFrame* buffer = const_cast<ScalableImageDecoder*>(this)->frameBufferAtIndex(index);208 auto* buffer = const_cast<ScalableImageDecoder*>(this)->frameBufferAtIndex(index); 209 209 if (!buffer || buffer->isInvalid()) 210 210 return 0_s; … … 226 226 return nullptr; 227 227 228 ImageFrame* buffer = frameBufferAtIndex(index);228 auto* buffer = frameBufferAtIndex(index); 229 229 if (!buffer || buffer->isInvalid() || !buffer->hasBackingStore()) 230 230 return nullptr; -
trunk/Source/WebCore/platform/image-decoders/ScalableImageDecoder.h
r225616 r230522 30 30 31 31 #include "ImageDecoder.h" 32 #include "ImageFrame.h"33 32 #include "IntRect.h" 33 #include "ScalableImageDecoderFrame.h" 34 34 #include "SharedBuffer.h" 35 35 #include <wtf/Assertions.h> … … 42 42 43 43 // ScalableImageDecoder is a base for all format-specific decoders 44 // (e.g. JPEGImageDecoder). This base manages the ImageFrame cache.44 // (e.g. JPEGImageDecoder). This base manages the ScalableImageDecoderFrame cache. 45 45 46 46 class ScalableImageDecoder : public ImageDecoder { … … 135 135 // Decodes as much of the requested frame as possible, and returns an 136 136 // ScalableImageDecoder-owned pointer. 137 virtual ImageFrame* frameBufferAtIndex(size_t) = 0;137 virtual ScalableImageDecoderFrame* frameBufferAtIndex(size_t) = 0; 138 138 139 139 bool frameIsCompleteAtIndex(size_t) const override; … … 206 206 207 207 RefPtr<SharedBuffer> m_data; // The encoded data. 208 Vector< ImageFrame, 1> m_frameBufferCache;208 Vector<ScalableImageDecoderFrame, 1> m_frameBufferCache; 209 209 mutable Lock m_mutex; 210 210 bool m_scaled { false }; -
trunk/Source/WebCore/platform/image-decoders/ScalableImageDecoderFrame.cpp
r230521 r230522 25 25 26 26 #include "config.h" 27 #include " ImageFrame.h"27 #include "ScalableImageDecoderFrame.h" 28 28 29 29 #include <wtf/NeverDestroyed.h> … … 31 31 namespace WebCore { 32 32 33 ImageFrame::ImageFrame()33 ScalableImageDecoderFrame::ScalableImageDecoderFrame() 34 34 { 35 35 } 36 36 37 ImageFrame::~ImageFrame()37 ScalableImageDecoderFrame::~ScalableImageDecoderFrame() 38 38 { 39 clearImage();40 39 } 41 40 42 const ImageFrame& ImageFrame::defaultFrame() 43 { 44 static NeverDestroyed<ImageFrame> sharedInstance; 45 return sharedInstance; 46 } 47 48 ImageFrame& ImageFrame::operator=(const ImageFrame& other) 41 ScalableImageDecoderFrame& ScalableImageDecoderFrame::operator=(const ScalableImageDecoderFrame& other) 49 42 { 50 43 if (this == &other) … … 52 45 53 46 m_decodingStatus = other.m_decodingStatus; 54 m_size = other.m_size;55 47 56 #if !USE(CG)57 48 if (other.backingStore()) 58 49 initialize(*other.backingStore()); … … 60 51 m_backingStore = nullptr; 61 52 m_disposalMethod = other.m_disposalMethod; 62 #endif63 64 m_nativeImage = other.m_nativeImage;65 m_subsamplingLevel = other.m_subsamplingLevel;66 m_decodingOptions = other.m_decodingOptions;67 53 68 54 m_orientation = other.m_orientation; … … 72 58 } 73 59 74 void ImageFrame::setDecodingStatus(DecodingStatus decodingStatus)60 void ScalableImageDecoderFrame::setDecodingStatus(DecodingStatus decodingStatus) 75 61 { 76 62 ASSERT(decodingStatus != DecodingStatus::Decoding); … … 78 64 } 79 65 80 DecodingStatus ImageFrame::decodingStatus() const66 DecodingStatus ScalableImageDecoderFrame::decodingStatus() const 81 67 { 82 68 ASSERT(m_decodingStatus != DecodingStatus::Decoding); … … 84 70 } 85 71 86 unsigned ImageFrame::clearImage()72 void ScalableImageDecoderFrame::clear() 87 73 { 88 #if !USE(CG) 89 if (hasBackingStore()) 90 m_backingStore = nullptr; 91 #endif 92 93 if (!hasNativeImage()) 94 return 0; 95 96 unsigned frameBytes = this->frameBytes(); 97 98 clearNativeImageSubimages(m_nativeImage); 99 m_nativeImage = nullptr; 100 m_decodingOptions = DecodingOptions(); 101 102 return frameBytes; 74 *this = ScalableImageDecoderFrame(); 103 75 } 104 76 105 unsigned ImageFrame::clear() 106 { 107 unsigned frameBytes = clearImage(); 108 *this = ImageFrame(); 109 return frameBytes; 110 } 111 112 #if !USE(CG) 113 bool ImageFrame::initialize(const ImageBackingStore& backingStore) 77 bool ScalableImageDecoderFrame::initialize(const ImageBackingStore& backingStore) 114 78 { 115 79 if (&backingStore == this->backingStore()) … … 120 84 } 121 85 122 bool ImageFrame::initialize(const IntSize& size, bool premultiplyAlpha)86 bool ScalableImageDecoderFrame::initialize(const IntSize& size, bool premultiplyAlpha) 123 87 { 124 88 if (size.isEmpty()) … … 128 92 return m_backingStore != nullptr; 129 93 } 130 #endif131 94 132 IntSize ImageFrame::size() const95 IntSize ScalableImageDecoderFrame::size() const 133 96 { 134 #if !USE(CG)135 97 if (hasBackingStore()) 136 98 return backingStore()->size(); 137 #endif 138 return m_size; 139 } 140 141 bool ImageFrame::hasNativeImage(const std::optional<SubsamplingLevel>& subsamplingLevel) const 142 { 143 return m_nativeImage && (!subsamplingLevel || *subsamplingLevel >= m_subsamplingLevel); 144 } 145 146 bool ImageFrame::hasFullSizeNativeImage(const std::optional<SubsamplingLevel>& subsamplingLevel) const 147 { 148 return hasNativeImage(subsamplingLevel) && (m_decodingOptions.isSynchronous() || m_decodingOptions.hasFullSize()); 149 } 150 151 bool ImageFrame::hasDecodedNativeImageCompatibleWithOptions(const std::optional<SubsamplingLevel>& subsamplingLevel, const DecodingOptions& decodingOptions) const 152 { 153 return hasNativeImage(subsamplingLevel) && m_decodingOptions.isAsynchronousCompatibleWith(decodingOptions); 154 } 155 156 Color ImageFrame::singlePixelSolidColor() const 157 { 158 if (!hasNativeImage() || m_size != IntSize(1, 1)) 159 return Color(); 160 161 return nativeImageSinglePixelSolidColor(m_nativeImage); 99 return { }; 162 100 } 163 101 -
trunk/Source/WebCore/platform/image-decoders/ScalableImageDecoderFrame.h
r230521 r230522 37 37 namespace WebCore { 38 38 39 class ImageFrame { 40 friend class ImageSource; 39 class ScalableImageDecoderFrame { 41 40 public: 42 enum class Caching { Metadata, MetadataAndImage }; 41 ScalableImageDecoderFrame(); 42 ScalableImageDecoderFrame(const ScalableImageDecoderFrame& other) { operator=(other); } 43 43 44 ImageFrame(); 45 ImageFrame(const ImageFrame& other) { operator=(other); } 44 ~ScalableImageDecoderFrame(); 46 45 47 ~ImageFrame();46 ScalableImageDecoderFrame& operator=(const ScalableImageDecoderFrame& other); 48 47 49 static const ImageFrame& defaultFrame();48 void clear(); 50 49 51 ImageFrame& operator=(const ImageFrame& other);52 53 unsigned clearImage();54 unsigned clear();55 56 #if !USE(CG)57 50 bool initialize(const ImageBackingStore&); 58 51 bool initialize(const IntSize&, bool premultiplyAlpha); 59 #endif60 52 61 53 void setDecodingStatus(DecodingStatus); … … 67 59 68 60 IntSize size() const; 69 IntSize sizeRespectingOrientation() const { return !m_orientation.usesWidthAsHeight() ? size() : size().transposedSize(); }70 unsigned frameBytes() const { return hasNativeImage() ? (size().area() * sizeof(uint32_t)).unsafeGet() : 0; }71 SubsamplingLevel subsamplingLevel() const { return m_subsamplingLevel; }72 61 73 #if !USE(CG)74 62 enum class DisposalMethod { Unspecified, DoNotDispose, RestoreToBackground, RestoreToPrevious }; 75 63 void setDisposalMethod(DisposalMethod method) { m_disposalMethod = method; } 76 64 DisposalMethod disposalMethod() const { return m_disposalMethod; } 77 #endif78 79 NativeImagePtr nativeImage() const { return m_nativeImage; }80 65 81 66 void setOrientation(ImageOrientation orientation) { m_orientation = orientation; }; … … 87 72 void setHasAlpha(bool hasAlpha) { m_hasAlpha = hasAlpha; } 88 73 bool hasAlpha() const { return !hasMetadata() || m_hasAlpha; } 89 90 bool hasNativeImage(const std::optional<SubsamplingLevel>& = { }) const;91 bool hasFullSizeNativeImage(const std::optional<SubsamplingLevel>& = { }) const;92 bool hasDecodedNativeImageCompatibleWithOptions(const std::optional<SubsamplingLevel>&, const DecodingOptions&) const;93 74 bool hasMetadata() const { return !size().isEmpty(); } 94 75 95 #if !USE(CG)96 76 ImageBackingStore* backingStore() const { return m_backingStore ? m_backingStore.get() : nullptr; } 97 77 bool hasBackingStore() const { return backingStore(); } 98 #endif99 100 Color singlePixelSolidColor() const;101 78 102 79 private: 103 80 DecodingStatus m_decodingStatus { DecodingStatus::Invalid }; 104 IntSize m_size;105 81 106 #if !USE(CG)107 82 std::unique_ptr<ImageBackingStore> m_backingStore; 108 83 DisposalMethod m_disposalMethod { DisposalMethod::Unspecified }; 109 #endif110 111 NativeImagePtr m_nativeImage;112 SubsamplingLevel m_subsamplingLevel { SubsamplingLevel::Default };113 DecodingOptions m_decodingOptions;114 84 115 85 ImageOrientation m_orientation { DefaultImageOrientation }; -
trunk/Source/WebCore/platform/image-decoders/bmp/BMPImageDecoder.cpp
r222151 r230522 57 57 } 58 58 59 ImageFrame* BMPImageDecoder::frameBufferAtIndex(size_t index)59 ScalableImageDecoderFrame* BMPImageDecoder::frameBufferAtIndex(size_t index) 60 60 { 61 61 if (index) … … 65 65 m_frameBufferCache.grow(1); 66 66 67 ImageFrame* buffer = &m_frameBufferCache.first();67 auto* buffer = &m_frameBufferCache.first(); 68 68 if (!buffer->isComplete()) 69 69 decode(false, isAllDataReceived()); -
trunk/Source/WebCore/platform/image-decoders/bmp/BMPImageDecoder.h
r222151 r230522 46 46 String filenameExtension() const final { return ASCIILiteral("bmp"); } 47 47 void setData(SharedBuffer&, bool allDataReceived) final; 48 ImageFrame* frameBufferAtIndex(size_t index) final;48 ScalableImageDecoderFrame* frameBufferAtIndex(size_t index) final; 49 49 // CAUTION: setFailed() deletes |m_reader|. Be careful to avoid 50 50 // accessing deleted memory, especially when calling this from inside -
trunk/Source/WebCore/platform/image-decoders/bmp/BMPImageReader.h
r222151 r230522 65 65 // |parent| is the decoder that owns us. 66 66 // |startOffset| points to the start of the BMP within the file. 67 // |buffer| points at an empty ImageFrame that we'll initialize and67 // |buffer| points at an empty ScalableImageDecoderFrame that we'll initialize and 68 68 // fill with decoded data. 69 69 BMPImageReader(ScalableImageDecoder* parent, size_t decodedAndHeaderOffset, size_t imgDataOffset, bool usesAndMask); 70 70 71 void setBuffer( ImageFrame* buffer) { m_buffer = buffer; }71 void setBuffer(ScalableImageDecoderFrame* buffer) { m_buffer = buffer; } 72 72 void setData(SharedBuffer* data) { m_data = data; } 73 73 … … 270 270 271 271 // The destination for the pixel data. 272 ImageFrame* m_buffer;272 ScalableImageDecoderFrame* m_buffer; 273 273 274 274 // The file to decode. -
trunk/Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp
r228974 r230522 107 107 108 108 for (size_t i = frameIndex; i > 0; --i) { 109 ImageFrame& frame = m_frameBufferCache[i - 1];109 auto& frame = m_frameBufferCache[i - 1]; 110 110 111 111 // Frames with disposal method RestoreToPrevious are useless, skip them. 112 if (frame.disposalMethod() == ImageFrame::DisposalMethod::RestoreToPrevious)112 if (frame.disposalMethod() == ScalableImageDecoderFrame::DisposalMethod::RestoreToPrevious) 113 113 continue; 114 114 … … 120 120 // If the disposal method of this frame is RestoreToBackground and it fills the whole area, 121 121 // the next frame's backing store is initialized to transparent, so we start decoding with it. 122 if (frame.disposalMethod() == ImageFrame::DisposalMethod::RestoreToBackground) {122 if (frame.disposalMethod() == ScalableImageDecoderFrame::DisposalMethod::RestoreToBackground) { 123 123 // We cannot use frame.backingStore()->frameRect() here, because it has been cleared 124 124 // when the frame was removed from the cache. We need to get the values from the … … 138 138 } 139 139 140 ImageFrame* GIFImageDecoder::frameBufferAtIndex(size_t index)140 ScalableImageDecoderFrame* GIFImageDecoder::frameBufferAtIndex(size_t index) 141 141 { 142 142 if (index >= frameCount()) 143 143 return 0; 144 144 145 ImageFrame& frame = m_frameBufferCache[index];145 auto& frame = m_frameBufferCache[index]; 146 146 if (!frame.isComplete()) { 147 147 for (auto i = findFirstRequiredFrameToDecode(index); i <= index; i++) … … 174 174 // this case. 175 175 clearBeforeFrame = std::min(clearBeforeFrame, m_frameBufferCache.size() - 1); 176 const Vector< ImageFrame>::iterator end(m_frameBufferCache.begin() + clearBeforeFrame);176 const Vector<ScalableImageDecoderFrame>::iterator end(m_frameBufferCache.begin() + clearBeforeFrame); 177 177 178 178 // We need to preserve frames such that: … … 194 194 // has a disposal method other than DisposalMethod::RestoreToPrevious, stop 195 195 // scanning, as we'll only need this frame when decoding the next one. 196 Vector< ImageFrame>::iterator i(end);197 for (; (i != m_frameBufferCache.begin()) && (i->isInvalid() || (i->disposalMethod() == ImageFrame::DisposalMethod::RestoreToPrevious)); --i) {196 Vector<ScalableImageDecoderFrame>::iterator i(end); 197 for (; (i != m_frameBufferCache.begin()) && (i->isInvalid() || (i->disposalMethod() == ScalableImageDecoderFrame::DisposalMethod::RestoreToPrevious)); --i) { 198 198 if (i->isComplete() && (i != end)) 199 199 i->clear(); … … 201 201 202 202 // Now |i| holds the last frame we need to preserve; clear prior frames. 203 for (Vector< ImageFrame>::iterator j(m_frameBufferCache.begin()); j != i; ++j) {203 for (Vector<ScalableImageDecoderFrame>::iterator j(m_frameBufferCache.begin()); j != i; ++j) { 204 204 ASSERT(!j->isPartial()); 205 205 if (!j->isInvalid()) … … 238 238 239 239 // Initialize the frame if necessary. 240 ImageFrame& buffer = m_frameBufferCache[frameIndex];240 auto& buffer = m_frameBufferCache[frameIndex]; 241 241 if ((buffer.isInvalid() && !initFrameBuffer(frameIndex)) || !buffer.hasBackingStore()) 242 242 return false; … … 271 271 } 272 272 273 bool GIFImageDecoder::frameComplete(unsigned frameIndex, unsigned frameDuration, ImageFrame::DisposalMethod disposalMethod)273 bool GIFImageDecoder::frameComplete(unsigned frameIndex, unsigned frameDuration, ScalableImageDecoderFrame::DisposalMethod disposalMethod) 274 274 { 275 275 // Initialize the frame if necessary. Some GIFs insert do-nothing frames, 276 276 // in which case we never reach haveDecodedRow() before getting here. 277 ImageFrame& buffer = m_frameBufferCache[frameIndex];277 auto& buffer = m_frameBufferCache[frameIndex]; 278 278 if (buffer.isInvalid() && !initFrameBuffer(frameIndex)) 279 279 return false; // initFrameBuffer() has already called setFailed(). … … 299 299 // don't affect the start state of this frame) the same way we do in 300 300 // initFrameBuffer(). 301 const ImageFrame* prevBuffer = &m_frameBufferCache[--frameIndex];302 while (frameIndex && (prevBuffer->disposalMethod() == ImageFrame::DisposalMethod::RestoreToPrevious))301 const auto* prevBuffer = &m_frameBufferCache[--frameIndex]; 302 while (frameIndex && (prevBuffer->disposalMethod() == ScalableImageDecoderFrame::DisposalMethod::RestoreToPrevious)) 303 303 prevBuffer = &m_frameBufferCache[--frameIndex]; 304 304 … … 312 312 // rect, we know the current frame has no alpha. 313 313 IntRect prevRect = prevBuffer->backingStore()->frameRect(); 314 if ((prevBuffer->disposalMethod() == ImageFrame::DisposalMethod::RestoreToBackground) && !prevBuffer->hasAlpha() && rect.contains(prevRect))314 if ((prevBuffer->disposalMethod() == ScalableImageDecoderFrame::DisposalMethod::RestoreToBackground) && !prevBuffer->hasAlpha() && rect.contains(prevRect)) 315 315 buffer.setHasAlpha(false); 316 316 } … … 371 371 const GIFFrameContext* frameContext = m_reader->frameContext(); 372 372 IntRect frameRect(frameContext->xOffset, frameContext->yOffset, frameContext->width, frameContext->height); 373 ImageFrame* const buffer = &m_frameBufferCache[frameIndex];373 auto* const buffer = &m_frameBufferCache[frameIndex]; 374 374 375 375 if (!frameIndex) { … … 386 386 // first frame specifies this method, it will get treated like 387 387 // DisposalMethod::RestoreToBackground below and reset to a completely empty image.) 388 const ImageFrame* prevBuffer = &m_frameBufferCache[--frameIndex];389 ImageFrame::DisposalMethodprevMethod = prevBuffer->disposalMethod();390 while (frameIndex && (prevMethod == ImageFrame::DisposalMethod::RestoreToPrevious)) {388 const auto* prevBuffer = &m_frameBufferCache[--frameIndex]; 389 auto prevMethod = prevBuffer->disposalMethod(); 390 while (frameIndex && (prevMethod == ScalableImageDecoderFrame::DisposalMethod::RestoreToPrevious)) { 391 391 prevBuffer = &m_frameBufferCache[--frameIndex]; 392 392 prevMethod = prevBuffer->disposalMethod(); … … 395 395 ASSERT(prevBuffer->isComplete()); 396 396 397 if ((prevMethod == ImageFrame::DisposalMethod::Unspecified) || (prevMethod == ImageFrame::DisposalMethod::DoNotDispose)) {397 if ((prevMethod == ScalableImageDecoderFrame::DisposalMethod::Unspecified) || (prevMethod == ScalableImageDecoderFrame::DisposalMethod::DoNotDispose)) { 398 398 // Preserve the last frame as the starting state for this frame. 399 399 if (!prevBuffer->backingStore() || !buffer->initialize(*prevBuffer->backingStore())) -
trunk/Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.h
r222910 r230522 51 51 size_t frameCount() const final; 52 52 RepetitionCount repetitionCount() const final; 53 ImageFrame* frameBufferAtIndex(size_t index) final;53 ScalableImageDecoderFrame* frameBufferAtIndex(size_t index) final; 54 54 // CAUTION: setFailed() deletes |m_reader|. Be careful to avoid 55 55 // accessing deleted memory, especially when calling this from inside … … 60 60 // Callbacks from the GIF reader. 61 61 bool haveDecodedRow(unsigned frameIndex, const Vector<unsigned char>& rowBuffer, size_t width, size_t rowNumber, unsigned repeatCount, bool writeTransparentPixels); 62 bool frameComplete(unsigned frameIndex, unsigned frameDuration, ImageFrame::DisposalMethod);62 bool frameComplete(unsigned frameIndex, unsigned frameDuration, ScalableImageDecoderFrame::DisposalMethod); 63 63 void gifComplete(); 64 64 -
trunk/Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp
r222910 r230522 577 577 // matching those in the GIF spec! 578 578 int disposalMethod = ((*currentComponent) >> 2) & 0x7; 579 currentFrame->disposalMethod = static_cast<WebCore:: ImageFrame::DisposalMethod>(disposalMethod);579 currentFrame->disposalMethod = static_cast<WebCore::ScalableImageDecoderFrame::DisposalMethod>(disposalMethod); 580 580 // Some specs say that disposal method 3 is "overwrite previous", others that setting 581 581 // the third bit of the field (i.e. method 4) is. We map both to the same value. 582 582 if (disposalMethod == 4) 583 currentFrame->disposalMethod = WebCore:: ImageFrame::DisposalMethod::RestoreToPrevious;583 currentFrame->disposalMethod = WebCore::ScalableImageDecoderFrame::DisposalMethod::RestoreToPrevious; 584 584 currentFrame->delayTime = GETINT16(currentComponent + 1) * 10; 585 585 GETN(1, GIFConsumeBlock); -
trunk/Source/WebCore/platform/image-decoders/gif/GIFImageReader.h
r223794 r230522 155 155 unsigned height; 156 156 int tpixel; // Index of transparent pixel. 157 WebCore:: ImageFrame::DisposalMethod disposalMethod; // Restore to background, leave in place, etc.157 WebCore::ScalableImageDecoderFrame::DisposalMethod disposalMethod; // Restore to background, leave in place, etc. 158 158 size_t localColormapPosition; // Per-image colormap. 159 159 int localColormapSize; // Size of local colormap array. … … 174 174 , height(0) 175 175 , tpixel(0) 176 , disposalMethod(WebCore:: ImageFrame::DisposalMethod::Unspecified)176 , disposalMethod(WebCore::ScalableImageDecoderFrame::DisposalMethod::Unspecified) 177 177 , localColormapPosition(0) 178 178 , localColormapSize(0) -
trunk/Source/WebCore/platform/image-decoders/ico/ICOImageDecoder.cpp
r223728 r230522 91 91 } 92 92 93 ImageFrame* ICOImageDecoder::frameBufferAtIndex(size_t index)93 ScalableImageDecoderFrame* ICOImageDecoder::frameBufferAtIndex(size_t index) 94 94 { 95 95 // Ensure |index| is valid. … … 97 97 return 0; 98 98 99 ImageFrame* buffer = &m_frameBufferCache[index];99 auto* buffer = &m_frameBufferCache[index]; 100 100 if (!buffer->isComplete()) 101 101 decode(index, false, isAllDataReceived()); -
trunk/Source/WebCore/platform/image-decoders/ico/ICOImageDecoder.h
r222151 r230522 52 52 bool setSize(const IntSize&) final; 53 53 size_t frameCount() const final; 54 ImageFrame* frameBufferAtIndex(size_t) final;54 ScalableImageDecoderFrame* frameBufferAtIndex(size_t) final; 55 55 // CAUTION: setFailed() deletes all readers and decoders. Be careful to 56 56 // avoid accessing deleted memory, especially when calling this from -
trunk/Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp
r228974 r230522 512 512 } 513 513 514 ImageFrame* JPEGImageDecoder::frameBufferAtIndex(size_t index)514 ScalableImageDecoderFrame* JPEGImageDecoder::frameBufferAtIndex(size_t index) 515 515 { 516 516 if (index) … … 520 520 m_frameBufferCache.grow(1); 521 521 522 ImageFrame& frame = m_frameBufferCache[0];522 auto& frame = m_frameBufferCache[0]; 523 523 if (!frame.isComplete()) 524 524 decode(false, isAllDataReceived()); … … 533 533 534 534 template <J_COLOR_SPACE colorSpace> 535 void setPixel( ImageFrame& buffer, uint32_t* currentAddress, JSAMPARRAY samples, int column)535 void setPixel(ScalableImageDecoderFrame& buffer, uint32_t* currentAddress, JSAMPARRAY samples, int column) 536 536 { 537 537 JSAMPLE* jsample = *samples + column * (colorSpace == JCS_RGB ? 3 : 4); … … 558 558 559 559 template <J_COLOR_SPACE colorSpace, bool isScaled> 560 bool JPEGImageDecoder::outputScanlines( ImageFrame& buffer)560 bool JPEGImageDecoder::outputScanlines(ScalableImageDecoderFrame& buffer) 561 561 { 562 562 JSAMPARRAY samples = m_reader->samples(); … … 586 586 587 587 template <J_COLOR_SPACE colorSpace> 588 bool JPEGImageDecoder::outputScanlines( ImageFrame& buffer)588 bool JPEGImageDecoder::outputScanlines(ScalableImageDecoderFrame& buffer) 589 589 { 590 590 return m_scaled ? outputScanlines<colorSpace, true>(buffer) : outputScanlines<colorSpace, false>(buffer); … … 597 597 598 598 // Initialize the framebuffer if needed. 599 ImageFrame& buffer = m_frameBufferCache[0];599 auto& buffer = m_frameBufferCache[0]; 600 600 if (buffer.isInvalid()) { 601 601 if (!buffer.initialize(scaledSize(), m_premultiplyAlpha)) … … 643 643 // Hand back an appropriately sized buffer, even if the image ended up being 644 644 // empty. 645 ImageFrame& buffer = m_frameBufferCache[0];645 auto& buffer = m_frameBufferCache[0]; 646 646 buffer.setHasAlpha(false); 647 647 buffer.setDecodingStatus(DecodingStatus::Complete); -
trunk/Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.h
r222151 r230522 54 54 String filenameExtension() const override { return ASCIILiteral("jpg"); } 55 55 bool setSize(const IntSize&) override; 56 ImageFrame* frameBufferAtIndex(size_t index) override;56 ScalableImageDecoderFrame* frameBufferAtIndex(size_t index) override; 57 57 // CAUTION: setFailed() deletes |m_reader|. Be careful to avoid 58 58 // accessing deleted memory, especially when calling this from inside … … 81 81 82 82 template <J_COLOR_SPACE colorSpace> 83 bool outputScanlines( ImageFrame& buffer);83 bool outputScanlines(ScalableImageDecoderFrame& buffer); 84 84 85 85 template <J_COLOR_SPACE colorSpace, bool isScaled> 86 bool outputScanlines( ImageFrame& buffer);86 bool outputScanlines(ScalableImageDecoderFrame& buffer); 87 87 88 88 std::unique_ptr<JPEGImageReader> m_reader; -
trunk/Source/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp
r229309 r230522 254 254 } 255 255 256 ImageFrame* PNGImageDecoder::frameBufferAtIndex(size_t index)256 ScalableImageDecoderFrame* PNGImageDecoder::frameBufferAtIndex(size_t index) 257 257 { 258 258 #if ENABLE(APNG) … … 270 270 m_frameBufferCache.grow(1); 271 271 272 ImageFrame& frame = m_frameBufferCache[index];272 auto& frame = m_frameBufferCache[index]; 273 273 if (!frame.isComplete()) 274 274 decode(false, index, isAllDataReceived()); … … 429 429 return; 430 430 #endif 431 ImageFrame& buffer = m_frameBufferCache[m_currentFrame];431 auto& buffer = m_frameBufferCache[m_currentFrame]; 432 432 if (buffer.isInvalid()) { 433 433 png_structp png = m_reader->pngPtr(); … … 633 633 634 634 if (m_currentFrame < m_frameBufferCache.size()) { 635 ImageFrame& buffer = m_frameBufferCache[m_currentFrame];635 auto& buffer = m_frameBufferCache[m_currentFrame]; 636 636 637 637 if (!m_delayDenominator) … … 641 641 642 642 if (m_dispose == 2) 643 buffer.setDisposalMethod( ImageFrame::DisposalMethod::RestoreToPrevious);643 buffer.setDisposalMethod(ScalableImageDecoderFrame::DisposalMethod::RestoreToPrevious); 644 644 else if (m_dispose == 1) 645 buffer.setDisposalMethod( ImageFrame::DisposalMethod::RestoreToBackground);645 buffer.setDisposalMethod(ScalableImageDecoderFrame::DisposalMethod::RestoreToBackground); 646 646 else 647 buffer.setDisposalMethod( ImageFrame::DisposalMethod::DoNotDispose);647 buffer.setDisposalMethod(ScalableImageDecoderFrame::DisposalMethod::DoNotDispose); 648 648 } 649 649 … … 725 725 // See GIFImageDecoder for full explanation. 726 726 clearBeforeFrame = std::min(clearBeforeFrame, m_frameBufferCache.size() - 1); 727 const Vector< ImageFrame>::iterator end(m_frameBufferCache.begin() + clearBeforeFrame);728 729 Vector< ImageFrame>::iterator i(end);730 for (; (i != m_frameBufferCache.begin()) && (i->isInvalid() || (i->disposalMethod() == ImageFrame::DisposalMethod::RestoreToPrevious)); --i) {727 const Vector<ScalableImageDecoderFrame>::iterator end(m_frameBufferCache.begin() + clearBeforeFrame); 728 729 Vector<ScalableImageDecoderFrame>::iterator i(end); 730 for (; (i != m_frameBufferCache.begin()) && (i->isInvalid() || (i->disposalMethod() == ScalableImageDecoderFrame::DisposalMethod::RestoreToPrevious)); --i) { 731 731 if (i->isComplete() && (i != end)) 732 732 i->clear(); … … 734 734 735 735 // Now |i| holds the last frame we need to preserve; clear prior frames. 736 for (Vector< ImageFrame>::iterator j(m_frameBufferCache.begin()); j != i; ++j) {736 for (Vector<ScalableImageDecoderFrame>::iterator j(m_frameBufferCache.begin()); j != i; ++j) { 737 737 ASSERT(!j->isPartial()); 738 738 if (j->isInvalid()) … … 746 746 return; 747 747 748 ImageFrame& buffer = m_frameBufferCache[frameIndex];748 auto& buffer = m_frameBufferCache[frameIndex]; 749 749 750 750 // The starting state for this frame depends on the previous frame's … … 756 756 // first frame specifies this method, it will get treated like 757 757 // DisposeOverwriteBgcolor below and reset to a completely empty image.) 758 const ImageFrame* prevBuffer = &m_frameBufferCache[--frameIndex];759 ImageFrame::DisposalMethodprevMethod = prevBuffer->disposalMethod();760 while (frameIndex && (prevMethod == ImageFrame::DisposalMethod::RestoreToPrevious)) {758 const auto* prevBuffer = &m_frameBufferCache[--frameIndex]; 759 auto prevMethod = prevBuffer->disposalMethod(); 760 while (frameIndex && (prevMethod == ScalableImageDecoderFrame::DisposalMethod::RestoreToPrevious)) { 761 761 prevBuffer = &m_frameBufferCache[--frameIndex]; 762 762 prevMethod = prevBuffer->disposalMethod(); … … 766 766 ASSERT(prevBuffer->isComplete()); 767 767 768 if (prevMethod == ImageFrame::DisposalMethod::DoNotDispose) {768 if (prevMethod == ScalableImageDecoderFrame::DisposalMethod::DoNotDispose) { 769 769 // Preserve the last frame as the starting state for this frame. 770 770 if (!prevBuffer->backingStore() || !buffer.initialize(*prevBuffer->backingStore())) … … 810 810 return; 811 811 812 ImageFrame& buffer = m_frameBufferCache[m_currentFrame];812 auto& buffer = m_frameBufferCache[m_currentFrame]; 813 813 buffer.setDecodingStatus(DecodingStatus::Complete); 814 814 … … 844 844 else { 845 845 size_t frameIndex = m_currentFrame; 846 const ImageFrame* prevBuffer = &m_frameBufferCache[--frameIndex];847 while (frameIndex && (prevBuffer->disposalMethod() == ImageFrame::DisposalMethod::RestoreToPrevious))846 const auto* prevBuffer = &m_frameBufferCache[--frameIndex]; 847 while (frameIndex && (prevBuffer->disposalMethod() == ScalableImageDecoderFrame::DisposalMethod::RestoreToPrevious)) 848 848 prevBuffer = &m_frameBufferCache[--frameIndex]; 849 849 850 850 IntRect prevRect = prevBuffer->backingStore()->frameRect(); 851 if ((prevBuffer->disposalMethod() == ImageFrame::DisposalMethod::RestoreToBackground) && !prevBuffer->hasAlpha() && rect.contains(prevRect))851 if ((prevBuffer->disposalMethod() == ScalableImageDecoderFrame::DisposalMethod::RestoreToBackground) && !prevBuffer->hasAlpha() && rect.contains(prevRect)) 852 852 buffer.setHasAlpha(false); 853 853 } -
trunk/Source/WebCore/platform/image-decoders/png/PNGImageDecoder.h
r222151 r230522 52 52 #endif 53 53 bool setSize(const IntSize&) override; 54 ImageFrame* frameBufferAtIndex(size_t index) override;54 ScalableImageDecoderFrame* frameBufferAtIndex(size_t index) override; 55 55 // CAUTION: setFailed() deletes |m_reader|. Be careful to avoid 56 56 // accessing deleted memory, especially when calling this from inside -
trunk/Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp
r229309 r230522 71 71 } 72 72 73 ImageFrame* WEBPImageDecoder::frameBufferAtIndex(size_t index)73 ScalableImageDecoderFrame* WEBPImageDecoder::frameBufferAtIndex(size_t index) 74 74 { 75 75 if (index >= frameCount()) … … 118 118 // that the next frame will be rendered on top of a transparent background, and can be decoded 119 119 // without dependencies. This can only be checked for frames prior to frameIndex. 120 if (firstIndependentFrame < frameIndex && m_frameBufferCache[firstIndependentFrame].disposalMethod() == ImageFrame::DisposalMethod::RestoreToBackground)120 if (firstIndependentFrame < frameIndex && m_frameBufferCache[firstIndependentFrame].disposalMethod() == ScalableImageDecoderFrame::DisposalMethod::RestoreToBackground) 121 121 return firstIndependentFrame + 1; 122 122 } … … 171 171 172 172 ASSERT(m_frameBufferCache.size() > frameIndex); 173 ImageFrame& buffer = m_frameBufferCache[frameIndex];173 auto& buffer = m_frameBufferCache[frameIndex]; 174 174 buffer.setDuration(Seconds::fromMilliseconds(webpFrame.duration)); 175 buffer.setDisposalMethod(webpFrame.dispose_method == WEBP_MUX_DISPOSE_BACKGROUND ? ImageFrame::DisposalMethod::RestoreToBackground : ImageFrame::DisposalMethod::DoNotDispose);175 buffer.setDisposalMethod(webpFrame.dispose_method == WEBP_MUX_DISPOSE_BACKGROUND ? ScalableImageDecoderFrame::DisposalMethod::RestoreToBackground : ScalableImageDecoderFrame::DisposalMethod::DoNotDispose); 176 176 ASSERT(!buffer.isComplete()); 177 177 … … 224 224 return false; 225 225 226 ImageFrame& buffer = m_frameBufferCache[frameIndex];226 auto& buffer = m_frameBufferCache[frameIndex]; 227 227 228 228 // Initialize the frame rect in our buffer. … … 237 237 return false; 238 238 } else { 239 const ImageFrame& prevBuffer = m_frameBufferCache[frameIndex - 1];239 const auto& prevBuffer = m_frameBufferCache[frameIndex - 1]; 240 240 ASSERT(prevBuffer.isComplete()); 241 241 … … 244 244 return false; 245 245 246 if (prevBuffer.disposalMethod() == ImageFrame::DisposalMethod::RestoreToBackground) {246 if (prevBuffer.disposalMethod() == ScalableImageDecoderFrame::DisposalMethod::RestoreToBackground) { 247 247 // We want to clear the previous frame to transparent, without 248 248 // affecting pixels in the image outside of the frame. … … 260 260 void WEBPImageDecoder::applyPostProcessing(size_t frameIndex, WebPIDecoder* decoder, WebPDecBuffer& decoderBuffer, bool blend) 261 261 { 262 ImageFrame& buffer = m_frameBufferCache[frameIndex];262 auto& buffer = m_frameBufferCache[frameIndex]; 263 263 int decodedWidth = 0; 264 264 int decodedHeight = 0; … … 353 353 // won't need any frame before them to render, so we can clear them all. 354 354 for (int i = clearBeforeFrame - 1; i >= 0; i--) { 355 ImageFrame& buffer = m_frameBufferCache[i];355 auto& buffer = m_frameBufferCache[i]; 356 356 if (!buffer.isInvalid()) 357 357 buffer.clear(); -
trunk/Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.h
r222841 r230522 49 49 String filenameExtension() const override { return ASCIILiteral("webp"); } 50 50 void setData(SharedBuffer&, bool) final; 51 ImageFrame* frameBufferAtIndex(size_t index) override;51 ScalableImageDecoderFrame* frameBufferAtIndex(size_t index) override; 52 52 RepetitionCount repetitionCount() const override; 53 53 size_t frameCount() const override { return m_frameCount; }
Note: See TracChangeset
for help on using the changeset viewer.