From 9801dc05977c9fef203dacee72ded221c7c36f1a Mon Sep 17 00:00:00 2001 From: eugeni Date: Fri, 16 Feb 2007 17:49:35 +0000 Subject: Move conversions between 16.16, 26.6 fixed point and int, double to separate functions. Some rounding errors are fixed along the way. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@22231 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libass/ass_utils.h | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'libass/ass_utils.h') diff --git a/libass/ass_utils.h b/libass/ass_utils.h index c445390..6c4ecce 100644 --- a/libass/ass_utils.h +++ b/libass/ass_utils.h @@ -25,5 +25,31 @@ int mystrtoi(char** p, int base, int* res); int mystrtou32(char** p, int base, uint32_t* res); int mystrtod(char** p, double* res); int strtocolor(char** q, uint32_t* res); + +static inline int d6_to_int(int x) { + return (x + 32) >> 6; +} +static inline int d16_to_int(int x) { + return (x + 32768) >> 16; +} +static inline int int_to_d6(int x) { + return x << 6; +} +static inline int int_to_d16(int x) { + return x << 16; +} +static inline int d16_to_d6(int x) { + return (x + 512) >> 10; +} +static inline int d6_to_d16(int x) { + return x << 10; +} +static inline double d6_to_double(int x) { + return x / 64.; +} +static inline int double_to_d6(double x) { + return (int)(x * 64); +} + #endif -- cgit v1.2.3