[FFmpeg-devel] [PATCH 10/10] Document how av_cmp_q() deal when one of the values to be compared is 0/0.
Stefano Sabatini
stefano.sabatini-lala
Mon Oct 4 11:24:25 CEST 2010
On date Monday 2010-10-04 01:54:21 +0200, Michael Niedermayer encoded:
> On Mon, Oct 04, 2010 at 12:14:34AM +0200, Stefano Sabatini wrote:
[...]
> > @@ -43,10 +44,13 @@ typedef struct AVRational{
> > * Compare two rationals.
> > * @param a first rational
> > * @param b second rational
> > - * @return 0 if a==b, 1 if a>b and -1 if a<b
> > + * @return 0 if a==b, 1 if a>b, -1 if a<b, and INT_MIN if one of the
> > + * values is of the form 0/0
> > */
> > static inline int av_cmp_q(AVRational a, AVRational b){
> > const int64_t tmp= a.num * (int64_t)b.den - b.num * (int64_t)a.den;
> > + if (a.num == 0 && a.den == 0 || b.num == 0 && b.den == 0)
> > + return INT_MIN;
> >
> > if(tmp) return ((tmp ^ a.den ^ b.den)>>63)|1;
> > else return 0;
>
> this doesnt work with infinites
> i would suggest:
>
> Index: rational.h
> ===================================================================
> --- rational.h (revision 25329)
> +++ rational.h (working copy)
> @@ -49,7 +49,9 @@
> const int64_t tmp= a.num * (int64_t)b.den - b.num * (int64_t)a.den;
>
> if(tmp) return ((tmp ^ a.den ^ b.den)>>63)|1;
> - else return 0;
> + else if(b.den && a.den) return 0;
> + else if(a.num && b.num) return (a.num>>31) - (b.num>>31);
> + else return INT_MIN;
> }
>
> /**
>
> if you agree ill commit that and leave the dox to you
OK, and patch updated with a test. Result is:
Testing av_cmp_q()
1/0 cmp 1/1 -> 1
-1/0 cmp 1/1 -> -1
1/0 cmp -1/1 -> 1
1/0 cmp 1/0 -> 0
2/0 cmp 1/0 -> 0
1/0 cmp -1/0 -> 1
-1/0 cmp 1/0 -> -1
-1/0 cmp -1/0 -> 0
0/0 cmp 1/1 -> -2147483648
0/0 cmp -1/1 -> -2147483648
0/0 cmp 1/0 -> -2147483648
1/0 cmp 0/0 -> -2147483648
0/0 cmp -1/0 -> -2147483648
0/0 cmp 0/0 -> -2147483648
Tell if you want to keep the test or apply the test as a separate
patch or apply the patch yourself (but in that case remember to bump
lavu micro version).
Regards.
--
FFmpeg = Freak & Funny Mysterious Practical Exciting Guru
More information about the ffmpeg-devel
mailing list