mirror of
https://github.com/webmproject/libwebp.git
synced 2024-11-20 04:18:26 +01:00
Fix assertions in WebPRescalerExportRow()
Change-Id: I25711dd54e71c90a25f7b18e0ef9155e8151a15e
This commit is contained in:
parent
74f6f9e793
commit
27b5d991e2
@ -173,10 +173,10 @@ void WebPRescalerExportRow(WebPRescaler* const wrk) {
|
|||||||
WebPRescalerExportRowExpand(wrk);
|
WebPRescalerExportRowExpand(wrk);
|
||||||
} else if (wrk->fxy_scale) {
|
} else if (wrk->fxy_scale) {
|
||||||
WebPRescalerExportRowShrink(wrk);
|
WebPRescalerExportRowShrink(wrk);
|
||||||
} else { // very special case for src = dst = 1x1
|
} else { // special case
|
||||||
int i;
|
int i;
|
||||||
|
assert(wrk->src_height == wrk->dst_height && wrk->x_add == 1);
|
||||||
assert(wrk->src_width == 1 && wrk->dst_width <= 2);
|
assert(wrk->src_width == 1 && wrk->dst_width <= 2);
|
||||||
assert(wrk->src_height == 1 && wrk->dst_height == 1);
|
|
||||||
for (i = 0; i < wrk->num_channels * wrk->dst_width; ++i) {
|
for (i = 0; i < wrk->num_channels * wrk->dst_width; ++i) {
|
||||||
wrk->dst[i] = wrk->irow[i];
|
wrk->dst[i] = wrk->irow[i];
|
||||||
wrk->irow[i] = 0;
|
wrk->irow[i] = 0;
|
||||||
|
@ -48,11 +48,15 @@ void WebPRescalerInit(WebPRescaler* const wrk, int src_width, int src_height,
|
|||||||
wrk->y_sub = wrk->y_expand ? y_sub - 1 : y_sub;
|
wrk->y_sub = wrk->y_expand ? y_sub - 1 : y_sub;
|
||||||
wrk->y_accum = wrk->y_expand ? wrk->y_sub : wrk->y_add;
|
wrk->y_accum = wrk->y_expand ? wrk->y_sub : wrk->y_add;
|
||||||
if (!wrk->y_expand) {
|
if (!wrk->y_expand) {
|
||||||
// this is WEBP_RESCALER_FRAC(dst_height, x_add * y_add) without the cast.
|
// This is WEBP_RESCALER_FRAC(dst_height, x_add * y_add) without the cast.
|
||||||
|
// Its value is <= WEBP_RESCALER_ONE, because dst_height <= wrk->y_add, and
|
||||||
|
// wrk->x_add >= 1;
|
||||||
const uint64_t ratio =
|
const uint64_t ratio =
|
||||||
(uint64_t)dst_height * WEBP_RESCALER_ONE / (wrk->x_add * wrk->y_add);
|
(uint64_t)dst_height * WEBP_RESCALER_ONE / (wrk->x_add * wrk->y_add);
|
||||||
if (ratio != (uint32_t)ratio) {
|
if (ratio != (uint32_t)ratio) {
|
||||||
// We can't represent the ratio with the current fixed-point precision.
|
// When ratio == WEBP_RESCALER_ONE, we can't represent the ratio with the
|
||||||
|
// current fixed-point precision. This happens when src_height ==
|
||||||
|
// wrk->y_add (which == src_height), and wrk->x_add == 1.
|
||||||
// => We special-case fxy_scale = 0, in WebPRescalerExportRow().
|
// => We special-case fxy_scale = 0, in WebPRescalerExportRow().
|
||||||
wrk->fxy_scale = 0;
|
wrk->fxy_scale = 0;
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user