mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
7a382ecf62
This patch is a major overhaul of nsBMPDecoder. The patch improves the code in the following ways. - It converts nsBMPDecoder to use StreamingLexer, which makes it much easier to read. - It adds a detailed comment about the BMP format at the top of nsBMPDecoder.cpp. - It fixes lots of inconsistent indenting. - It moves |bihsize| from |mBFH| to |mBIH| to match the file format and common sense. The avoids the need for the confusing LENGTH/INTERNAL_LENGTH distinction. - It renames most of the types in BMPFileHeader.h, so they have better names, in StudlyCaps form, and within the new |bmp| namespace. - It removes the BMP_HEADER_LENGTH struct and inlines its values directly into the two places they were used. - It removes the MOZ_LOG logging done on some of the failure cases. (Most failure cases lacked logging so why bother with some?) - It removes over 200 lines of code, despite the addition of the big format comment. The patch changes the way BMPs are decoded as follows. - It adds stricter testing of the InfoHeader length, rejecting files with bad values. - It moves all header sanity checking that can lead to file rejection into the metadata decode phase. (Previously, bpp/compression consistency checking did not occur during a metadata decode.) - It removes BMPINFOHEADER::ALPHABITFIELDS, which was (a) a weird WinCE-only thing, and (b) we didn't actually allow it, and (c) we used the value 4 instead of 6(!). - It rejects the previously-accepted compression==RLE4 && bpp=1 combination because it doesn't make sense. - It removes a fudge in RLE absolute mode handling that permitted one pixel too many in a row but only if the row's width was odd(!) - It now rejects a file with a negative gap between the color table and the pixel data. The patch leaves the following problems unaddressed. - If bpp==32 we totally ignore compression==BITFIELDS and treat it like compression=RGB. - Transparency as specified in WinBMPv{4,5} isn't handled at all. These will be fixed in follow-ups. All these changes affect (for the better) the results of the following tests that will be added in part 2: - g/pal8v4.bmp - g/pal8v5.bmp - q/pal8os2sp.bmp - q/pal8os2v2.bmp - q/pal8os2v2-16.bmp - b/badheadersize.bmp - b/badpalettesize.bmp - b/badrle.bmp |
||
---|---|---|
.. | ||
build | ||
decoders | ||
encoders | ||
test | ||
BMPFileHeaders.h | ||
ClippedImage.cpp | ||
ClippedImage.h | ||
CopyOnWrite.h | ||
DecodePool.cpp | ||
DecodePool.h | ||
Decoder.cpp | ||
Decoder.h | ||
DecoderFactory.cpp | ||
DecoderFactory.h | ||
DecoderFlags.h | ||
Deinterlacer.cpp | ||
Deinterlacer.h | ||
Downscaler.cpp | ||
Downscaler.h | ||
DrawResult.h | ||
DynamicImage.cpp | ||
DynamicImage.h | ||
FrameAnimator.cpp | ||
FrameAnimator.h | ||
FrozenImage.cpp | ||
FrozenImage.h | ||
ICOFileHeaders.h | ||
Image.cpp | ||
Image.h | ||
ImageCacheKey.cpp | ||
ImageCacheKey.h | ||
ImageFactory.cpp | ||
ImageFactory.h | ||
ImageLogging.h | ||
ImageMetadata.h | ||
ImageOps.cpp | ||
ImageOps.h | ||
ImageRegion.h | ||
ImageURL.h | ||
ImageWrapper.cpp | ||
ImageWrapper.h | ||
imgFrame.cpp | ||
imgFrame.h | ||
imgICache.idl | ||
imgIContainer.idl | ||
imgIContainerDebug.idl | ||
imgIEncoder.idl | ||
imgILoader.idl | ||
imgINotificationObserver.idl | ||
imgIOnloadBlocker.idl | ||
imgIRequest.idl | ||
imgIScriptedNotificationObserver.idl | ||
imgITools.idl | ||
imgLoader.cpp | ||
imgLoader.h | ||
imgRequest.cpp | ||
imgRequest.h | ||
imgRequestProxy.cpp | ||
imgRequestProxy.h | ||
imgTools.cpp | ||
imgTools.h | ||
IProgressObserver.h | ||
LookupResult.h | ||
moz.build | ||
MultipartImage.cpp | ||
MultipartImage.h | ||
nsIIconURI.idl | ||
Orientation.h | ||
OrientedImage.cpp | ||
OrientedImage.h | ||
ProgressTracker.cpp | ||
ProgressTracker.h | ||
RasterImage.cpp | ||
RasterImage.h | ||
ScriptedNotificationObserver.cpp | ||
ScriptedNotificationObserver.h | ||
ShutdownTracker.cpp | ||
ShutdownTracker.h | ||
SourceBuffer.cpp | ||
SourceBuffer.h | ||
StreamingLexer.h | ||
SurfaceCache.cpp | ||
SurfaceCache.h | ||
SurfaceFlags.h | ||
SVGDocumentWrapper.cpp | ||
SVGDocumentWrapper.h | ||
VectorImage.cpp | ||
VectorImage.h |