Commit 3a9cb188 authored by Michael Niedermayer's avatar Michael Niedermayer

avutil/integer: Fix av_mod_i() with negative dividend

Signed-off-by: 's avatarMichael Niedermayer <michael@niedermayer.cc>
parent 8e7f4520
...@@ -29,6 +29,8 @@ ...@@ -29,6 +29,8 @@
#include "integer.h" #include "integer.h"
#include "avassert.h" #include "avassert.h"
static const AVInteger zero_i;
AVInteger av_add_i(AVInteger a, AVInteger b){ AVInteger av_add_i(AVInteger a, AVInteger b){
int i, carry=0; int i, carry=0;
...@@ -111,6 +113,12 @@ AVInteger av_mod_i(AVInteger *quot, AVInteger a, AVInteger b){ ...@@ -111,6 +113,12 @@ AVInteger av_mod_i(AVInteger *quot, AVInteger a, AVInteger b){
AVInteger quot_temp; AVInteger quot_temp;
if(!quot) quot = &quot_temp; if(!quot) quot = &quot_temp;
if ((int16_t)a.v[AV_INTEGER_SIZE-1] < 0) {
a = av_mod_i(quot, av_sub_i(zero_i, a), b);
*quot = av_sub_i(zero_i, *quot);
return av_sub_i(zero_i, a);
}
av_assert2((int16_t)a.v[AV_INTEGER_SIZE-1] >= 0 && (int16_t)b.v[AV_INTEGER_SIZE-1] >= 0); av_assert2((int16_t)a.v[AV_INTEGER_SIZE-1] >= 0 && (int16_t)b.v[AV_INTEGER_SIZE-1] >= 0);
av_assert2(av_log2_i(b)>=0); av_assert2(av_log2_i(b)>=0);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment