summaryrefslogtreecommitdiffstats
path: root/image/decoders/nsGIFDecoder2.cpp
diff options
context:
space:
mode:
authorwolfbeast <mcwerewolf@gmail.com>2018-11-21 13:34:01 +0100
committerwolfbeast <mcwerewolf@gmail.com>2018-12-04 20:02:29 +0100
commit0a6db54d86604e3b932f0ddd304e6df8e5961d98 (patch)
tree8f47b37f266fd6b4e0755230db8080ecac62a0d8 /image/decoders/nsGIFDecoder2.cpp
parentc5d5a28f76524886f185ba50b230e8ce0d08eacb (diff)
downloadUXP-0a6db54d86604e3b932f0ddd304e6df8e5961d98.tar
UXP-0a6db54d86604e3b932f0ddd304e6df8e5961d98.tar.gz
UXP-0a6db54d86604e3b932f0ddd304e6df8e5961d98.tar.lz
UXP-0a6db54d86604e3b932f0ddd304e6df8e5961d98.tar.xz
UXP-0a6db54d86604e3b932f0ddd304e6df8e5961d98.zip
Bug 1462355 - Part 1c. Make individual image decoders to use updated Decoder/SurfacePipe methods.
Extend this change to nsWebPDecoder.cpp
Diffstat (limited to 'image/decoders/nsGIFDecoder2.cpp')
-rw-r--r--image/decoders/nsGIFDecoder2.cpp25
1 files changed, 16 insertions, 9 deletions
diff --git a/image/decoders/nsGIFDecoder2.cpp b/image/decoders/nsGIFDecoder2.cpp
index 7955438e4..efa145144 100644
--- a/image/decoders/nsGIFDecoder2.cpp
+++ b/image/decoders/nsGIFDecoder2.cpp
@@ -187,6 +187,14 @@ nsGIFDecoder2::BeginImageFrame(const IntRect& aFrameRect,
// Make sure there's no animation if we're downscaling.
MOZ_ASSERT_IF(Size() != OutputSize(), !GetImageMetadata().HasAnimation());
+ AnimationParams animParams {
+ aFrameRect,
+ FrameTimeout::FromRawMilliseconds(mGIFStruct.delay_time),
+ uint32_t(mGIFStruct.images_decoded),
+ BlendMethod::OVER,
+ DisposalMethod(mGIFStruct.disposal_method)
+ };
+
SurfacePipeFlags pipeFlags = aIsInterlaced
? SurfacePipeFlags::DEINTERLACE
: SurfacePipeFlags();
@@ -198,17 +206,18 @@ nsGIFDecoder2::BeginImageFrame(const IntRect& aFrameRect,
// The first frame is always decoded into an RGB surface.
pipe =
- SurfacePipeFactory::CreateSurfacePipe(this, mGIFStruct.images_decoded,
- Size(), OutputSize(),
- aFrameRect, format, pipeFlags);
+ SurfacePipeFactory::CreateSurfacePipe(this, Size(), OutputSize(),
+ aFrameRect, format,
+ Some(animParams), pipeFlags);
} else {
// This is an animation frame (and not the first). To minimize the memory
// usage of animations, the image data is stored in paletted form.
MOZ_ASSERT(Size() == OutputSize());
pipe =
- SurfacePipeFactory::CreatePalettedSurfacePipe(this, mGIFStruct.images_decoded,
- Size(), aFrameRect, format,
- aDepth, pipeFlags);
+ SurfacePipeFactory::CreatePalettedSurfacePipe(this, Size(), aFrameRect,
+ format,
+ aDepth, Some(animParams),
+ pipeFlags);
}
mCurrentFrameIndex = mGIFStruct.images_decoded;
@@ -249,9 +258,7 @@ nsGIFDecoder2::EndImageFrame()
mGIFStruct.images_decoded++;
// Tell the superclass we finished a frame
- PostFrameStop(opacity,
- DisposalMethod(mGIFStruct.disposal_method),
- FrameTimeout::FromRawMilliseconds(mGIFStruct.delay_time));
+ PostFrameStop(opacity);
// Reset the transparent pixel
if (mOldColor) {