Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
godot
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
community
godot
Commits
65f2ab1b
Commit
65f2ab1b
authored
Jan 17, 2020
by
volzhs
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update libwebp to 1.1.0
parent
6b64c60b
Show whitespace changes
Inline
Side-by-side
Showing
28 changed files
with
121 additions
and
81 deletions
+121
-81
README.md
thirdparty/README.md
+1
-1
frame_dec.c
thirdparty/libwebp/src/dec/frame_dec.c
+1
-1
idec_dec.c
thirdparty/libwebp/src/dec/idec_dec.c
+8
-3
vp8i_dec.h
thirdparty/libwebp/src/dec/vp8i_dec.h
+2
-2
vp8l_dec.c
thirdparty/libwebp/src/dec/vp8l_dec.c
+5
-5
vp8li_dec.h
thirdparty/libwebp/src/dec/vp8li_dec.h
+10
-10
demux.c
thirdparty/libwebp/src/demux/demux.c
+2
-2
dec_neon.c
thirdparty/libwebp/src/dsp/dec_neon.c
+8
-1
dsp.h
thirdparty/libwebp/src/dsp/dsp.h
+2
-2
lossless.c
thirdparty/libwebp/src/dsp/lossless.c
+8
-3
lossless_common.h
thirdparty/libwebp/src/dsp/lossless_common.h
+2
-0
lossless_enc_sse2.c
thirdparty/libwebp/src/dsp/lossless_enc_sse2.c
+2
-1
lossless_sse2.c
thirdparty/libwebp/src/dsp/lossless_sse2.c
+2
-1
upsampling_msa.c
thirdparty/libwebp/src/dsp/upsampling_msa.c
+2
-2
upsampling_neon.c
thirdparty/libwebp/src/dsp/upsampling_neon.c
+7
-7
histogram_enc.c
thirdparty/libwebp/src/enc/histogram_enc.c
+1
-1
picture_csp_enc.c
thirdparty/libwebp/src/enc/picture_csp_enc.c
+11
-7
vp8i_enc.h
thirdparty/libwebp/src/enc/vp8i_enc.h
+3
-3
muxi.h
thirdparty/libwebp/src/mux/muxi.h
+2
-2
muxread.c
thirdparty/libwebp/src/mux/muxread.c
+1
-1
color_cache_utils.h
thirdparty/libwebp/src/utils/color_cache_utils.h
+1
-1
thread_utils.c
thirdparty/libwebp/src/utils/thread_utils.c
+1
-1
utils.c
thirdparty/libwebp/src/utils/utils.c
+7
-2
decode.h
thirdparty/libwebp/src/webp/decode.h
+1
-4
encode.h
thirdparty/libwebp/src/webp/encode.h
+3
-6
mux.h
thirdparty/libwebp/src/webp/mux.h
+6
-6
mux_types.h
thirdparty/libwebp/src/webp/mux_types.h
+5
-5
types.h
thirdparty/libwebp/src/webp/types.h
+17
-1
No files found.
thirdparty/README.md
View file @
65f2ab1b
...
...
@@ -237,7 +237,7 @@ from the Android NDK r18.
## libwebp
-
Upstream: https://chromium.googlesource.com/webm/libwebp/
-
Version: 1.
0.3
-
Version: 1.
1.0
-
License: BSD-3-Clause
Files extracted from upstream source:
...
...
thirdparty/libwebp/src/dec/frame_dec.c
View file @
65f2ab1b
...
...
@@ -732,7 +732,7 @@ static int AllocateMemory(VP8Decoder* const dec) {
mem
+=
f_info_size
;
dec
->
thread_ctx_
.
id_
=
0
;
dec
->
thread_ctx_
.
f_info_
=
dec
->
f_info_
;
if
(
dec
->
mt_method_
>
0
)
{
if
(
dec
->
filter_type_
>
0
&&
dec
->
mt_method_
>
0
)
{
// secondary cache line. The deblocking process need to make use of the
// filtering strength from previous macroblock row, while the new ones
// are being decoded in parallel. We'll just swap the pointers.
...
...
thirdparty/libwebp/src/dec/idec_dec.c
View file @
65f2ab1b
...
...
@@ -166,9 +166,11 @@ static int AppendToMemBuffer(WebPIDecoder* const idec,
VP8Decoder
*
const
dec
=
(
VP8Decoder
*
)
idec
->
dec_
;
MemBuffer
*
const
mem
=
&
idec
->
mem_
;
const
int
need_compressed_alpha
=
NeedCompressedAlpha
(
idec
);
const
uint8_t
*
const
old_start
=
mem
->
buf_
+
mem
->
start_
;
const
uint8_t
*
const
old_start
=
(
mem
->
buf_
==
NULL
)
?
NULL
:
mem
->
buf_
+
mem
->
start_
;
const
uint8_t
*
const
old_base
=
need_compressed_alpha
?
dec
->
alpha_data_
:
old_start
;
assert
(
mem
->
buf_
!=
NULL
||
mem
->
start_
==
0
);
assert
(
mem
->
mode_
==
MEM_MODE_APPEND
);
if
(
data_size
>
MAX_CHUNK_PAYLOAD
)
{
// security safeguard: trying to allocate more than what the format
...
...
@@ -184,7 +186,7 @@ static int AppendToMemBuffer(WebPIDecoder* const idec,
uint8_t
*
const
new_buf
=
(
uint8_t
*
)
WebPSafeMalloc
(
extra_size
,
sizeof
(
*
new_buf
));
if
(
new_buf
==
NULL
)
return
0
;
memcpy
(
new_buf
,
old_base
,
current_size
);
if
(
old_base
!=
NULL
)
memcpy
(
new_buf
,
old_base
,
current_size
);
WebPSafeFree
(
mem
->
buf_
);
mem
->
buf_
=
new_buf
;
mem
->
buf_size_
=
(
size_t
)
extra_size
;
...
...
@@ -192,6 +194,7 @@ static int AppendToMemBuffer(WebPIDecoder* const idec,
mem
->
end_
=
current_size
;
}
assert
(
mem
->
buf_
!=
NULL
);
memcpy
(
mem
->
buf_
+
mem
->
end_
,
data
,
data_size
);
mem
->
end_
+=
data_size
;
assert
(
mem
->
end_
<=
mem
->
buf_size_
);
...
...
@@ -204,7 +207,9 @@ static int RemapMemBuffer(WebPIDecoder* const idec,
const
uint8_t
*
const
data
,
size_t
data_size
)
{
MemBuffer
*
const
mem
=
&
idec
->
mem_
;
const
uint8_t
*
const
old_buf
=
mem
->
buf_
;
const
uint8_t
*
const
old_start
=
old_buf
+
mem
->
start_
;
const
uint8_t
*
const
old_start
=
(
old_buf
==
NULL
)
?
NULL
:
old_buf
+
mem
->
start_
;
assert
(
old_buf
!=
NULL
||
mem
->
start_
==
0
);
assert
(
mem
->
mode_
==
MEM_MODE_MAP
);
if
(
data_size
<
mem
->
buf_size_
)
return
0
;
// can't remap to a shorter buffer!
...
...
thirdparty/libwebp/src/dec/vp8i_dec.h
View file @
65f2ab1b
...
...
@@ -31,8 +31,8 @@ extern "C" {
// version numbers
#define DEC_MAJ_VERSION 1
#define DEC_MIN_VERSION
0
#define DEC_REV_VERSION
3
#define DEC_MIN_VERSION
1
#define DEC_REV_VERSION
0
// YUV-cache parameters. Cache is 32-bytes wide (= one cacheline).
// Constraints are: We need to store one 16x16 block of luma samples (y),
...
...
thirdparty/libwebp/src/dec/vp8l_dec.c
View file @
65f2ab1b
...
...
@@ -754,11 +754,11 @@ static WEBP_INLINE HTreeGroup* GetHtreeGroupForPos(VP8LMetadata* const hdr,
typedef
void
(
*
ProcessRowsFunc
)(
VP8LDecoder
*
const
dec
,
int
row
);
static
void
ApplyInverseTransforms
(
VP8LDecoder
*
const
dec
,
int
num_rows
,
static
void
ApplyInverseTransforms
(
VP8LDecoder
*
const
dec
,
int
start_row
,
int
num_rows
,
const
uint32_t
*
const
rows
)
{
int
n
=
dec
->
next_transform_
;
const
int
cache_pixs
=
dec
->
width_
*
num_rows
;
const
int
start_row
=
dec
->
last_row_
;
const
int
end_row
=
start_row
+
num_rows
;
const
uint32_t
*
rows_in
=
rows
;
uint32_t
*
const
rows_out
=
dec
->
argb_cache_
;
...
...
@@ -789,8 +789,7 @@ static void ProcessRows(VP8LDecoder* const dec, int row) {
VP8Io
*
const
io
=
dec
->
io_
;
uint8_t
*
rows_data
=
(
uint8_t
*
)
dec
->
argb_cache_
;
const
int
in_stride
=
io
->
width
*
sizeof
(
uint32_t
);
// in unit of RGBA
ApplyInverseTransforms
(
dec
,
num_rows
,
rows
);
ApplyInverseTransforms
(
dec
,
dec
->
last_row_
,
num_rows
,
rows
);
if
(
!
SetCropWindow
(
io
,
dec
->
last_row_
,
row
,
&
rows_data
,
in_stride
))
{
// Nothing to output (this time).
}
else
{
...
...
@@ -1193,6 +1192,7 @@ static int DecodeImageData(VP8LDecoder* const dec, uint32_t* const data,
VP8LFillBitWindow
(
br
);
dist_code
=
GetCopyDistance
(
dist_symbol
,
br
);
dist
=
PlaneCodeToDistance
(
width
,
dist_code
);
if
(
VP8LIsEndOfStream
(
br
))
break
;
if
(
src
-
data
<
(
ptrdiff_t
)
dist
||
src_end
-
src
<
(
ptrdiff_t
)
length
)
{
goto
Error
;
...
...
@@ -1553,7 +1553,7 @@ static void ExtractAlphaRows(VP8LDecoder* const dec, int last_row) {
const
int
cache_pixs
=
width
*
num_rows_to_process
;
uint8_t
*
const
dst
=
output
+
width
*
cur_row
;
const
uint32_t
*
const
src
=
dec
->
argb_cache_
;
ApplyInverseTransforms
(
dec
,
num_rows_to_process
,
in
);
ApplyInverseTransforms
(
dec
,
cur_row
,
num_rows_to_process
,
in
);
WebPExtractGreen
(
src
,
dst
,
cache_pixs
);
AlphaApplyFilter
(
alph_dec
,
cur_row
,
cur_row
+
num_rows_to_process
,
dst
,
width
);
...
...
thirdparty/libwebp/src/dec/vp8li_dec.h
View file @
65f2ab1b
...
...
@@ -37,7 +37,7 @@ struct VP8LTransform {
int
bits_
;
// subsampling bits defining transform window.
int
xsize_
;
// transform window X index.
int
ysize_
;
// transform window Y index.
uint32_t
*
data_
;
// transform data.
uint32_t
*
data_
;
// transform data.
};
typedef
struct
{
...
...
@@ -48,23 +48,23 @@ typedef struct {
int
huffman_mask_
;
int
huffman_subsample_bits_
;
int
huffman_xsize_
;
uint32_t
*
huffman_image_
;
uint32_t
*
huffman_image_
;
int
num_htree_groups_
;
HTreeGroup
*
htree_groups_
;
HuffmanCode
*
huffman_tables_
;
HTreeGroup
*
htree_groups_
;
HuffmanCode
*
huffman_tables_
;
}
VP8LMetadata
;
typedef
struct
VP8LDecoder
VP8LDecoder
;
struct
VP8LDecoder
{
VP8StatusCode
status_
;
VP8LDecodeState
state_
;
VP8Io
*
io_
;
VP8Io
*
io_
;
const
WebPDecBuffer
*
output_
;
// shortcut to io->opaque->output
const
WebPDecBuffer
*
output_
;
// shortcut to io->opaque->output
uint32_t
*
pixels_
;
// Internal data: either uint8_t* for alpha
uint32_t
*
pixels_
;
// Internal data: either uint8_t* for alpha
// or uint32_t* for BGRA.
uint32_t
*
argb_cache_
;
// Scratch buffer for temporary BGRA storage.
uint32_t
*
argb_cache_
;
// Scratch buffer for temporary BGRA storage.
VP8LBitReader
br_
;
int
incremental_
;
// if true, incremental decoding is expected
...
...
@@ -86,8 +86,8 @@ struct VP8LDecoder {
// or'd bitset storing the transforms types.
uint32_t
transforms_seen_
;
uint8_t
*
rescaler_memory
;
// Working memory for rescaling work.
WebPRescaler
*
rescaler
;
// Common rescaler for all channels.
uint8_t
*
rescaler_memory
;
// Working memory for rescaling work.
WebPRescaler
*
rescaler
;
// Common rescaler for all channels.
};
//------------------------------------------------------------------------------
...
...
thirdparty/libwebp/src/demux/demux.c
View file @
65f2ab1b
...
...
@@ -24,8 +24,8 @@
#include "src/webp/format_constants.h"
#define DMUX_MAJ_VERSION 1
#define DMUX_MIN_VERSION
0
#define DMUX_REV_VERSION
3
#define DMUX_MIN_VERSION
1
#define DMUX_REV_VERSION
0
typedef
struct
{
size_t
start_
;
// start location of the data
...
...
thirdparty/libwebp/src/dsp/dec_neon.c
View file @
65f2ab1b
...
...
@@ -1361,7 +1361,8 @@ static void RD4_NEON(uint8_t* dst) { // Down-right
const
uint32_t
J
=
dst
[
-
1
+
1
*
BPS
];
const
uint32_t
K
=
dst
[
-
1
+
2
*
BPS
];
const
uint32_t
L
=
dst
[
-
1
+
3
*
BPS
];
const
uint64x1_t
LKJI____
=
vcreate_u64
(
L
|
(
K
<<
8
)
|
(
J
<<
16
)
|
(
I
<<
24
));
const
uint64x1_t
LKJI____
=
vcreate_u64
((
uint64_t
)
L
|
(
K
<<
8
)
|
(
J
<<
16
)
|
(
I
<<
24
));
const
uint64x1_t
LKJIXABC
=
vorr_u64
(
LKJI____
,
____XABC
);
const
uint8x8_t
KJIXABC_
=
vreinterpret_u8_u64
(
vshr_n_u64
(
LKJIXABC
,
8
));
const
uint8x8_t
JIXABC__
=
vreinterpret_u8_u64
(
vshr_n_u64
(
LKJIXABC
,
16
));
...
...
@@ -1427,10 +1428,16 @@ static WEBP_INLINE void DC8_NEON(uint8_t* dst, int do_top, int do_left) {
if
(
do_top
)
{
const
uint8x8_t
A
=
vld1_u8
(
dst
-
BPS
);
// top row
#if defined(__aarch64__)
const
uint16x8_t
B
=
vmovl_u8
(
A
);
const
uint16_t
p2
=
vaddvq_u16
(
B
);
sum_top
=
vdupq_n_u16
(
p2
);
#else
const
uint16x4_t
p0
=
vpaddl_u8
(
A
);
// cascading summation of the top
const
uint16x4_t
p1
=
vpadd_u16
(
p0
,
p0
);
const
uint16x4_t
p2
=
vpadd_u16
(
p1
,
p1
);
sum_top
=
vcombine_u16
(
p2
,
p2
);
#endif
}
if
(
do_left
)
{
...
...
thirdparty/libwebp/src/dsp/dsp.h
View file @
65f2ab1b
...
...
@@ -246,9 +246,9 @@ extern VP8Fdct VP8FTransform2; // performs two transforms at a time
extern
VP8WHT
VP8FTransformWHT
;
// Predictions
// *dst is the destination block. *top and *left can be NULL.
typedef
void
(
*
VP8IntraPreds
)(
uint8_t
*
dst
,
const
uint8_t
*
left
,
typedef
void
(
*
VP8IntraPreds
)(
uint8_t
*
dst
,
const
uint8_t
*
left
,
const
uint8_t
*
top
);
typedef
void
(
*
VP8Intra4Preds
)(
uint8_t
*
dst
,
const
uint8_t
*
top
);
typedef
void
(
*
VP8Intra4Preds
)(
uint8_t
*
dst
,
const
uint8_t
*
top
);
extern
VP8Intra4Preds
VP8EncPredLuma4
;
extern
VP8IntraPreds
VP8EncPredLuma16
;
extern
VP8IntraPreds
VP8EncPredChroma8
;
...
...
thirdparty/libwebp/src/dsp/lossless.c
View file @
65f2ab1b
...
...
@@ -81,7 +81,7 @@ static WEBP_INLINE uint32_t ClampedAddSubtractHalf(uint32_t c0, uint32_t c1,
// gcc <= 4.9 on ARM generates incorrect code in Select() when Sub3() is
// inlined.
#if defined(__arm__) && LOCAL_GCC_VERSION <= 0x409
#if defined(__arm__) &&
defined(__GNUC__) &&
LOCAL_GCC_VERSION <= 0x409
# define LOCAL_INLINE __attribute__ ((noinline))
#else
# define LOCAL_INLINE WEBP_INLINE
...
...
@@ -167,15 +167,20 @@ static uint32_t Predictor13_C(uint32_t left, const uint32_t* const top) {
return
pred
;
}
GENERATE_PREDICTOR_ADD
(
Predictor0_C
,
PredictorAdd0_C
)
static
void
PredictorAdd0_C
(
const
uint32_t
*
in
,
const
uint32_t
*
upper
,
int
num_pixels
,
uint32_t
*
out
)
{
int
x
;
(
void
)
upper
;
for
(
x
=
0
;
x
<
num_pixels
;
++
x
)
out
[
x
]
=
VP8LAddPixels
(
in
[
x
],
ARGB_BLACK
);
}
static
void
PredictorAdd1_C
(
const
uint32_t
*
in
,
const
uint32_t
*
upper
,
int
num_pixels
,
uint32_t
*
out
)
{
int
i
;
uint32_t
left
=
out
[
-
1
];
(
void
)
upper
;
for
(
i
=
0
;
i
<
num_pixels
;
++
i
)
{
out
[
i
]
=
left
=
VP8LAddPixels
(
in
[
i
],
left
);
}
(
void
)
upper
;
}
GENERATE_PREDICTOR_ADD
(
Predictor2_C
,
PredictorAdd2_C
)
GENERATE_PREDICTOR_ADD
(
Predictor3_C
,
PredictorAdd3_C
)
...
...
thirdparty/libwebp/src/dsp/lossless_common.h
View file @
65f2ab1b
...
...
@@ -177,6 +177,7 @@ uint32_t VP8LSubPixels(uint32_t a, uint32_t b) {
static void PREDICTOR_ADD(const uint32_t* in, const uint32_t* upper, \
int num_pixels, uint32_t* out) { \
int x; \
assert(upper != NULL); \
for (x = 0; x < num_pixels; ++x) { \
const uint32_t pred = (PREDICTOR)(out[x - 1], upper + x); \
out[x] = VP8LAddPixels(in[x], pred); \
...
...
@@ -189,6 +190,7 @@ static void PREDICTOR_ADD(const uint32_t* in, const uint32_t* upper, \
static void PREDICTOR_SUB(const uint32_t* in, const uint32_t* upper, \
int num_pixels, uint32_t* out) { \
int x; \
assert(upper != NULL); \
for (x = 0; x < num_pixels; ++x) { \
const uint32_t pred = (PREDICTOR)(in[x - 1], upper + x); \
out[x] = VP8LSubPixels(in[x], pred); \
...
...
thirdparty/libwebp/src/dsp/lossless_enc_sse2.c
View file @
65f2ab1b
...
...
@@ -455,8 +455,9 @@ static void PredictorSub0_SSE2(const uint32_t* in, const uint32_t* upper,
_mm_storeu_si128
((
__m128i
*
)
&
out
[
i
],
res
);
}
if
(
i
!=
num_pixels
)
{
VP8LPredictorsSub_C
[
0
](
in
+
i
,
upper
+
i
,
num_pixels
-
i
,
out
+
i
);
VP8LPredictorsSub_C
[
0
](
in
+
i
,
NULL
,
num_pixels
-
i
,
out
+
i
);
}
(
void
)
upper
;
}
#define GENERATE_PREDICTOR_1(X, IN) \
...
...
thirdparty/libwebp/src/dsp/lossless_sse2.c
View file @
65f2ab1b
...
...
@@ -191,8 +191,9 @@ static void PredictorAdd0_SSE2(const uint32_t* in, const uint32_t* upper,
_mm_storeu_si128
((
__m128i
*
)
&
out
[
i
],
res
);
}
if
(
i
!=
num_pixels
)
{
VP8LPredictorsAdd_C
[
0
](
in
+
i
,
upper
+
i
,
num_pixels
-
i
,
out
+
i
);
VP8LPredictorsAdd_C
[
0
](
in
+
i
,
NULL
,
num_pixels
-
i
,
out
+
i
);
}
(
void
)
upper
;
}
// Predictor1: left.
...
...
thirdparty/libwebp/src/dsp/upsampling_msa.c
View file @
65f2ab1b
...
...
@@ -576,9 +576,9 @@ static void FUNC_NAME(const uint8_t* top_y, const uint8_t* bot_y, \
const uint32_t l_uv = ((cur_u[0]) | ((cur_v[0]) << 16)); \
const uint32_t uv0 = (3 * tl_uv + l_uv + 0x00020002u) >> 2; \
const uint8_t* ptop_y = &top_y[1]; \
uint8_t
*
ptop_dst = top_dst + XSTEP; \
uint8_t
*
ptop_dst = top_dst + XSTEP; \
const uint8_t* pbot_y = &bot_y[1]; \
uint8_t
*
pbot_dst = bot_dst + XSTEP; \
uint8_t
*
pbot_dst = bot_dst + XSTEP; \
\
FUNC(top_y[0], uv0 & 0xff, (uv0 >> 16), top_dst); \
if (bot_y != NULL) { \
...
...
thirdparty/libwebp/src/dsp/upsampling_neon.c
View file @
65f2ab1b
...
...
@@ -58,8 +58,8 @@
} while (0)
// Turn the macro into a function for reducing code-size when non-critical
static
void
Upsample16Pixels_NEON
(
const
uint8_t
*
r1
,
const
uint8_t
*
r2
,
uint8_t
*
out
)
{
static
void
Upsample16Pixels_NEON
(
const
uint8_t
*
r1
,
const
uint8_t
*
r2
,
uint8_t
*
out
)
{
UPSAMPLE_16PIXELS
(
r1
,
r2
,
out
);
}
...
...
@@ -190,14 +190,14 @@ static const int16_t kCoeffs1[4] = { 19077, 26149, 6419, 13320 };
}
#define NEON_UPSAMPLE_FUNC(FUNC_NAME, FMT, XSTEP) \
static void FUNC_NAME(const uint8_t
*top_y, const uint8_t *
bottom_y, \
const uint8_t
*top_u, const uint8_t *
top_v, \
const uint8_t
*cur_u, const uint8_t *
cur_v, \
uint8_t
*top_dst, uint8_t *
bottom_dst, int len) { \
static void FUNC_NAME(const uint8_t
* top_y, const uint8_t*
bottom_y, \
const uint8_t
* top_u, const uint8_t*
top_v, \
const uint8_t
* cur_u, const uint8_t*
cur_v, \
uint8_t
* top_dst, uint8_t*
bottom_dst, int len) { \
int block; \
/* 16 byte aligned array to cache reconstructed u and v */
\
uint8_t uv_buf[2 * 32 + 15]; \
uint8_t
*
const r_uv = (uint8_t*)((uintptr_t)(uv_buf + 15) & ~15); \
uint8_t
*
const r_uv = (uint8_t*)((uintptr_t)(uv_buf + 15) & ~15); \
const int uv_len = (len + 1) >> 1; \
/* 9 pixels must be read-able for each block */
\
const int num_blocks = (uv_len - 1) >> 3; \
...
...
thirdparty/libwebp/src/enc/histogram_enc.c
View file @
65f2ab1b
...
...
@@ -641,7 +641,7 @@ static void HistogramAnalyzeEntropyBin(VP8LHistogramSet* const image_histo,
// Merges some histograms with same bin_id together if it's advantageous.
// Sets the remaining histograms to NULL.
static
void
HistogramCombineEntropyBin
(
VP8LHistogramSet
*
const
image_histo
,
int
*
num_used
,
int
*
num_used
,
const
uint16_t
*
const
clusters
,
uint16_t
*
const
cluster_mappings
,
VP8LHistogram
*
cur_combo
,
...
...
thirdparty/libwebp/src/enc/picture_csp_enc.c
View file @
65f2ab1b
...
...
@@ -29,11 +29,15 @@
#define USE_INVERSE_ALPHA_TABLE
#ifdef WORDS_BIGENDIAN
#define ALPHA_OFFSET 0 // uint32_t 0xff000000 is 0xff,00,00,00 in memory
// uint32_t 0xff000000 is 0xff,00,00,00 in memory
#define CHANNEL_OFFSET(i) (i)
#else
#define ALPHA_OFFSET 3 // uint32_t 0xff000000 is 0x00,00,00,ff in memory
// uint32_t 0xff000000 is 0x00,00,00,ff in memory
#define CHANNEL_OFFSET(i) (3-(i))
#endif
#define ALPHA_OFFSET CHANNEL_OFFSET(0)
//------------------------------------------------------------------------------
// Detection of non-trivial transparency
...
...
@@ -997,10 +1001,10 @@ static int PictureARGBToYUVA(WebPPicture* picture, WebPEncCSP colorspace,
return
WebPEncodingSetError
(
picture
,
VP8_ENC_ERROR_INVALID_CONFIGURATION
);
}
else
{
const
uint8_t
*
const
argb
=
(
const
uint8_t
*
)
picture
->
argb
;
const
uint8_t
*
const
a
=
argb
+
(
0
^
ALPHA_OFFSET
);
const
uint8_t
*
const
r
=
argb
+
(
1
^
ALPHA_OFFSET
);
const
uint8_t
*
const
g
=
argb
+
(
2
^
ALPHA_OFFSET
);
const
uint8_t
*
const
b
=
argb
+
(
3
^
ALPHA_OFFSET
);
const
uint8_t
*
const
a
=
argb
+
CHANNEL_OFFSET
(
0
);
const
uint8_t
*
const
r
=
argb
+
CHANNEL_OFFSET
(
1
);
const
uint8_t
*
const
g
=
argb
+
CHANNEL_OFFSET
(
2
);
const
uint8_t
*
const
b
=
argb
+
CHANNEL_OFFSET
(
3
);
picture
->
colorspace
=
WEBP_YUV420
;
return
ImportYUVAFromRGBA
(
r
,
g
,
b
,
a
,
4
,
4
*
picture
->
argb_stride
,
...
...
@@ -1050,7 +1054,7 @@ int WebPPictureYUVAToARGB(WebPPicture* picture) {
const
int
height
=
picture
->
height
;
const
int
argb_stride
=
4
*
picture
->
argb_stride
;
uint8_t
*
dst
=
(
uint8_t
*
)
picture
->
argb
;
const
uint8_t
*
cur_u
=
picture
->
u
,
*
cur_v
=
picture
->
v
,
*
cur_y
=
picture
->
y
;
const
uint8_t
*
cur_u
=
picture
->
u
,
*
cur_v
=
picture
->
v
,
*
cur_y
=
picture
->
y
;
WebPUpsampleLinePairFunc
upsample
=
WebPGetLinePairConverter
(
ALPHA_OFFSET
>
0
);
...
...
thirdparty/libwebp/src/enc/vp8i_enc.h
View file @
65f2ab1b
...
...
@@ -31,8 +31,8 @@ extern "C" {
// version numbers
#define ENC_MAJ_VERSION 1
#define ENC_MIN_VERSION
0
#define ENC_REV_VERSION
3
#define ENC_MIN_VERSION
1
#define ENC_REV_VERSION
0
enum
{
MAX_LF_LEVELS
=
64
,
// Maximum loop filter level
MAX_VARIABLE_LEVEL
=
67
,
// last (inclusive) level with variable cost
...
...
@@ -249,7 +249,7 @@ typedef struct {
int
percent0_
;
// saved initial progress percent
DError
left_derr_
;
// left error diffusion (u/v)
DError
*
top_derr_
;
// top diffusion error - NULL if disabled
DError
*
top_derr_
;
// top diffusion error - NULL if disabled
uint8_t
*
y_left_
;
// left luma samples (addressable from index -1 to 15).
uint8_t
*
u_left_
;
// left u samples (addressable from index -1 to 7)
...
...
thirdparty/libwebp/src/mux/muxi.h
View file @
65f2ab1b
...
...
@@ -28,8 +28,8 @@ extern "C" {
// Defines and constants.
#define MUX_MAJ_VERSION 1
#define MUX_MIN_VERSION
0
#define MUX_REV_VERSION
3
#define MUX_MIN_VERSION
1
#define MUX_REV_VERSION
0
// Chunk object.
typedef
struct
WebPChunk
WebPChunk
;
...
...
thirdparty/libwebp/src/mux/muxread.c
View file @
65f2ab1b
...
...
@@ -100,7 +100,7 @@ static int MuxImageParse(const WebPChunk* const chunk, int copy_data,
WebPMuxImage
*
const
wpi
)
{
const
uint8_t
*
bytes
=
chunk
->
data_
.
bytes
;
size_t
size
=
chunk
->
data_
.
size
;
const
uint8_t
*
const
last
=
bytes
+
size
;
const
uint8_t
*
const
last
=
(
bytes
==
NULL
)
?
NULL
:
bytes
+
size
;
WebPChunk
subchunk
;
size_t
subchunk_size
;
WebPChunk
**
unknown_chunk_list
=
&
wpi
->
unknown_
;
...
...
thirdparty/libwebp/src/utils/color_cache_utils.h
View file @
65f2ab1b
...
...
@@ -26,7 +26,7 @@ extern "C" {
// Main color cache struct.
typedef
struct
{
uint32_t
*
colors_
;
// color entries
uint32_t
*
colors_
;
// color entries
int
hash_shift_
;
// Hash shift: 32 - hash_bits_.
int
hash_bits_
;
}
VP8LColorCache
;
...
...
thirdparty/libwebp/src/utils/thread_utils.c
View file @
65f2ab1b
...
...
@@ -73,7 +73,7 @@ typedef struct {
#endif
static
int
pthread_create
(
pthread_t
*
const
thread
,
const
void
*
attr
,
unsigned
int
(
__stdcall
*
start
)(
void
*
),
void
*
arg
)
{
unsigned
int
(
__stdcall
*
start
)(
void
*
),
void
*
arg
)
{
(
void
)
attr
;
#ifdef USE_CREATE_THREAD
*
thread
=
CreateThread
(
NULL
,
/* lpThreadAttributes */
...
...
thirdparty/libwebp/src/utils/utils.c
View file @
65f2ab1b
...
...
@@ -216,9 +216,14 @@ void WebPSafeFree(void* const ptr) {
free
(
ptr
);
}
// Public API function.
// Public API functions.
void
*
WebPMalloc
(
size_t
size
)
{
return
WebPSafeMalloc
(
1
,
size
);
}
void
WebPFree
(
void
*
ptr
)
{
f
ree
(
ptr
);
WebPSafeF
ree
(
ptr
);
}
//------------------------------------------------------------------------------
...
...
thirdparty/libwebp/src/webp/decode.h
View file @
65f2ab1b
...
...
@@ -20,7 +20,7 @@
extern
"C"
{
#endif
#define WEBP_DECODER_ABI_VERSION 0x020
8
// MAJOR(8b) + MINOR(8b)
#define WEBP_DECODER_ABI_VERSION 0x020
9
// MAJOR(8b) + MINOR(8b)
// Note: forward declaring enumerations is not allowed in (strict) C and C++,
// the types are left here for reference.
...
...
@@ -91,9 +91,6 @@ WEBP_EXTERN uint8_t* WebPDecodeYUV(const uint8_t* data, size_t data_size,
uint8_t
**
u
,
uint8_t
**
v
,
int
*
stride
,
int
*
uv_stride
);
// Releases memory returned by the WebPDecode*() functions above.
WEBP_EXTERN
void
WebPFree
(
void
*
ptr
);
// These five functions are variants of the above ones, that decode the image
// directly into a pre-allocated buffer 'output_buffer'. The maximum storage
// available in this buffer is indicated by 'output_buffer_size'. If this
...
...
thirdparty/libwebp/src/webp/encode.h
View file @
65f2ab1b
...
...
@@ -20,7 +20,7 @@
extern
"C"
{
#endif
#define WEBP_ENCODER_ABI_VERSION 0x020
e
// MAJOR(8b) + MINOR(8b)
#define WEBP_ENCODER_ABI_VERSION 0x020
f
// MAJOR(8b) + MINOR(8b)
// Note: forward declaring enumerations is not allowed in (strict) C and C++,
// the types are left here for reference.
...
...
@@ -79,9 +79,6 @@ WEBP_EXTERN size_t WebPEncodeLosslessBGRA(const uint8_t* bgra,
int
width
,
int
height
,
int
stride
,
uint8_t
**
output
);
// Releases memory returned by the WebPEncode*() functions above.
WEBP_EXTERN
void
WebPFree
(
void
*
ptr
);
//------------------------------------------------------------------------------
// Coding parameters
...
...
@@ -306,7 +303,7 @@ struct WebPPicture {
// YUV input (mostly used for input to lossy compression)
WebPEncCSP
colorspace
;
// colorspace: should be YUV420 for now (=Y'CbCr).
int
width
,
height
;
// dimensions (less or equal to WEBP_MAX_DIMENSION)
uint8_t
*
y
,
*
u
,
*
v
;
// pointers to luma/chroma planes.
uint8_t
*
y
,
*
u
,
*
v
;
// pointers to luma/chroma planes.
int
y_stride
,
uv_stride
;
// luma/chroma strides.
uint8_t
*
a
;
// pointer to the alpha plane
int
a_stride
;
// stride of the alpha plane
...
...
@@ -350,7 +347,7 @@ struct WebPPicture {
uint32_t
pad3
[
3
];
// padding for later use
// Unused for now
uint8_t
*
pad4
,
*
pad5
;
uint8_t
*
pad4
,
*
pad5
;
uint32_t
pad6
[
8
];
// padding for later use
// PRIVATE FIELDS
...
...
thirdparty/libwebp/src/webp/mux.h
View file @
65f2ab1b
...
...
@@ -57,7 +57,7 @@ extern "C" {
WebPMuxGetChunk(mux, "ICCP", &icc_profile);
// ... (Consume icc_data).
WebPMuxDelete(mux);
f
ree(data);
WebPF
ree(data);
*/
// Note: forward declaring enumerations is not allowed in (strict) C and C++,
...
...
@@ -245,7 +245,7 @@ WEBP_EXTERN WebPMuxError WebPMuxPushFrame(
WebPMux
*
mux
,
const
WebPMuxFrameInfo
*
frame
,
int
copy_data
);
// Gets the nth frame from the mux object.
// The content of 'frame->bitstream' is allocated using
m
alloc(), and NOT
// The content of 'frame->bitstream' is allocated using
WebPM
alloc(), and NOT
// owned by the 'mux' object. It MUST be deallocated by the caller by calling
// WebPDataClear().
// nth=0 has a special meaning - last position.
...
...
@@ -376,10 +376,10 @@ WEBP_EXTERN WebPMuxError WebPMuxNumChunks(const WebPMux* mux,
// Assembles all chunks in WebP RIFF format and returns in 'assembled_data'.
// This function also validates the mux object.
// Note: The content of 'assembled_data' will be ignored and overwritten.
// Also, the content of 'assembled_data' is allocated using
malloc(), and NOT
//
owned by the 'mux' object. It MUST be deallocated by the caller by calling
//
WebPDataClear(). It's always safe to call WebPDataClear() upon return,
// even in case of error.
// Also, the content of 'assembled_data' is allocated using
WebPMalloc(), and
//
NOT owned by the 'mux' object. It MUST be deallocated by the caller by
//
calling WebPDataClear(). It's always safe to call WebPDataClear() upon
//
return,
even in case of error.
// Parameters:
// mux - (in/out) object whose chunks are to be assembled
// assembled_data - (out) assembled WebP data
...
...
thirdparty/libwebp/src/webp/mux_types.h
View file @
65f2ab1b
...
...
@@ -14,7 +14,6 @@
#ifndef WEBP_WEBP_MUX_TYPES_H_
#define WEBP_WEBP_MUX_TYPES_H_
#include <stdlib.h> // free()
#include <string.h> // memset()
#include "./types.h"
...
...
@@ -56,6 +55,7 @@ typedef enum WebPMuxAnimBlend {
// Data type used to describe 'raw' data, e.g., chunk data
// (ICC profile, metadata) and WebP compressed image data.
// 'bytes' memory must be allocated using WebPMalloc() and such.
struct
WebPData
{
const
uint8_t
*
bytes
;
size_t
size
;
...
...
@@ -68,11 +68,11 @@ static WEBP_INLINE void WebPDataInit(WebPData* webp_data) {
}
}
// Clears the contents of the 'webp_data' object by calling
free(). Does not
// deallocate the object itself.
// Clears the contents of the 'webp_data' object by calling
WebPFree().
//
Does not
deallocate the object itself.
static
WEBP_INLINE
void
WebPDataClear
(
WebPData
*
webp_data
)
{
if
(
webp_data
!=
NULL
)
{
f
ree
((
void
*
)
webp_data
->
bytes
);
WebPF
ree
((
void
*
)
webp_data
->
bytes
);
WebPDataInit
(
webp_data
);
}
}
...
...
@@ -83,7 +83,7 @@ static WEBP_INLINE int WebPDataCopy(const WebPData* src, WebPData* dst) {
if
(
src
==
NULL
||
dst
==
NULL
)
return
0
;
WebPDataInit
(
dst
);
if
(
src
->
bytes
!=
NULL
&&
src
->
size
!=
0
)
{
dst
->
bytes
=
(
uint8_t
*
)
m
alloc
(
src
->
size
);
dst
->
bytes
=
(
uint8_t
*
)
WebPM
alloc
(
src
->
size
);
if
(
dst
->
bytes
==
NULL
)
return
0
;
memcpy
((
void
*
)
dst
->
bytes
,
src
->
bytes
,
src
->
size
);
dst
->
size
=
src
->
size
;
...
...
thirdparty/libwebp/src/webp/types.h
View file @
65f2ab1b
...
...
@@ -7,7 +7,7 @@
// be found in the AUTHORS file in the root of the source tree.
// -----------------------------------------------------------------------------
//
// Common types
// Common types
+ memory wrappers
//
// Author: Skal (pascal.massimino@gmail.com)
...
...
@@ -49,4 +49,20 @@ typedef long long int int64_t;
// Macro to check ABI compatibility (same major revision number)
#define WEBP_ABI_IS_INCOMPATIBLE(a, b) (((a) >> 8) != ((b) >> 8))
#ifdef __cplusplus
extern
"C"
{
#endif
// Allocates 'size' bytes of memory. Returns NULL upon error. Memory
// must be deallocated by calling WebPFree(). This function is made available
// by the core 'libwebp' library.
WEBP_EXTERN
void
*
WebPMalloc
(
size_t
size
);
// Releases memory returned by the WebPDecode*() functions (from decode.h).
WEBP_EXTERN
void
WebPFree
(
void
*
ptr
);
#ifdef __cplusplus
}
// extern "C"
#endif
#endif // WEBP_WEBP_TYPES_H_
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment