diff options
Diffstat (limited to 'Game/Code/lib/ffmpeg/rational.pas')
-rw-r--r-- | Game/Code/lib/ffmpeg/rational.pas | 92 |
1 files changed, 73 insertions, 19 deletions
diff --git a/Game/Code/lib/ffmpeg/rational.pas b/Game/Code/lib/ffmpeg/rational.pas index 86dbf8a4..14edb799 100644 --- a/Game/Code/lib/ffmpeg/rational.pas +++ b/Game/Code/lib/ffmpeg/rational.pas @@ -16,24 +16,33 @@ * 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 *) + +(* 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 *) + +// Revision: 10765 unit rational; + {$IFDEF FPC} - {$MODE DELPHI} (* CAT *) - {$PACKENUM 4} (* every enum type variables uses 4 bytes, CAT *) - {$PACKRECORDS C} (* GCC compatible, Record Packing, CAT *) + {$MODE DELPHI} + {$PACKENUM 4} (* use 4-byte enums *) + {$PACKRECORDS C} (* C/C++-compatible record packing *) +{$ELSE} + {$MINENUMSIZE 4} (* use 4-byte enums *) {$ENDIF} -interface (* unit windows is deleted by CAT *) +interface -{$I version.inc} +uses + UConfig; type (* - * Rational number num/den. *) + * Rational number num/den. + *) PAVRational = ^TAVRational; TAVRational = record num: integer; ///< numerator @@ -41,32 +50,75 @@ type end; (** - * returns 0 if a==b, 1 if a>b and -1 if a<b. + * 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. *) -function av_cmp_q(a: TAVRational; b: TAVRational): integer; +function av_cmp_q(a: TAVRational; b: TAVRational): integer; inline; (** - * converts the given AVRational to a double. + * Rational to double conversion. + * @param a rational to convert + * @return (double) a *) -function av_q2d(a: TAVRational): double; +function av_q2d(a: TAVRational): double; inline; (** - * reduce a fraction. - * this is usefull for framerate calculations + * Reduce a fraction. + * This is useful for framerate calculations. + * @param dst_nom destination numerator + * @param dst_den destination denominator + * @param nom source numerator + * @param den source denominator * @param max the maximum allowed for dst_nom & dst_den * @return 1 if exact, 0 otherwise *) -function av_reduce(dst_nom: pinteger; dst_den: PInteger; nom: int64; den: int64; max: int64): integer; +function av_reduce(dst_nom: PInteger; dst_den: PInteger; nom: int64; den: int64; max: int64): integer; cdecl; external av__util; +(** + * Multiplies two rationals. + * @param b first rational. + * @param c second rational. + * @return b*c. + *) function av_mul_q(b: TAVRational; c: TAVRational): TAVRational; cdecl; external av__util; + +(** + * Divides one rational by another. + * @param b first rational. + * @param c second rational. + * @return b/c. + *) function av_div_q(b: TAVRational; c: TAVRational): TAVRational; cdecl; external av__util; + +(** + * Adds two rationals. + * @param b first rational. + * @param c second rational. + * @return b+c. + *) function av_add_q(b: TAVRational; c: TAVRational): TAVRational; cdecl; external av__util; + +(** + * Subtracts one rational from another. + * @param b first rational. + * @param c second rational. + * @return b-c. + *) function av_sub_q(b: TAVRational; c: TAVRational): TAVRational; cdecl; external av__util; + +(** + * Converts a double precision floating point number to a rational. + * @param d double to convert + * @param max the maximum allowed numerator and denominator + * @return (AVRational) d. + *) function av_d2q(d: double; max: integer): TAVRational; cdecl; external av__util; @@ -76,10 +128,12 @@ function av_cmp_q (a: TAVRational; b: TAVRational): integer; var tmp: int64; begin - tmp := a.num * b.den - b.num * a.den; + tmp := a.num * int64(b.den) - b.num * int64(a.den); - if tmp <> 0 then Result := (tmp shr 63) or 1 (* fixed by CAT *) - else Result := 0 + if (tmp <> 0) then + Result := (tmp shr 63) or 1 + else + Result := 0 end; function av_q2d(a: TAVRational): double; |