mirror of
https://github.com/webmproject/libwebp.git
synced 2025-07-16 13:59:51 +02:00
Add incremental support for extended format files
This applies to images with optional chunks (e.g. images with ALPH chunk, ICCP chunk etc). Before this, the incremental decoding used to work like non-incremental decoding for such files, that is, no rows were decoded until all data was available. The change is in 2 parts: - During optional chunk parsing, don't wait for the full VP8/VP8L chunk. - Remap 'alpha_data' pointer whenever a new buffer is allocated/used in WebPIAppend() and WebPIUpdate(). Change-Id: I6cfd6ca1f334b9c6610fcbf662cd85fa494f2a91
This commit is contained in:
@ -192,6 +192,15 @@ static VP8StatusCode ParseOptionalChunks(const uint8_t** const data,
|
||||
return VP8_STATUS_BITSTREAM_ERROR; // Not a valid chunk size.
|
||||
}
|
||||
|
||||
// Start of a (possibly incomplete) VP8/VP8L chunk implies that we have
|
||||
// parsed all the optional chunks.
|
||||
// Note: This check must occur before the check 'buf_size < disk_chunk_size'
|
||||
// below to allow incomplete VP8/VP8L chunks.
|
||||
if (!memcmp(buf, "VP8 ", TAG_SIZE) ||
|
||||
!memcmp(buf, "VP8L", TAG_SIZE)) {
|
||||
return VP8_STATUS_OK;
|
||||
}
|
||||
|
||||
if (buf_size < disk_chunk_size) { // Insufficient data.
|
||||
return VP8_STATUS_NOT_ENOUGH_DATA;
|
||||
}
|
||||
@ -199,9 +208,6 @@ static VP8StatusCode ParseOptionalChunks(const uint8_t** const data,
|
||||
if (!memcmp(buf, "ALPH", TAG_SIZE)) { // A valid ALPH header.
|
||||
*alpha_data = buf + CHUNK_HEADER_SIZE;
|
||||
*alpha_size = chunk_size;
|
||||
} else if (!memcmp(buf, "VP8 ", TAG_SIZE) ||
|
||||
!memcmp(buf, "VP8L", TAG_SIZE)) { // A valid VP8/VP8L header.
|
||||
return VP8_STATUS_OK; // Found.
|
||||
}
|
||||
|
||||
// We have a full and valid chunk; skip it.
|
||||
|
Reference in New Issue
Block a user