| Index: third_party/libwebp/dec/buffer.c
|
| diff --git a/third_party/libwebp/dec/buffer.c b/third_party/libwebp/dec/buffer.c
|
| index 9ed2b3fe1a5f7c09c95c18f64b2b821bb85232b8..547e69b434f8018f3712e64df27b449a4f1f168e 100644
|
| --- a/third_party/libwebp/dec/buffer.c
|
| +++ b/third_party/libwebp/dec/buffer.c
|
| @@ -92,7 +92,7 @@ static VP8StatusCode AllocateBuffer(WebPDecBuffer* const buffer) {
|
| return VP8_STATUS_INVALID_PARAM;
|
| }
|
|
|
| - if (!buffer->is_external_memory && buffer->private_memory == NULL) {
|
| + if (buffer->is_external_memory <= 0 && buffer->private_memory == NULL) {
|
| uint8_t* output;
|
| int uv_stride = 0, a_stride = 0;
|
| uint64_t uv_size = 0, a_size = 0, total_size;
|
| @@ -227,7 +227,7 @@ int WebPInitDecBufferInternal(WebPDecBuffer* buffer, int version) {
|
|
|
| void WebPFreeDecBuffer(WebPDecBuffer* buffer) {
|
| if (buffer != NULL) {
|
| - if (!buffer->is_external_memory) {
|
| + if (buffer->is_external_memory <= 0) {
|
| WebPSafeFree(buffer->private_memory);
|
| }
|
| buffer->private_memory = NULL;
|
| @@ -256,5 +256,45 @@ void WebPGrabDecBuffer(WebPDecBuffer* const src, WebPDecBuffer* const dst) {
|
| }
|
| }
|
|
|
| -//------------------------------------------------------------------------------
|
| +VP8StatusCode WebPCopyDecBufferPixels(const WebPDecBuffer* const src_buf,
|
| + WebPDecBuffer* const dst_buf) {
|
| + assert(src_buf != NULL && dst_buf != NULL);
|
| + assert(src_buf->colorspace == dst_buf->colorspace);
|
| +
|
| + dst_buf->width = src_buf->width;
|
| + dst_buf->height = src_buf->height;
|
| + if (CheckDecBuffer(dst_buf) != VP8_STATUS_OK) {
|
| + return VP8_STATUS_INVALID_PARAM;
|
| + }
|
| + if (WebPIsRGBMode(src_buf->colorspace)) {
|
| + const WebPRGBABuffer* const src = &src_buf->u.RGBA;
|
| + const WebPRGBABuffer* const dst = &dst_buf->u.RGBA;
|
| + WebPCopyPlane(src->rgba, src->stride, dst->rgba, dst->stride,
|
| + src_buf->width * kModeBpp[src_buf->colorspace],
|
| + src_buf->height);
|
| + } else {
|
| + const WebPYUVABuffer* const src = &src_buf->u.YUVA;
|
| + const WebPYUVABuffer* const dst = &dst_buf->u.YUVA;
|
| + WebPCopyPlane(src->y, src->y_stride, dst->y, dst->y_stride,
|
| + src_buf->width, src_buf->height);
|
| + WebPCopyPlane(src->u, src->u_stride, dst->u, dst->u_stride,
|
| + (src_buf->width + 1) / 2, (src_buf->height + 1) / 2);
|
| + WebPCopyPlane(src->v, src->v_stride, dst->v, dst->v_stride,
|
| + (src_buf->width + 1) / 2, (src_buf->height + 1) / 2);
|
| + if (WebPIsAlphaMode(src_buf->colorspace)) {
|
| + WebPCopyPlane(src->a, src->a_stride, dst->a, dst->a_stride,
|
| + src_buf->width, src_buf->height);
|
| + }
|
| + }
|
| + return VP8_STATUS_OK;
|
| +}
|
|
|
| +int WebPAvoidSlowMemory(const WebPDecBuffer* const output,
|
| + const WebPBitstreamFeatures* const features) {
|
| + assert(output != NULL);
|
| + return (output->is_external_memory >= 2) &&
|
| + WebPIsPremultipliedMode(output->colorspace) &&
|
| + (features != NULL && features->has_alpha);
|
| +}
|
| +
|
| +//------------------------------------------------------------------------------
|
|
|