mirror of https://go.googlesource.com/go
e7aeeae0c8
Well-formed JPEG images will not have garbage bytes. However, for
corrupted JPEG images, the RST (restart) mechanism is specifically
designed so that a decoder can re-synchronize to an upcoming restartable
MCU (Minimum Coded Unit, e.g. 16x16 block of pixels) boundary and resume
decoding. Even if the resultant image isn't perfect, a 98%-good image is
better than a fatal error.
Every JPEG marker is encoded in two bytes, the first of which is 0xFF.
There are 8 possible RST markers, cycling as "0xFF 0xD0", "0xFF 0xD1",
..., "0xFF 0xD7". Suppose that, our decoder is expecting "0xFF 0xD1".
Before this commit, Go's image/jpeg package would accept only two
possible inputs: a well-formed "0xFF 0xD1" or one very specific pattern
of spec non-compliance, "0xFF 0x00 0xFF 0xD1".
After this commit, it is more lenient, similar to libjpeg's jdmarker.c's
next_marker function.
|
||
---|---|---|
.. | ||
color | ||
draw | ||
gif | ||
internal/imageutil | ||
jpeg | ||
png | ||
testdata | ||
decode_example_test.go | ||
decode_test.go | ||
format.go | ||
geom.go | ||
geom_test.go | ||
image.go | ||
image_test.go | ||
names.go | ||
ycbcr.go | ||
ycbcr_test.go |