From 98a62d73be92880f5cbbcf2ffb26b6fcecb0a368 Mon Sep 17 00:00:00 2001 From: brian-ch Date: Sat, 26 Sep 2015 18:11:45 +0000 Subject: Add support for ffmpeg 2.8 git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@3139 b956fd51-792f-4845-bead-9b4dfca2ff2c --- src/lib/ffmpeg-2.8/rational.pas | 241 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 241 insertions(+) create mode 100644 src/lib/ffmpeg-2.8/rational.pas (limited to 'src/lib/ffmpeg-2.8/rational.pas') diff --git a/src/lib/ffmpeg-2.8/rational.pas b/src/lib/ffmpeg-2.8/rational.pas new file mode 100644 index 00000000..0c795c54 --- /dev/null +++ b/src/lib/ffmpeg-2.8/rational.pas @@ -0,0 +1,241 @@ +(* + * rational numbers + * Copyright (c) 2003 Michael Niedermayer + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * This is a part of Pascal porting of ffmpeg. + * - Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * - For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversion of libavutil/rational.h + * avutil version 54.7.100 + * + *) + +unit rational; + +{$IFDEF FPC} + {$MODE DELPHI} + {$PACKENUM 4} (* use 4-byte enums *) + {$PACKRECORDS C} (* C/C++-compatible record packing *) +{$ELSE} + {$MINENUMSIZE 4} (* use 4-byte enums *) +{$ENDIF} + +{$I switches.inc} + +interface + +uses + ctypes, + UConfig; + +(** + * @addtogroup lavu_math + * @{ + *) + +type +(** + * rational number numerator/denominator + *) + PAVRational = ^TAVRational; + TAVRational = record + num: cint; ///< numerator + den: cint; ///< denominator + end; + + TAVRationalArray = array[0 .. (MaxInt div SizeOf(TAVRational))-1] of TAVRational; + PAVRationalArray = ^TAVRationalArray; + +(** + * Create a rational. + * Useful for compilers that do not support compound literals. + * @note The return value is not reduced. + */ +static inline AVRational av_make_q(int num, int den) +{ + AVRational r = { num, den }; + return r; +} + +/**) + +(** + * Create a rational. + * Useful for compilers that do not support compound literals. + * @note The return value is not reduced. + *) +function av_make_q(num, den: cint): TAVRational; {$IFDEF HasInline}inline;{$ENDIF} + +(** + * Compare two rationals. + * @param a first rational + * @param b second rational + * @return 0 if a==b, 1 if a>b, -1 if a 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) shr 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 shr 31) - (b.num shr 31) + else + Result := low(cint); + +end; + +function av_q2d(a: TAVRational): cdouble; {$IFDEF HasInline}inline;{$ENDIF} +begin + Result := a.num / a.den; +end; + +function av_inv_q(q: TAVRational): TAVRational; {$IFDEF HasInline}inline;{$ENDIF} +begin + Result.num := q.den; + Result.den := q.num; +end; + +function av_make_q(num, den: cint): TAVRational; {$IFDEF HasInline}inline;{$ENDIF} +begin + Result.num := num; + Result.den := den; +end; + +end. -- cgit v1.2.3