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/rational.pas | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'src/lib/ffmpeg') diff --git a/src/lib/ffmpeg/rational.pas b/src/lib/ffmpeg/rational.pas index 892f2273..24bbfa8d 100644 --- a/src/lib/ffmpeg/rational.pas +++ b/src/lib/ffmpeg/rational.pas @@ -151,7 +151,7 @@ function av_find_nearest_q_idx(q: TAVRational; q_list: {const} PAVRationalArray) implementation -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 @@ -160,16 +160,27 @@ begin if (tmp <> 0) then Result := (tmp shr 63) or 1 else - Result := 0 -{ new version: + 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