From 8d7de6a0515b5e2eca3179df4d76f48b1e0d2965 Mon Sep 17 00:00:00 2001 From: k-m_schindler Date: Thu, 3 May 2012 21:02:31 +0000 Subject: update the implementation of av_cmp_q git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@2870 b956fd51-792f-4845-bead-9b4dfca2ff2c --- src/lib/ffmpeg-0.8/rational.pas | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'src/lib/ffmpeg-0.8/rational.pas') diff --git a/src/lib/ffmpeg-0.8/rational.pas b/src/lib/ffmpeg-0.8/rational.pas index f20fc68f..d3601ec5 100644 --- a/src/lib/ffmpeg-0.8/rational.pas +++ b/src/lib/ffmpeg-0.8/rational.pas @@ -152,19 +152,37 @@ implementation // This corresponds to the old c version and should be updated to // the new c version. -function av_cmp_q (a: TAVRational; b: TAVRational): cint; +function av_cmp_q (a: TAVRational; b: TAVRational): cint; {$IFDEF HasInline}inline;{$ENDIF} var tmp: cint64; begin tmp := a.num * cint64(b.den) - b.num * cint64(a.den); +{ old version if (tmp <> 0) then Result := (tmp shr 63) or 1 else + Result := 0; +} +{ C original: + if(tmp) return ((tmp ^ a.den ^ b.den)>>63)|1; + 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 tmp <> 0 then + Result := ((tmp xor a.den xor b.den) >> 63) or 1 + else if (b.den and a.den) <> 0 then Result := 0 + else if (a.num and b.num) <> 0 then + Result := (a.num >> 31) - (b.num >> 31) + else + Result := low(cint); + end; -function av_q2d(a: TAVRational): cdouble; +function av_q2d(a: TAVRational): cdouble; {$IFDEF HasInline}inline;{$ENDIF} begin Result := a.num / a.den; end; -- cgit v1.2.3