mirror of https://git.ffmpeg.org/ffmpeg.git
vp9: change order of operations in adapt_prob().
This is intended to workaround bug "665 Integer Divide Instruction May
Cause Unpredictable Behavior" on some early AMD CPUs, which causes a
div-by-zero in this codepath, such as reported in Mozilla bug #1293996.
Note that this isn't guaranteed to fix the bug, since a compiler is free
to reorder instructions that don't depend on each other. However, it
appears to fix the bug in Firefox, and a similar patch was applied to
libvpx also (see Chrome bug #599899).
(cherry picked from commit be885da342
)
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
parent
0ccaf52fda
commit
e44f0fa939
|
@ -3477,11 +3477,10 @@ static av_always_inline void adapt_prob(uint8_t *p, unsigned ct0, unsigned ct1,
|
||||||
if (!ct)
|
if (!ct)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
update_factor = FASTDIV(update_factor * FFMIN(ct, max_count), max_count);
|
||||||
p1 = *p;
|
p1 = *p;
|
||||||
p2 = ((ct0 << 8) + (ct >> 1)) / ct;
|
p2 = ((((int64_t) ct0) << 8) + (ct >> 1)) / ct;
|
||||||
p2 = av_clip(p2, 1, 255);
|
p2 = av_clip(p2, 1, 255);
|
||||||
ct = FFMIN(ct, max_count);
|
|
||||||
update_factor = FASTDIV(update_factor * ct, max_count);
|
|
||||||
|
|
||||||
// (p1 * (256 - update_factor) + p2 * update_factor + 128) >> 8
|
// (p1 * (256 - update_factor) + p2 * update_factor + 128) >> 8
|
||||||
*p = p1 + (((p2 - p1) * update_factor + 128) >> 8);
|
*p = p1 + (((p2 - p1) * update_factor + 128) >> 8);
|
||||||
|
|
Loading…
Reference in New Issue