mirror of
https://github.com/webmproject/libwebp.git
synced 2025-07-19 07:20:02 +02:00
Speedup VP8LGetHistoImageSymbols for low effort (m=0) mode.
- Do light weight entropy based histogram combine and leave out CPU intensive stochastic and greedy heuristics for combining the histograms. For 1000 image PNG corpus (m=0), this change yields speedup of 10% at lower quality range (1% drop in compression density) and about 5% for higher quality range (1% drop in compression density). Following is the compression stats (before/after) for method = 0: Before After bpp/MPs bpp/MPs q=0 2.8336/16.577 2.8615/18.000 q=5 2.8336/16.504 2.8615/18.216 q=10 2.8293/16.419 2.8572/18.070 q=15 2.8242/17.582 2.8519/18.371 q=20 2.8182/16.131 2.8454/18.975 q=25 2.7924/7.670 2.8230/8.531 q=30 2.7078/6.635 2.7310/7.706 q=35 2.7028/6.203 2.7253/6.855 q=40 2.7005/6.198 2.7231/6.364 q=45 2.6989/5.570 2.7216/5.844 q=50 2.6970/5.087 2.7196/5.210 q=55 2.6963/4.589 2.7208/4.766 q=60 2.6949/4.292 2.7195/4.495 q=65 2.6940/3.970 2.7185/4.024 q=70 2.6929/3.698 2.7174/3.699 q=75 2.6919/3.427 2.7164/3.449 q=80 2.6918/3.106 2.7161/3.222 q=85 2.6909/2.856 2.7153/2.919 q=90 2.6902/2.695 2.7145/2.766 q=95 2.6881/2.499 2.7124/2.548 q=100 2.6873/2.253 2.6873/2.285 Change-Id: I0567945068f8dc7888041e93d872f9def91f50ba
This commit is contained in:
@ -748,7 +748,7 @@ static WebPEncodingError EncodeImageInternal(VP8LBitWriter* const bw,
|
||||
VP8LHashChain* const hash_chain,
|
||||
VP8LBackwardRefs refs_array[2],
|
||||
int width, int height, int quality,
|
||||
int* cache_bits,
|
||||
int low_effort, int* cache_bits,
|
||||
int histogram_bits,
|
||||
size_t init_byte_position,
|
||||
int* const hdr_size,
|
||||
@ -799,9 +799,9 @@ static WebPEncodingError EncodeImageInternal(VP8LBitWriter* const bw,
|
||||
}
|
||||
|
||||
// Build histogram image and symbols from backward references.
|
||||
if (!VP8LGetHistoImageSymbols(width, height, &refs, quality, histogram_bits,
|
||||
*cache_bits, histogram_image, tmp_histos,
|
||||
histogram_symbols)) {
|
||||
if (!VP8LGetHistoImageSymbols(width, height, &refs, quality, low_effort,
|
||||
histogram_bits, *cache_bits, histogram_image,
|
||||
tmp_histos, histogram_symbols)) {
|
||||
err = VP8_ENC_ERROR_OUT_OF_MEMORY;
|
||||
goto Error;
|
||||
}
|
||||
@ -1318,7 +1318,7 @@ WebPEncodingError VP8LEncodeStream(const WebPConfig* const config,
|
||||
// ---------------------------------------------------------------------------
|
||||
// Encode and write the transformed image.
|
||||
err = EncodeImageInternal(bw, enc->argb_, &enc->hash_chain_, enc->refs_,
|
||||
enc->current_width_, height, quality,
|
||||
enc->current_width_, height, quality, low_effort,
|
||||
&enc->cache_bits_, enc->histo_bits_, byte_position,
|
||||
&hdr_size, &data_size);
|
||||
if (err != VP8_ENC_OK) goto Error;
|
||||
|
Reference in New Issue
Block a user