mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-05 23:38:38 +09:00
Bug 1462355 - Part 1c. Make individual image decoders to use updated Decoder/SurfacePipe methods.
Extend this change to nsWebPDecoder.cpp
This commit is contained in:
parent
a08160ac44
commit
7937138cb0
6 changed files with 49 additions and 33 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue